3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個贊
也許將您的問題分成兩個任務(wù)是一個可以接受的解決方案。一個用于回歸和分類是否提供數(shù)據(jù)。
X_train = np.array([(1,1),(2,2),(3,3),(4,4)])
Y1_train = np.array([(1,1),(2,2),(3,3),(4,4)])
Y2_train = np.array([(1,1),(1,1),(1,1),(1,0)])
X_test = np.array([(5,5),(6,6),(7,7)])
Y1_test = np.array([(5,5),(6,6),(7,7)])
Y2_test = np.array([(1,1),(1,0),(1,1)])
對于回歸,請執(zhí)行與對 X_train 和 Y1_train 對相同的操作。
分類部分的示例代碼
from sklearn.neural_network import MLPClassifier
clf = MLPClassifier()
clf.fit(X_train, Y2_train)

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個贊
訓(xùn)練數(shù)據(jù)的全部意義在于監(jiān)督模型,教它預(yù)測具有一組特征的輸出。因此,將 nan 值作為訓(xùn)練 X, y 的一部分是沒有意義的。模型不會在“填補(bǔ)空白”的同時繼續(xù)學(xué)習(xí)。噸
標(biāo)準(zhǔn)方法是使用缺失值技術(shù),例如 - 按均值/0 估算,使用 KNN 通過檢測包含缺失數(shù)據(jù)的樣本的最近鄰居來替換值,順序數(shù)據(jù)的估算技術(shù)(線性、akima、二次、樣條等)或可以處理丟失數(shù)據(jù)的編碼方法。
如果您不想使用缺失值處理策略,則不應(yīng)將該行保留為訓(xùn)練數(shù)據(jù)集的一部分。
是否有可能用 scikit-learn 或一般的機(jī)器學(xué)習(xí)來解決這樣的問題?
是的,正如我提到的,有一個完整的研究領(lǐng)域來解決這個問題(KNN 是處理這個問題的最流行和最容易獲得的機(jī)器學(xué)習(xí)方法)。本文可能有助于指導(dǎo)您更多。
編輯(基于 OP 編輯)
將 99999999 值替換為 Nan 是正確的方法,因?yàn)槲覀儾恢罏槭裁礃I(yè)務(wù)部門將它們設(shè)置為該值。很可能是丟失了數(shù)據(jù),他們將這些數(shù)據(jù)歸為垃圾值,以便能夠?qū)?shù)據(jù)存儲在數(shù)據(jù)庫中而不會出現(xiàn)太多問題。其次,將它們視為 Nan 值而不是異常值會更明智。因此,出于監(jiān)督培訓(xùn)的目的,我建議刪除具有這些值的行。
另一件事是我注意到這些值是 Y train 和 Y test 的一部分。如果 Nans 僅在 Y 數(shù)據(jù)中,這會使事情變得更容易,因?yàn)槟梢院唵蔚貙⑦@些行保留為數(shù)據(jù)的一部分以進(jìn)行預(yù)測。在非 nan 數(shù)據(jù)上訓(xùn)練模型,并使用該模型預(yù)測行的 Y 值以替換 Nan 值。
但是,如果您認(rèn)為這些是極值并且應(yīng)該被視為異常值,您仍然必須將它們從模型訓(xùn)練中刪除,因?yàn)樗鼈儠偪竦仄蚰P徒Y(jié)果。
最后,如果這是一個分類練習(xí)(不是回歸),那么您實(shí)際上可以將 999999 視為一個單獨(dú)的類,并像其他任何類一樣對其進(jìn)行預(yù)測。這不適用于回歸,因?yàn)樵诨貧w中 999999 是將要進(jìn)行預(yù)測的連續(xù)尺度的一部分。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個贊
即使您的模型可以在輸出時生成 NaN,也無法判斷這是錯誤還是實(shí)際估計。我不會在訓(xùn)練集中使用 NaN。
不僅因?yàn)?NaN 不能用任何數(shù)值數(shù)據(jù)類型表示,而且因?yàn)椴豢赡軐?NaN 執(zhí)行算術(shù)運(yùn)算:這意味著您無法計算它的梯度,無法計算與其相交的直線或斜率. 簡而言之,您的模型無法將其學(xué)習(xí)為數(shù)值,因?yàn)樗皇菙?shù)字。
添加回答
舉報