0

培訓數據(包括培訓和驗證集)包含大約80萬個樣本,每個樣本都有200個密集浮點。有6標記類,他們不平衡。在這種情況下應該使用哪種分類器或ML SDK?

在共同使用的ML庫(例如,libsvmscikit-learnSpark MLlibrandom forestXGBoost要不然),其應該使用?關於硬件配置,該機器具有24 CPU核心和250 Gb內存。

+0

我會用Spark MLlib –

+0

@DrVComas,謝謝!我沒有安裝Spark。如果方便,你可以請看這篇文章[http://stackoverflow.com/questions/37304536/how-to-scale-a-large-scale-data-in-scikit-learn]? – mining

+0

這就是爲什麼我會使用spark,如果數據集很大,您可以使用整個數據集來訓練模型,而不會出現任何問題。 –

回答

1

我會推薦使用scikit-learn的SGDClassifier,因爲它是在線的,因此您可以將您的訓練數據以塊(小批量)加載到內存中並逐漸訓練分類器,因此您不需要將所有數據加載到內存中。

它高度並行且易於使用。 您可以將warm_start參數設置爲True,並將每個塊的X,y加載到內存中多次調用擬合,或者使用partial_fit方法的更好選項。

clf = SGDClassifier(loss='hinge', alpha=1e-4, penalty='l2', l1_ratio=0.9, learning_rate='optimal', n_iter=10, shuffle=False, n_jobs=10, fit_intercept=True) 
# len(classes) = n_classes 
all_classes = np.array(set_of_all_classes) 
while True: 
    #load a minibatch from disk into memory 
    X, y = load_next_chunk() 
    clf.partial_fit(X, y, all_classes) 
X_test, y_test = load_test_data()  
y_pred = clf.predict(X_test) 
+0

好的,謝謝!我會試試這個! – mining

+1

請記住,partial_fit只是對數據執行一個曆元(循環),以便更好地對其進行優化,您可能需要重複整個過程,如5次收斂。儘管你的數據足夠大,甚至可以在1個紀元給你一個好的模型。你也應該照顧記錄的順序。在將其整合到分類器之前,最好將整個80M記錄進行整理,因爲如果數據中存在隱藏的順序,則可能會損害模型的泛化以及其預測性能。 – Ash

相關問題