为啥我的 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 之间?的主要内容,如果未能解决你的问题,请参考以下文章