培訓數據(包括培訓和驗證集)包含大約80
萬個樣本,每個樣本都有200
個密集浮點。有6
標記類,他們不平衡。在這種情況下應該使用哪種分類器或ML SDK?
在共同使用的ML庫(例如,libsvm
,scikit-learn
,Spark MLlib
,random forest
,XGBoost
要不然),其應該使用?關於硬件配置,該機器具有24
CPU核心和250
Gb內存。
培訓數據(包括培訓和驗證集)包含大約80
萬個樣本,每個樣本都有200
個密集浮點。有6
標記類,他們不平衡。在這種情況下應該使用哪種分類器或ML SDK?
在共同使用的ML庫(例如,libsvm
,scikit-learn
,Spark MLlib
,random forest
,XGBoost
要不然),其應該使用?關於硬件配置,該機器具有24
CPU核心和250
Gb內存。
我會推薦使用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)
我會用Spark MLlib –
@DrVComas,謝謝!我沒有安裝Spark。如果方便,你可以請看這篇文章[http://stackoverflow.com/questions/37304536/how-to-scale-a-large-scale-data-in-scikit-learn]? – mining
這就是爲什麼我會使用spark,如果數據集很大,您可以使用整個數據集來訓練模型,而不會出現任何問題。 –