# 准备数据 X = group3[['vis_min']].values y = group3['pm10'].values # 数据归一化 scaler = MinMaxScaler() X_scaled = scaler.fit_transform(X) y_scaled = scaler.fit_transform(y.reshape(-1, 1)) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_scaled, test_size=0.2, random_state=42) # 定义模型 model = Sequential([ Dense(64, activation='relu', input_shape=(1,)), Dense(64, activation='relu'), Dense(1) ]) # 编译模型 model.compile(optimizer='adam', loss='mse') # 训练模型 model.fit(X_train, y_train, epochs=100, batch_size=32, verbose=0) # 在测试集上进行预测 y_pred = model.predict(X_test) # 反归一化预测结果 y_pred = scaler.inverse_transform(y_pred) # 打印拟合方程式和参数 weights = model.get_weights() # 打印拟合方程式和参数 a, b, c = weights[0][0][0].item(), weights[1][0][0].item(), weights[2][0][0].item() print('拟合方程式:y = {:.2f} * exp({:.2f} * x) + {:.2f}'.format(a, b, c)) print('参数:a = {:.2f}, b = {:.2f}, c = {:.2f}'.format(a, b, c)) # 绘制拟合曲线 x_range = np.linspace(X.min(), X.max(), 100).reshape(-1, 1) y_fit = a * np.exp(b * x_range) + c plt.scatter(X, y, c='r', label='原始数据') plt.plot(x_range, y_fit, 'g-', label='拟合曲线') plt.xlabel('能见度(km)') plt.ylabel('PM10浓度(μg/立方米)') plt.title('指数函数拟合') plt.legend() plt.show()
时间: 2024-03-29 19:37:33 浏览: 72
解决MySQL 5.7.9版本sql_mode=only_full_group_by问题
这段代码的作用是进行指数函数拟合,并绘制出拟合曲线。具体实现步骤如下:
1. 准备数据:从数据集中取出 `vis_min` 和 `pm10` 两列数据,分别赋值给 `X` 和 `y` 变量。
2. 数据归一化:使用 `MinMaxScaler` 函数对 `X` 和 `y` 进行归一化处理。
3. 划分训练集和测试集:使用 `train_test_split` 函数将数据集分为训练集和测试集。
4. 定义模型:使用 `Sequential` 函数定义一个顺序模型,其中包含三个全连接层,分别有 64 个神经元,激活函数为 ReLU。
5. 编译模型:使用 `compile` 函数对模型进行编译,指定优化器为 Adam,损失函数为 MSE。
6. 训练模型:使用 `fit` 函数对模型进行训练,指定训练次数为 100 次,每次训练的批次大小为 32。
7. 在测试集上进行预测:使用 `predict` 函数对测试集进行预测,得到预测结果 `y_pred`。
8. 反归一化预测结果:使用 `inverse_transform` 函数对 `y_pred` 进行反归一化处理。
9. 打印拟合方程式和参数:使用 `get_weights` 函数获取模型的参数,并将其打印出来。
10. 绘制拟合曲线:根据拟合方程式计算出拟合曲线的数据,并使用 `matplotlib` 库绘制出原始数据和拟合曲线。
总之,这段代码是一个完整的指数函数拟合的实现过程,以及可视化拟合结果的代码。
阅读全文