1 回答

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 不會“保護”你,比如在多類問題中使用二元交叉熵,或在回歸設置中使用準確性......
添加回答
舉報