Scikit-Learn MLPRegressor - Как получить результаты, независимые от случайных семян? - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь изучить некоторую синусоидальную функцию, используя MLP. К сожалению, результаты существенно зависят от случайного семени. Как я могу настроить MLPRegressor, чтобы результаты стали меньше зависеть от случайного начального числа?

Код:

import numpy as np
from sklearn.metrics import mean_squared_error
from sklearn.neural_network import MLPRegressor

LOOK_BACK = 10

x = np.linspace(-10,10,1000)
y = np.sin(x)

dataX,dataY = [],[]
for i in range(len(y)-LOOK_BACK-1):
        dataX.append(y[i:(i+LOOK_BACK)])
        dataY.append(y[i+LOOK_BACK])
x_train = np.array(dataX)
y_train = np.array(dataY)


for i in range(10):
        print "np.random.seed(%d)"%(i)
        np.random.seed(i)
        model = MLPRegressor(activation='tanh',solver='adam')
        model.fit(x_train,y_train)
        train_predict = model.predict(x_train)
        print 'MSE train:', mean_squared_error(train_predict,y_train)

Выход:

np.random.seed(0)
MSE train: 0.00167560534562
np.random.seed(1)
MSE train: 0.0050531872206
np.random.seed(2)
MSE train: 0.00279393534973
np.random.seed(3)
MSE train: 0.00224293537385
np.random.seed(4)
MSE train: 0.00154350859516
np.random.seed(5)
MSE train: 0.00383997358155
np.random.seed(6)
MSE train: 0.0265389606087
np.random.seed(7)
MSE train: 0.00195637404624
np.random.seed(8)
MSE train: 0.000590823529864
np.random.seed(9)
MSE train: 0.00393172460516

Семена 6,9 и 8 производят разные порядки MSE. Как я мог предотвратить это?

1 Ответ

0 голосов
/ 05 мая 2018

Многослойный персептрон, а также другие архитектуры нейронных сетей страдают от того факта, что их соответствующие функции потерь имеют многочисленные локальные оптимумы. Таким образом, все градиентные алгоритмы сильно зависят от того, какая инициализация выбрана. И вместо того, чтобы рассматривать это как нежелательное, вы можете рассматривать инициализацию (определенную с помощью random_state) как дополнительный гиперпараметр, который дает вам гибкость.

Просто отметим, что различия в вашем MSE не так велики, и если ваша цель - идеально подобрать, то измените параметр регуляризации альфа на ноль (значение по умолчанию - альфа = 0,0001)

...