首页 > 解决方案 > CNN模型Keras中分类预测结果的巨大差异

问题描述

CNN用 Keras 训练了一个模型df921 rows x 10165 columns每行是一个带有10160特征的样本。然后我使用预训练模型进行预测。

我确保训练数据平衡良好,大约 50% 的样本带有 label 0,其余 50% 带有 label 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()

我用代码预测了带有预测标签“1”(对于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 ==1所有样本中样本的比例。问题是,鉴于输入数据具有平衡的数量10,我预计该分数约为 50% 左右,但计算出的分数介于范围0.08~ 0.98(如果不是更极端的话)之间存在巨大差异。可能出了什么问题?

标签: pythonmachine-learningkeraspredictionconv-neural-network

解决方案


改为使用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 而不是概率。


推荐阅读