[英]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
的樣本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 而不是概率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.