写一个基于python的BP神经网络,将数据划分为训练集和测试集,并且将预测值反归一化输出到excel表格
时间: 2024-05-02 12:22:15 浏览: 106
以下是基于Python的BP神经网络的代码,包括数据划分为训练集和测试集,以及将预测值反归一化输出到Excel表格的功能。
```python
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense
# 读取数据
data = pd.read_excel('data.xlsx')
# 将数据集分为特征和目标变量
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values
# 将目标变量进行归一化
scaler = MinMaxScaler()
y = scaler.fit_transform(y.reshape(-1, 1))
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 构建BP神经网络模型
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=150, batch_size=10)
# 评估模型
scores = model.evaluate(X_test, y_test)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
# 预测测试集结果
y_pred = model.predict(X_test)
# 将预测结果反归一化
y_pred = scaler.inverse_transform(y_pred)
# 将预测结果输出到Excel表格
df = pd.DataFrame({'Actual': scaler.inverse_transform(y_test.reshape(-1)), 'Predicted': y_pred.reshape(-1)})
df.to_excel('predicted_results.xlsx', index=False)
```
在这个例子中,我们使用了一个包含8个输入、12个隐藏层节点和1个输出的BP神经网络模型。我们将训练集和测试集的比例设置为80:20,并使用Adam优化器和二元交叉熵损失函数来编译模型。在训练模型之后,我们使用模型评估方法来评估模型的准确性,并使用模型预测方法来预测测试集的结果。最后,我们将预测结果反归一化,并将它们输出到一个Excel表格中。
阅读全文