为啥我的 MLP 神经网络的输出在 0 和 1 之间?

Posted

技术标签:

【中文标题】为啥我的 MLP 神经网络的输出在 0 和 1 之间?【英文标题】:Why the output of my MLP neural network are between 0 and 1?为什么我的 MLP 神经网络的输出在 0 和 1 之间? 【发布时间】:2020-08-21 18:02:22 【问题描述】:

我创建了一个神经网络,使用历史数据进行训练来预测股票的未来价格。数据集按小时间隔排列,因此目标是预测下一小时交易结束时的价格。

我使用了 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之间的连续数值变量吗?

【问题讨论】:

致审稿人:这不是与UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples 的重复 - 错误原因完全不同(请参阅下面的答案)。 【参考方案1】:

价格是一个连续变量,所以这是一个回归问题而不是分类问题;在这里,您尝试将分类器应用于回归问题,这是错误的。

这样的分类器产生一个概率输出,不出所料,它位于 [0, 1]。

您应该使用MLPRegressor 模型而不是MLPClassifier

【讨论】:

以上是关于为啥我的 MLP 神经网络的输出在 0 和 1 之间?的主要内容,如果未能解决你的问题,请参考以下文章

大白话5分钟带你走进人工智能-第35节神经网络之sklearn中的MLP实战

TensorFlow MLP 不训练 XOR

TFboy养成记 多层感知器 MLP

动手学深度学习 3-3 Mlp

MLP(multi-layer perceptron)

MLP多层感知机网络——BPN反向传播神经网络