培训数据(包括培训和验证集)包含大约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,如果数据集很大,您可以使用整个数据集来训练模型,而不会出现任何问题。 –