CNN模型Keras中分类预测结果的巨大差异

时间:2020-02-16 23:52:18

标签: python machine-learning keras prediction cnn

我用CNN的{​​{1}}的Keras训练了df模型。每一行都是具有921 rows x 10165 columns功能的样本。然后,我将预训练模型用于预测。

我确保训练数据平衡良好,大约50%的样本带有标签10160,其余50%的样本带有标签0。模型准确性看起来不错,但在预测过程中存在问题。

所以输入数据如下:

1

我用代码预测了带有预测标签“ 1”(对于X = df.iloc[:,0:10160] X = X.to_numpy() X = X.reshape([X.shape[0], X.shape[1],1]) X_train_1 = X[:,0:10080,:] X_train_2 = X[:,10080:10160,:].reshape(921,80) Y = df.iloc[:,10163:10165] Y = Y.to_numpy() )的样本数量:

label_1

第二行代码计算所有样本中prediction = pd.DataFrame(model.predict([X_train_1,X_train_2])) prediction['label_1'] = ['0' if x < 0.5 else '1' for x in prediction['prob']] prediction[prediction['label_1'] == '1'].shape[0]/921 的样本的比例。问题是,鉴于输入数据具有label_1 ==11的平衡数,我期望该分数约为50%左右,但计算出的分数在0范围之间0.08(如果不是更极端的话)的差异很大。可能出了什么问题?

1 个答案:

答案 0 :(得分:0)

改为使用model.predict_classes()。否则,您将获得概率。

prediction = pd.DataFrame(model.predict_classes([X_train_1,X_train_2])) 
prediction[prediction['label_1'] == '1'].shape[0]/921

如果您使用的是功能性API,请使用np.argmax()

np.argmax(model.predict([X_train_1,X_train_2]), axis=1)

那么您将需要用0和1而不是概率来预测所需的预测。