scikit-learn MLPRegressor 预测结果总是变化且不一致

Posted

技术标签:

【中文标题】scikit-learn MLPRegressor 预测结果总是变化且不一致【英文标题】:scikit-learn MLPRegressor prediction results always change and inconsistent 【发布时间】:2018-03-12 18:55:42 【问题描述】:

我正在尝试使用 MLPRegressor 训练和测试我的数据集。我有两个数据集(训练数据集和测试数据集),它们都具有完全相同的特征和标签列。这是我的数据集示例:

训练数据集:

Full,Gold Standard
1.176,3.571
4.231,3.467
3.75,4.333
3.519,3.5
1.154,2.833
3.2,3.643
2.692,3.4
3.611,2.733
4.0,2.393
2.727,1.933
3.529,3.423
2.647,2.733
1.538,2.786
2.0,2.967
2.647,2.533
1.786,2.552
5.0,5.0
3.158,4.6
1.875,2.733

测试数据集:

Full,Gold Standard
1.667,2.345
3.056,1.9
1.765,2.2
0.714,0.0
1.538,2.586
2.188,1.667
3.333,2.8
2.5,2.481
1.667,2.433
1.842,0.0
2.381,0.793
0.588,1.0
1.176,1.433
1.538,2.3
0.588,1.655
0.909,2.333
0.833,3.333
1.111,2.5
0.0,2.067

这是我的代码:

import csv
import numpy as np 
import random
import os.path

from sklearn import preprocessing as pre
from sklearn.neural_network import MLPRegressor

with open('FullFeatures2017.csv') as f:
    reader = csv.reader(f)
    next(reader, None)
    training = list(reader)
f.closed
#print("Row number of data training : ", len(training))

print

#------------training-------------------
train_data = [list(map(float, training[i])) for i in range(len(training))]
data1 = np.array(train_data)
print("Row number of training data : ", len(train_data))
X_train = data1[:, :-1]
y_train = data1[:, -1:]

scaler = pre.StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)

print

#------------open csv data testing-------------------
with open('FullFeatures2016.csv') as f:
    reader = csv.reader(f)
    next(reader, None)
    testing = list(reader)
f.closed
#print("Row number data testing : ", len(testing))

print

#------------testing-------------------
test_data = [list(map(float, testing[i])) for i in range(len(testing))]
data2 = np.array(test_data)
print("Row number of testing data : ", len(test_data))
X_test = data2[:, :-1]
y_test = data2[:, -1:]

X_test_scaled = scaler.fit_transform(X_test)

print

#------------Model Training-------------------
mlp = MLPRegressor(max_iter=500, learning_rate_init=0.1, random_state=1, solver='lbfgs', tol=0.001 )
y_train2 = np.ravel(y_train)
mlp.fit(X_train_scaled, y_train2)
#print(mlp.fit(X_train, y_train2))

print

#------------Model Testing or Prediction-------------------
prediction = mlp.predict(X_test_scaled)
print len(prediction)
print
print prediction
print

它可以工作,但每次我运行程序时结果总是会改变。我已经给出了 random_state 数字,例如 1、2 或 3(不是 0),但仍然总是在变化。

有人知道如何使用 MLPRegressor 预测相同且一致的结果吗?

谢谢

【问题讨论】:

播种会增加一致性吗? 请问,什么播种?对不起,我不明白 在脚本开头添加np.random.seed(0),例如 它仍然在变化 找到解决方案了吗?我有同样的问题。使用相同的 random_state 仍然会导致不同的结果。 【参考方案1】:

我遇到了同样的问题,并且使用 erasmortg 所说的效果很好。

在脚本开头添加np.random.seed(0)

再补充一点,改变 np.random.seed() 的种子也会改变你在 MLPRegressor 方法中改变 random_state=0 时得到的答案。

【讨论】:

以上是关于scikit-learn MLPRegressor 预测结果总是变化且不一致的主要内容,如果未能解决你的问题,请参考以下文章

使用 MLPRegressor 拟合简单数据时遇到问题

如何调整 MLPRegressor?

sklearn MLPRegressor 的 TensorFlow 副本产生其他结果

keras 和 scikit-learn 中 MLP 回归器的不同损失值和准确度

Python:使用 MLPRegressor 拟合 3D 函数

MLPRegressor 给出非常负的分数