sklearn 多类 svm 函数

sklearn multiclass svm function

我有多个 class 标签,想计算我的模型的准确性。
我对我需要使用哪个 sklearn 函数感到困惑。 据我了解,以下代码仅用于二进制 classification.

# 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

正如我从 link 中了解到的那样:

for multiclass classification 我应该使用 OneVsRestClassifier 和 decision_function_shape(使用 ovrovo 并检查哪个有效更好)

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

主要问题是预测标签的时间对我来说很重要,但是 运行 classifier 和预测数据需要大约 1 分钟(而且这个时间被添加到PCA 等特征缩减也需要一些时间)?有什么减少 svm multiclassifer 时间的建议吗?

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

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

2) SVC 内部使用 libsvmliblinear,它们具有针对多 class 或多标签输出的 'OvO' 策略。但是这一点会因为第1点而没有用。libsvm只会得到二进制数据。

即使有,也没有考虑 'decision_function_shape'。所以你提供decision_function_shape = 'ovr'还是decision_function_shape = 'ovr'都没有关系。

看来你是看错问题了。 decision_function_shape应该不会影响速度。在拟合之前尝试标准化您的数据。 SVM 可以很好地处理标准化数据。

当使用 ovrovc class fiers 包装模型时,您可以设置 n_jobs 参数以使它们 运行 更快,例如sklearn.multiclass.OneVsOneClassifier(estimator, n_jobs=-1)sklearn.multiclass.OneVsRestClassifier(estimator, n_jobs=-1).

尽管 sklearn 中的每个 SVM classifier 一次只能使用一个 CPU 核心,但集成多 class classifier 可以同时拟合多个模型同时通过设置 n_jobs.