亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用交叉驗證輸出中的最佳模型來使用 keras model.predict()?

如何使用交叉驗證輸出中的最佳模型來使用 keras model.predict()?

回首憶惘然 2022-11-18 18:06:04
我有一個這樣的 DNA 序列數據框:Feature         LabelGCTAGATGACAGT   0TTTTAAAACAG     1TAGCTATACT      2    TGGGGCAAAAAAAA  0AATGTCG         3AATGTCG         0AATGTCG         1其中有一列帶有 DNA 序列,標簽可以是 0、1、2、3(即該 DNA 序列的類別)。我想開發一個神經網絡來預測每個序列分類為 1,2 或 3 類別的概率(不是 0,我不關心 0)。每個序列可以在數據框中出現多次,并且每個序列有可能出現在多個(或所有)類別中。所以輸出應該是這樣的:GCTAGATGACAGT   (0.9,0.1,0.2)TTTTAAAACAG     (0.7,0.6,0.3)TAGCTATACT      (0.3,0.3,0.2)    TGGGGCAAAAAAAA  (0.1,0.5,0.6)其中元組中的數字是序列在類別 1,2 和 3 中找到的概率。它運行,并按預期打印精度(精度不是很好,62%,但我可以解決這個問題,這是我的第一個 NN,只想運行一個示例)。我的問題專門針對預測。有人可以向我展示一個從擬合模型(我在上面有)到實際預測的跳躍示例。我認為該算法涉及:從交叉驗證中找到最佳模型(我試圖將其與監視器 val 準確性部分結合起來)預測類別的序列列表在 pred_list 中擬合從訓練到 pred_list 的最佳模型如問題頂部所述的返回概率。我從其他問題中知道這存在(例如這里):prediction = model.predict(np.array(tk.texts_to_sequences(text))) print(prediction)....但我不知道如何將它與交叉驗證結合起來,也不知道如何以一種方式獲得我想要的輸出(即在訓練中每個序列被分配到 1,2 或 3 類的三類概率數據集,其中每個序列可以出現在多個類中)。
查看完整描述

1 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

你在一個問題中問了太多而且很不相關的東西,而且里面有好幾個問題。我將嘗試解決我認為最嚴重的問題。


首先,如果您有以下形式的案例


Feature         Label

AATGTCG         3

AATGTCG         0

AATGTCG         1

即,完全相同的單個特征可以屬于 0、1 或 3 類,沒有任何其他特征存在,那么這里的信息是監督分類可能不適合您手頭的問題;為此,您應該使用附加功能。


如果,如您所說,您只對第 1、2 和 3 類感興趣,并且


不是 0,我不關心 0


那么在數據準備階段你應該做的第一件事就是從你的數據集中刪除類 0 的所有實例;不清楚你是否在這里這樣做,即使你這樣做了,也不清楚為什么你仍然將 0 類留在討論中。


其次(假設您的分類問題中確實只剩下 3 個類),您顯示的是模型的預期輸出:


GCTAGATGACAGT   (0.9,0.1,0.2)

TTTTAAAACAG     (0.7,0.6,0.3)

TAGCTATACT      (0.3,0.3,0.2)    

TGGGGCAAAAAAAA  (0.1,0.5,0.6)

不正確;在多類分類中,返回的概率(即此處括號中的數字)加起來必須正好為1,而這里不是這種情況。


第三,由于您有一個多類分類問題,您的損失應該是categorical_crossentropy,而不是binary_crossentropy,它僅用于二元分類問題。


第四,再次假設你只剩下 3 個類,模型的最后一層應該是


model.add(Dense(3, activation='softmax') # no. of units here should be equal to the no. of classes)

而你的標簽y應該是一次性編碼的(你可以使用 Keras 函數輕松做到這一點to_categorical)。


第五,仔細查看循環開頭的數據定義:


X_train, X_test = data_encoded[train], data_encoded[test]

y_train, y_test = data_encoded[train], data_encoded[test]

您可以很容易地看到您將特征作為特征和標簽傳遞。我只能猜測這一定是你方的錯字;標簽應該是:


y_train, y_test = y[train], y[test]

關于您的預測時間錯誤


Error when checking input: expected embedding_3_input to have shape (5,) but got array with shape (1,)

這是由于input_length=5嵌入層中的參數。我在這里承認,我一點也不熟悉 Keras 嵌入層;您可能需要查看文檔以確保此參數和分配的值確實符合您的想法/打算做的事情。


除此之外,關于您的具體問題:


我的問題專門針對預測。有人可以向我展示一個從擬合模型(我在上面有)到實際預測的跳躍示例。


您應該在 CV 循環之外再次重新編譯和重新擬合模型(可能使用 CV 期間發現的“最佳”時期數)和整個數據,然后將其用于預測。


我想現在應該很清楚了,鑒于上述問題,你報告的 62% 的準確率實際上沒有任何意義;無論好壞,如果你試圖做從建模角度來看沒有意義的事情(就像我上面提到的大多數事情),Keras 不會“保護”你,比如在多類問題中使用二元交叉熵,或在回歸設置中使用準確性......



查看完整回答
反對 回復 2022-11-18
  • 1 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號