请写一个使用MLP神经网络进行混凝土强度预测的代码,数据集包括有五个输入变量和一个输出变量,共1030个样本数。要求输出预测图,求得平均绝对误差、平均绝对百分误差、均方根误差、R2等评价指标。要求拟合精度越精确越好。
时间: 2024-03-17 18:40:50 浏览: 58
神经网络预测混凝土强度
好的,我会尽力回答你的问题。首先,我们需要导入所需的库和数据集,代码如下:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
from keras.models import Sequential
from keras.layers import Dense
# 导入数据集
dataset = pd.read_excel('concrete_data.xlsx')
```
接下来,我们需要对数据集进行预处理,包括将数据集分为训练集和测试集、标准化输入变量等。代码如下:
```python
# 将输入变量和输出变量分开
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 标准化输入变量
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
```
接下来,我们可以开始建立MLP神经网络模型了。在这个例子中,我们选择使用两个隐藏层,每个隐藏层包括10个神经元。代码如下:
```python
# 建立MLP神经网络模型
model = Sequential()
model.add(Dense(units=10, input_dim=5, activation='relu'))
model.add(Dense(units=10, activation='relu'))
model.add(Dense(units=1))
# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')
```
接下来,我们可以训练模型并进行预测了。这里我们选择进行100个epoch的训练,并将训练过程的loss值保存下来。代码如下:
```python
# 训练模型
history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, y_test))
# 对测试集进行预测
y_pred = model.predict(X_test)
```
最后,我们可以计算评价指标并输出预测图了。代码如下:
```python
# 计算评价指标
print('MAE:', mean_absolute_error(y_test, y_pred))
print('MAPE:', np.mean(np.abs((y_test - y_pred) / y_test)) * 100)
print('RMSE:', np.sqrt(mean_squared_error(y_test, y_pred)))
print('R2:', r2_score(y_test, y_pred))
# 输出预测图
plt.plot(y_test, color='blue', label='Actual')
plt.plot(y_pred, color='red', label='Predicted')
plt.title('Concrete Strength Prediction')
plt.xlabel('Sample')
plt.ylabel('Strength')
plt.legend()
plt.show()
```
完整的代码如下:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
from keras.models import Sequential
from keras.layers import Dense
# 导入数据集
dataset = pd.read_excel('concrete_data.xlsx')
# 将输入变量和输出变量分开
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 标准化输入变量
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
# 建立MLP神经网络模型
model = Sequential()
model.add(Dense(units=10, input_dim=5, activation='relu'))
model.add(Dense(units=10, activation='relu'))
model.add(Dense(units=1))
# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')
# 训练模型
history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, y_test))
# 对测试集进行预测
y_pred = model.predict(X_test)
# 计算评价指标
print('MAE:', mean_absolute_error(y_test, y_pred))
print('MAPE:', np.mean(np.abs((y_test - y_pred) / y_test)) * 100)
print('RMSE:', np.sqrt(mean_squared_error(y_test, y_pred)))
print('R2:', r2_score(y_test, y_pred))
# 输出预测图
plt.plot(y_test, color='blue', label='Actual')
plt.plot(y_pred, color='red', label='Predicted')
plt.title('Concrete Strength Prediction')
plt.xlabel('Sample')
plt.ylabel('Strength')
plt.legend()
plt.show()
```
希望这段代码能够帮助到你!
阅读全文