sklearn multiclass svm功能

时间:2018-04-16 01:22:56

标签: machine-learning scikit-learn classification svm pca

我有多类标签,想要计算模型的准确性 我对我需要使用哪个sklearn函数感到困惑。 据我所知,下面的代码仅用于二进制分类。

# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y,  test_size=0.25,random_state = 0)

# training a linear SVM classifier
from sklearn.svm import SVC
svm_model_linear = SVC(kernel = 'linear', C = 1).fit(X_train, y_train)
svm_predictions = svm_model_linear.predict(X_test)

# model accuracy for X_test  
accuracy = svm_model_linear.score(X_test, y_test)
print accuracy

正如我从链接中所理解的那样: Which decision_function_shape for sklearn.svm.SVC when using OneVsRestClassifier?

对于多类分类我应该使用OneVsRestClassifier和decision_function_shape(使用ovrovo并检查哪一个效果更好)

svm_model_linear = OneVsRestClassifier(SVC(kernel = 'linear',C = 1, decision_function_shape = 'ovr')).fit(X_train, y_train)

主要问题是预测标签的时间对我来说很重要,但是运行分类器并预测数据大约需要1分钟(此时也会添加到功能减少中,例如PCA也需要一段时间) ?有什么建议可以减少svm multiclassifer的时间吗?

2 个答案:

答案 0 :(得分:1)

这里有很多事情需要考虑:

1)您看,OneVsRestClassifier将分离出所有标签并训练给定数据上的多个svm对象(每个标签一个)。所以每次只将二进制数据提供给单个svm对象。

2)SVC内部使用libsvmliblinear,其中有一个' OvO'多类或多标签输出的策略。但是由于第1点,这一点没有用。libsvm只会得到二进制数据。

即使它确实如此,也没有考虑'decision_function_shape'。因此,如果您提供decision_function_shape = 'ovr'decision_function_shape = 'ovr',则无关紧要。

所以看来你的问题看错了。 decision_function_shape不应影响速度。在安装之前尝试标准化您的数据。 SVM与标准化数据配合良好。

答案 1 :(得分:0)

使用ovrovc分类器包装模型时,可以设置n_jobs参数以使其运行更快,例如sklearn.multiclass.OneVsOneClassifier(estimator, n_jobs=-1)sklearn.multiclass.OneVsRestClassifier(estimator, n_jobs=-1)

尽管sklearn中的每个单个SVM分类器一次只能使用一个CPU内核,但是通过设置n_jobs,集成的多分类器可以同时适合多个模型。