python 四种方法 机器学习 拟合物料温度随时间下降的规律 生成数据集 解释每个函数和每个参数 输出函数方程
  X5zJxoD00Cah 2023年11月02日 30 0

在Python中,您可以使用四种不同的方法来拟合物料温度随时间下降的规律,并生成一个数据集。这四种方法包括线性回归、多项式回归、指数拟合和神经网络。我将为您提供每种方法的示例代码,并解释每个函数和参数。请注意,这只是一个简单的示例,实际数据集和问题可能需要更复杂的模型和参数调整。

import numpy as np
from sklearn.linear_model import LinearRegression

# 生成数据集
# np.linspace(0, 10, 100)
# 生成了一个长度为100的等差数列,其中第一个元素是0,最后一个元素是10
np.random.seed(0)
X = np.linspace(0, 10, 100)  # 时间
y = 30 - 2 * X + np.random.normal(0, 2, 100)  # 温度随时间下降,加入噪声

# 创建线性回归模型
model = LinearRegression()

# 拟合数据
# numpy.ndarray.reshape(-1, 1)
# -1 表示该维度的大小由其他维度自动推断得出,而 1 表示该数组只有一列。
# 这个函数可以用于将一个一维数组转换为一个100行*1列的二维数组
model.fit(X.reshape(-1, 1), y)

# 输出线性回归方程
slope = model.coef_[0]  # 斜率
intercept = model.intercept_  # 截距
print(f"线性回归方程: 温度 = {slope:.2f} * 时间 + {intercept:.2f}")  # 格式化为2位小数
线性回归方程: 温度 = -2.06 * 时间 + 30.42
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

# 生成数据集(与上面相同)

# 创建多项式回归模型
# PolynomialFeatures生成(degree=2次)多项式,1元,无交互特征
# fit_transform 将原始特征矩阵转换为多项式特征矩阵,100行*3列,[...,[1,x,x^2]]
# numpy.ndarray.reshape(-1, 1) 将一个一维数组转换为一个?行*1列的二维数组
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X.reshape(-1, 1))

# 线性回归
model = LinearRegression()

# 拟合数据
model.fit(X_poly, y)

# 输出多项式回归方程
coefficients = model.coef_  # 斜率array
intercept = model.intercept_  # 截距
print(f"多项式回归方程: 温度 = {coefficients[2]:.2f} * 时间^2 + {coefficients[1]:.2f} * 时间 + {intercept:.2f}")
多项式回归方程: 温度 = 0.10 * 时间^2 + -3.10 * 时间 + 32.13
from scipy.optimize import curve_fit

# 生成数据集
X = np.linspace(0, 10, 100)  # 时间
y = 30 - 2 * X + np.random.normal(0, 2, 100)  # 温度随时间下降,加入噪声

# 定义指数函数模型
def exponential_func(t, a, b, c):
    return a * np.exp(b * t) + c

# 拟合数据
# 增加最大迭代次数
# p0提供初始参数估计initial_guess = [1.0, -0.1, 30.0] p0=initial_guess
# 生成两个array, params, covariance
# params 长度为3列的一维array, 其中3个数值元素分别对应斜率,底数,截距
params, covariance = curve_fit(exponential_func, X, y, maxfev=10000)
print(params)

# 输出指数拟合方程
a, b, c = params
print(f"指数拟合方程: 温度 = {a:.2f} * exp({b:.2f} * 时间) + {c:.2f}")
[-2.13520394e+04  9.26138668e-05  2.13819049e+04]
指数拟合方程: 温度 = -21352.04 * exp(0.00 * 时间) + 21381.90
import tensorflow as tf
from tensorflow import keras

# 生成数据集(与上面相同)

# 创建神经网络模型
model = keras.Sequential([
    keras.layers.Dense(10, activation='relu', input_shape=(1,)),
    keras.layers.Dense(1)
])

# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')

# 拟合数据
model.fit(X, y, epochs=1000, verbose=0)

# 输出神经网络模型(共十个,展示第一个)
# weights内各array的维数
# (1, 10)
# (10,)
# (10, 1)
# (1,)
# weights[0][0][0] 表示神经网络第一个Dense层的第一个节点的权重,weights[1][0] 表示第二个Dense层的第一个节点的权重
weights = model.get_weights()
slope = weights[0][0][0]
intercept = weights[1][0]
print(f"神经网络模型: 温度 = {slope:.2f} * 时间 + {intercept:.2f}")
'''
在神经网络中,`weights[0][0][0]` 和 `weights[1][0]` 表示神经网络中不同层和节点的权重参数。这些权重参数用于计算神经网络的输出。具体来说:

- `weights[0][0][0]` 表示神经网络的第一个Dense层的第一个节点的权重。这个权重用于对输入数据进行线性组合和非线性变换。在一个神经网络中,每个节点都有一个权重参数,用来调整其输入数据的影响。

- `weights[1][0]` 表示神经网络的第二个Dense层的第一个节点的权重。这个权重用于将第一个Dense层的输出进行进一步的线性组合和非线性变换,以生成神经网络的最终输出。

当你使用这些权重参数来构建一个方程时,它代表了神经网络的输出,其中输入是时间。通过线性组合和非线性变换,神经网络可以捕捉输入数据(时间)与输出数据(温度)之间的复杂关系。

以下是一个例子,说明如何使用这些权重参数构建神经网络模型的输出方程:

假设 `weights[0][0][0]` 为 0.5,`weights[1][0]` 为 10,那么神经网络模型的输出方程可以表示为:

```
神经网络模型: 温度 = 0.5 * 时间 + 10
```

这个方程表示了神经网络认为温度随时间变化的关系。在这个例子中,神经网络认为温度随时间线性增加,每增加1个时间单位,温度增加0.5单位,并且在时间为0时,温度是10。这个方程的具体形式取决于具体的权重参数和网络架构,它可以捕捉到数据中的复杂关系。
'''
神经网络模型: 温度 = -0.32 * 时间 + 0.00

方法1: 线性回归

线性回归是一种简单的拟合方法,假设温度随时间的关系是线性的,即温度随时间线性下降。

import numpy as np
from sklearn.linear_model import LinearRegression

# 生成数据集
np.random.seed(0)
X = np.linspace(0, 10, 100)  # 时间
y = 30 - 2 * X + np.random.normal(0, 2, 100)  # 温度随时间下降,加入噪声

# 创建线性回归模型
model = LinearRegression()

# 拟合数据
model.fit(X.reshape(-1, 1), y)

# 输出线性回归方程
slope = model.coef_[0]
intercept = model.intercept_
print(f"线性回归方程: 温度 = {slope:.2f} * 时间 + {intercept:.2f}")

方法2: 多项式回归

多项式回归假设温度与时间之间的关系是多项式形式的。

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

# 生成数据集(与上面相同)

# 创建多项式回归模型
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X.reshape(-1, 1))

model = LinearRegression()

# 拟合数据
model.fit(X_poly, y)

# 输出多项式回归方程
coefficients = model.coef_
intercept = model.intercept_
print(f"多项式回归方程: 温度 = {coefficients[2]:.2f} * 时间^2 + {coefficients[1]:.2f} * 时间 + {intercept:.2f}")

方法3: 指数拟合

指数拟合假设温度随时间按指数函数下降。

from scipy.optimize import curve_fit

# 生成数据集(与上面相同)

# 定义指数函数模型
def exponential_func(t, a, b, c):
    return a * np.exp(b * t) + c

# 拟合数据
params, covariance = curve_fit(exponential_func, X, y)

# 输出指数拟合方程
a, b, c = params
print(f"指数拟合方程: 温度 = {a:.2f} * exp({b:.2f} * 时间) + {c:.2f}")

方法4: 神经网络

神经网络可以用来拟合复杂的非线性关系。

import tensorflow as tf
from tensorflow import keras

# 生成数据集(与上面相同)

# 创建神经网络模型
model = keras.Sequential([
    keras.layers.Dense(10, activation='relu', input_shape=(1,)),
    keras.layers.Dense(1)
])

# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')

# 拟合数据
model.fit(X, y, epochs=1000, verbose=0)

# 输出神经网络模型
weights = model.get_weights()
slope = weights[0][0]
intercept = weights[1][0]
print(f"神经网络模型: 温度 = {slope:.2f} * 时间 + {intercept:.2f}")

以上是四种不同的方法来拟合温度随时间下降的规律并输出相应的方程。每种方法都有其适用的场景和假设,您可以根据具体问题选择最合适的方法。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
X5zJxoD00Cah