【发布时间】:2020-05-31 21:47:54
【问题描述】:
我用 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 之间(如果不是更极端)具有巨大的差异。可能出了什么问题?
【问题讨论】:
-
你是怎么在
prediction = pd.DataFrame(model.predict([X_train_1,X_train_2]))之后得到prediction['prob']的?它的结果应该是DataFrame,其列名中包含类名。
标签: python machine-learning keras prediction conv-neural-network