CNN 模型 Keras 中分类预测结果的巨大差异
Huge disparity in classification prediction results in CNN model Keras
我用 Keras 训练了一个 CNN
模型,df
为 921 rows x 10165 columns
每行都是一个具有 10160
特征的样本。然后我使用预训练模型进行预测。
我确保训练数据均衡,大约 50% 的样本带有标签 0
,其余 50% 带有标签 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
样本的比例。问题是,鉴于输入数据的 1
和 0
数量平衡,我预计分数约为 50% 左右,但计算出的分数在范围 0.08
之间~ 0.98
(如果不是更极端的话)有巨大的差异。可能出了什么问题?
改用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 而不是概率。
我用 Keras 训练了一个 CNN
模型,df
为 921 rows x 10165 columns
每行都是一个具有 10160
特征的样本。然后我使用预训练模型进行预测。
我确保训练数据均衡,大约 50% 的样本带有标签 0
,其余 50% 带有标签 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
样本的比例。问题是,鉴于输入数据的 1
和 0
数量平衡,我预计分数约为 50% 左右,但计算出的分数在范围 0.08
之间~ 0.98
(如果不是更极端的话)有巨大的差异。可能出了什么问题?
改用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 而不是概率。