我制作了一个Keras LSTM模型,它读取二进制目标值,并且应该输出二进制预测。但是,预测不是二进制的。我的X和Y值的样本如下:
?country=US,UK,Japan
我想要预测的是Xt + 1是高于还是低于Xt。如果Xt + 1大于Xt,则Xt的Y值为1。我的训练X值的形状(932,100,1)为932个样本,100个为"回顾"序列,1为功能。我得到的预测如下:
X Y
5.06 0
4.09 1
4.72 0
4.57 0
4.44 1
6.98 1
我认为这些可能是概率,因为我的模型准确率约为51%。关于如何让它们成为二进制的任何想法?完整的型号代码如下:
Predictions
.512
.514
.513
答案 0 :(得分:3)
这是正常行为。
没有"二进制"在神经网络中,但在一定范围内的连续功能。
只有连续功能,模型才能使用"随机梯度下降"来训练和学习。
为了尝试实现二进制结果,我们使用sigmoid函数,它从0到1。但最初,你的模型没有经过训练,所有的"权重"是随机初始化的。结果确实结果倾向于表示值,在sigmoid函数中为0.5。
您所需要的只是为足够的时期训练您的模型足够的数据,因此结果将逐渐接近(但从未命中)0或1(或任何目标" y"您的训练数据中有)
答案 1 :(得分:0)
我遇到了同样的问题并解决了:
seq_predictions=model.predict(test_sequences)
print('Outputs shape')
print(seq_predictions.shape) # prints (n,1) but need (n,)
seq_predictions=np.transpose(seq_predictions)[0] # transformation to get (n,)
print(seq_predictions.shape) # now the shape is (n,)
# Applying transformation to get binary values predictions with 0.5 as thresold
seq_predictions = list(map(lambda x: 0 if x<0.5 else 1, seq_predictions))