Я хотел бы перестроить MLP, который я реализовал первым, с помощью MLPRegressor от scikit-learn с помощью tflearn.
Реализация sklearn.neural_network.MLPRegressor:
train_data = pd.read_csv('train_data.csv', delimiter = ';', decimal = ',', header = 0)
test_data = pd.read_csv('test_data.csv', delimiter = ';', decimal = ',', header = 0)
X_train = np.array(train_data.drop(['output'], 1))
X_scaler = StandardScaler()
X_scaler.fit(X_train)
X_train = X_scaler.transform(X_train)
Y_train = np.array(train_data['output'])
clf = MLPRegressor(activation = 'tanh', solver='lbfgs', alpha=0.0001, hidden_layer_sizes=(3))
clf.fit(X_train, Y_train)
prediction = clf.predict(X_train)
Модель сработала, и я получил точность 0.85
. Теперь я хотел бы создать аналогичный MLP с помощью tflearn. Я начал со следующего кода:
train_data = pd.read_csv('train_data.csv', delimiter = ';', decimal = ',', header = 0)
test_data = pd.read_csv('test_data.csv', delimiter = ';', decimal = ',', header = 0)
X_train = np.array(train_data.drop(['output'], 1))
X_scaler = StandardScaler()
X_scaler.fit(X_train)
X_train = X_scaler.transform(X_train)
Y_train = np.array(train_data['output'])
Y_scaler = StandardScaler()
Y_scaler.fit(Y_train)
Y_train = Y_scaler.transform(Y_train.reshape((-1,1)))
net = tfl.input_data(shape=[None, 6])
net = tfl.fully_connected(net, 3, activation='tanh')
net = tfl.fully_connected(net, 1, activation='sigmoid')
net = tfl.regression(net, optimizer='sgd', loss='mean_square', learning_rate=3.)
clf = tfl.DNN(net)
clf.fit(X_train, Y_train, n_epoch=200, show_metric=True)
prediction = clf.predict(X_train)
В какой-то момент я определенно настроил что-то неправильно, потому что прогноз был неверным. Диапазон Y_train находится между 20
и 88
, а прогноз показывает числа около 0.005
. В документации tflearn я только что нашел примеры для классификации.
ОБНОВЛЕНИЕ 1:
Я понял, что слой регрессии по умолчанию использует 'categorical_crossentropy'
в качестве функции потерь, которая предназначена для задач классификации. Поэтому я выбрал 'mean_square'
вместо этого. Я также пытался нормализовать Y_train
. Прогноз по-прежнему даже не соответствует диапазону Y_train
. Какие-нибудь мысли?
ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ:
Взгляните на принятый ответ.