gpt4 book ai didi

python - 如何使用均方根误差来优化 Scikit-Learn 中的神经网络?

转载 作者:行者123 更新时间:2023-12-01 03:27:39 26 4
gpt4 key购买 nike

我是神经网络新手,所以请原谅任何愚蠢的问题。我正在处理天气数据集。这里我使用露点、湿度、风向、风速来预测温度。我读过几篇这方面的论文,所以我很想自己做一项研究。首先,我用 4000 个观测值训练模型,然后尝试预测接下来的 50 个温度点。

这是我的整个代码。

from sklearn.neural_network import MLPRegressor
from sklearn.metrics import mean_squared_error
from sklearn import preprocessing
import numpy as np
import pandas as pd

df = pd.read_csv('WeatherData.csv', sep=',', index_col=0)

X = np.array(df[['DewPoint', 'Humidity', 'WindDirection', 'WindSpeed']])
y = np.array(df[['Temperature']])

# nan_array = pd.isnull(df).any(1).nonzero()[0]

neural_net = MLPRegressor(
activation='logistic',
learning_rate_init=0.001,
solver='sgd',
learning_rate='invscaling',
hidden_layer_sizes=(200,),
verbose=True,
max_iter=2000,
tol=1e-6
)
# Scaling the data
max_min_scaler = preprocessing.MinMaxScaler()
X_scaled = max_min_scaler.fit_transform(X)
y_scaled = max_min_scaler.fit_transform(y)


neural_net.fit(X_scaled[0:4001], y_scaled[0:4001].ravel())

predicted = neural_net.predict(X_scaled[5001:5051])

# Scale back to actual scale
max_min_scaler = preprocessing.MinMaxScaler(feature_range=(y[5001:5051].min(), y[5001:5051].max()))
predicted_scaled = max_min_scaler.fit_transform(predicted.reshape(-1, 1))

print("Root Mean Square Error ", mean_squared_error(y[5001:5051], predicted_scaled))

对我来说,第一个令人困惑的事情是,同一个程序在不同的运行中给出不同的 RMS 错误。为什么?我不明白。

运行 1:

Iteration 1, loss = 0.01046558
Iteration 2, loss = 0.00888995
Iteration 3, loss = 0.01226633
Iteration 4, loss = 0.01148097
Iteration 5, loss = 0.01047128
Training loss did not improve more than tol=0.000001 for two consecutive epochs. Stopping.
Root Mean Square Error 22.8201171703

运行 2(显着改进):

Iteration 1, loss = 0.03108813
Iteration 2, loss = 0.00776097
Iteration 3, loss = 0.01084675
Iteration 4, loss = 0.01023382
Iteration 5, loss = 0.00937209
Training loss did not improve more than tol=0.000001 for two consecutive epochs. Stopping.
Root Mean Square Error 2.29407183124

MLPRegressor 的文档中我无法找到一种方法来直接命中 RMS 错误并保持网络运行,直到达到所需的 RMS 错误。我在这里缺少什么?

请帮忙!

最佳答案

First confusing thing to me is that the same program is giving different RMS error at different run. Why? I am not getting it.

神经网络容易出现局部最优。永远不能保证你会学到任何像样的东西,也不能保证多次运行会得到相同的解决方案。学习过程高度随机,取决于初始化、采样顺序等。因此这种行为是预期的。

In the documentation of MLPRegressor I could not find a way to directly hit the RMS error and keep the network running until I reach the desired RMS error.

sklearn 中的神经网络非常基础,它们不提供这种灵 active 。如果您需要使用更复杂的设置,您只需要更多面向 NN 的库,例如 Keras、TF 等。 scikit-learn 社区付出了很多努力才使这个 NN 实现成为“in”,而且他们似乎并不打算这样做在不久的将来增加更多的灵 active 。

作为一件小事 - 使用“minmaxscaler”似乎有点奇怪。您不应该每次都“fit_transform”,您应该只适合一次,然后使用变换(或inverse_transform)。特别是,应该是

y_max_min_scaler = preprocessing.MinMaxScaler()
y_scaled = y_max_min_scaler.fit_transform(y)

...

predicted_scaled = y_max_min_scaler.inverse_transform(predicted.reshape(-1, 1))

关于python - 如何使用均方根误差来优化 Scikit-Learn 中的神经网络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41270698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com