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

相关问题