import numpy as np
import pandas as pd
from sklearn.neural_network import MLPRegressor
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
# 读取数据 // 数据获取 https://mbd.pub/o/tomato/work
# 公众号:机器小番茄
data = pd.read_excel('data.xlsx').values
num=100
# 划分特征和目标变量
X = data[:num, :-1] #
y = data[:num, -1] #
# 创建并训练MLP模型
mlp = MLPRegressor(hidden_layer_sizes=(100, 50), max_iter=500)
mlp.fit(X, y)
y_pred = mlp.predict(X)
print("实际值:",np.round(y,3))
print("预测值:",np.round(y_pred,3))
# 创建并训练MLP模型
mlp = MLPRegressor(hidden_layer_sizes=(100, 50), max_iter=100)
mlp.fit(X, y)
# 获取损失值随迭代次数的变化
loss_values = mlp.loss_curve_
# 绘制迭代曲线
plt.figure()
plt.plot(range(1, len(loss_values) + 1), loss_values, marker='o')
plt.xlabel('迭代次数')
plt.ylabel('损失值')
plt.title('BP迭代曲线')
# plt.ylim(0,3000)
plt.show()
plt.figure()
plt.plot(y, label='实际值', color='blue',marker="o")
plt.plot( y_pred, label='预测值', color='red',marker="o")
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title('实际值和预测值')
plt.show()
# 预测未来的值
future_predictions = mlp.predict(data[num-1:, :-1])
print("历史值:",np.round(y, 3))
print("未来值:",np.round(future_predictions, 3))
# 绘制历史值和预测值
plt.figure()
plt.plot(range(len(y)), y, label='历史值', color='blue',marker="o")
plt.plot(range(len(y), len(y) + len(future_predictions), 1), future_predictions, label='预测值', color='red',marker="o")
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title('历史和预测值')
plt.show()
迭代曲线:
预测值与实际值
预测无标签数据: