我正在使用 sklearn
来训练一个分类模型,数据形状和训练流程如下:
clf = Pipeline([ ("imputer", Imputer(missing_values='NaN', strategy="mean", axis=0)), ('feature_selection', VarianceThreshold(threshold=(.97 * (1 - .97)))), ('scaler', StandardScaler()), ('classification', svm.SVC(kernel='linear', C=1))])print X.shape, y.shape(59381, 895) (59381,)
我已经检查过,feature_selection
会将特征向量的大小从 895
减少到 124
feature_selection = Pipeline([ ("imputer", Imputer(missing_values='NaN', strategy="mean", axis=0)), ('feature_selection', VarianceThreshold(threshold=(.97 * (1 - .97)))) ])feature_selection.fit_transform(X).shape(59381, 124) (59381,)
然后我尝试获取准确率如下
scores = cross_validation.cross_val_score(clf, X, y)print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
但是训练过程非常慢,我想知道在这种情况下如何加速这个过程?或者特征向量的大小 124
对 svm
模型来说仍然太大了吗?
回答:
尝试使用 sklearn.svm.LinearSVC
。
它应该能提供与 svm.SVC(kernel='linear')
非常相似的结果,但训练过程会更快(至少在 d<m
时,当 d-特征维度,m-训练样本大小)。
如果你想使用其他内核,比如 rbf
,你就不能使用 LinearSVC
。
然而,你可以增加内核缓存大小:内核缓存的大小对大型问题的运行时间有很大影响。如果你有足够的可用 RAM,建议将 cache_size
设置为高于默认值 200(MB) 的值,例如 500(MB) 或 1000(MB)。