Почему выходные данные моей нейронной сети MLP находятся между 0 и 1? - PullRequest
0 голосов
/ 06 мая 2020

Я создал нейронную сеть для прогнозирования будущих цен на акции, используя исторические данные для обучения. Набор данных организован с почасовыми интервалами, поэтому цель состоит в том, чтобы спрогнозировать цену в конце следующего часа торговли.

Я использовал 2 скрытых слоя формата (20,16), 26 входов и один выход, который должен быть ценой. Функция активации - relu, решатель - adam.

Когда обучение завершено, и я пытаюсь его протестировать, все выходы - это значения от 0 до 1, которые я не понимаю.

Вот мой код:

# Defining the target column and predictors
target_column = ['close']
predictors = list(set(list(df.columns))-set(target_column)

# Standardizing the DataFrame
df[predictors] = df[predictors]/df[predictors].max()
df.describe().transpose()

# Creating the sets and splitting data
X = df[predictors].values
y = df[target_column].values
y = y.astype('int')
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=1)
df.reset_index()

#Fitting the training data
mlp = MLPClassifier(hidden_layer_sizes=(20,16), activation='relu', solver='adam', max_iter=1000)
mlp.fit(X_train, y_train.ravel())

#Predicting training and test data
predict_train = mlp.predict(X_train)
predict_test = mlp.predict(X_test)

После того, как я выполню код, я также получаю это предупреждение:

UndefinedMetricWarning: Recall and F-score are ill-defined and being set to 0.0 in labels with no true samples. `Use `zero_division` parameter to control this behavior.

Разве прогноз не должен быть, по крайней мере, непрерывной числовой переменной, не ограниченной между 1 и 0?

1 Ответ

2 голосов
/ 06 мая 2020

Цена - непрерывная переменная, поэтому это проблема регрессии, а не классификации; здесь вы пытаетесь применить классификатор к проблеме регрессии, что неверно.

Такие классификаторы выдают результат вероятности c, который, что неудивительно, находится в [0, 1] .

Следует использовать модель MLPRegressor вместо MLPClassifier.

...