1 回答

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
你在一個(gè)問題中問了太多而且很不相關(guān)的東西,而且里面有好幾個(gè)問題。我將嘗試解決我認(rèn)為最嚴(yán)重的問題。
首先,如果您有以下形式的案例
Feature Label
AATGTCG 3
AATGTCG 0
AATGTCG 1
即,完全相同的單個(gè)特征可以屬于 0、1 或 3 類,沒有任何其他特征存在,那么這里的信息是監(jiān)督分類可能不適合您手頭的問題;為此,您應(yīng)該使用附加功能。
如果,如您所說,您只對第 1、2 和 3 類感興趣,并且
不是 0,我不關(guān)心 0
那么在數(shù)據(jù)準(zhǔn)備階段你應(yīng)該做的第一件事就是從你的數(shù)據(jù)集中刪除類 0 的所有實(shí)例;不清楚你是否在這里這樣做,即使你這樣做了,也不清楚為什么你仍然將 0 類留在討論中。
其次(假設(shè)您的分類問題中確實(shí)只剩下 3 個(gè)類),您顯示的是模型的預(yù)期輸出:
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)
不正確;在多類分類中,返回的概率(即此處括號中的數(shù)字)加起來必須正好為1,而這里不是這種情況。
第三,由于您有一個(gè)多類分類問題,您的損失應(yīng)該是categorical_crossentropy,而不是binary_crossentropy,它僅用于二元分類問題。
第四,再次假設(shè)你只剩下 3 個(gè)類,模型的最后一層應(yīng)該是
model.add(Dense(3, activation='softmax') # no. of units here should be equal to the no. of classes)
而你的標(biāo)簽y應(yīng)該是一次性編碼的(你可以使用 Keras 函數(shù)輕松做到這一點(diǎn)to_categorical)。
第五,仔細(xì)查看循環(huán)開頭的數(shù)據(jù)定義:
X_train, X_test = data_encoded[train], data_encoded[test]
y_train, y_test = data_encoded[train], data_encoded[test]
您可以很容易地看到您將特征作為特征和標(biāo)簽傳遞。我只能猜測這一定是你方的錯(cuò)字;標(biāo)簽應(yīng)該是:
y_train, y_test = y[train], y[test]
關(guān)于您的預(yù)測時(shí)間錯(cuò)誤
Error when checking input: expected embedding_3_input to have shape (5,) but got array with shape (1,)
這是由于input_length=5嵌入層中的參數(shù)。我在這里承認(rèn),我一點(diǎn)也不熟悉 Keras 嵌入層;您可能需要查看文檔以確保此參數(shù)和分配的值確實(shí)符合您的想法/打算做的事情。
除此之外,關(guān)于您的具體問題:
我的問題專門針對預(yù)測。有人可以向我展示一個(gè)從擬合模型(我在上面有)到實(shí)際預(yù)測的跳躍示例。
您應(yīng)該在 CV 循環(huán)之外再次重新編譯和重新擬合模型(可能使用 CV 期間發(fā)現(xiàn)的“最佳”時(shí)期數(shù))和整個(gè)數(shù)據(jù),然后將其用于預(yù)測。
我想現(xiàn)在應(yīng)該很清楚了,鑒于上述問題,你報(bào)告的 62% 的準(zhǔn)確率實(shí)際上沒有任何意義;無論好壞,如果你試圖做從建模角度來看沒有意義的事情(就像我上面提到的大多數(shù)事情),Keras 不會“保護(hù)”你,比如在多類問題中使用二元交叉熵,或在回歸設(shè)置中使用準(zhǔn)確性......
添加回答
舉報(bào)