sklearn 多类 svm 函数

Posted

技术标签:

【中文标题】sklearn 多类 svm 函数【英文标题】:sklearn multiclass svm function 【发布时间】:2018-09-25 16:05:18 【问题描述】:

我有多个类别标签,并且想要计算我的模型的准确性。 我有点困惑我需要使用哪个 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 多分类器的时间吗?

【问题讨论】:

【参考方案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 可以很好地处理标准化数据。

【讨论】:

感谢您的回复,据我所知,我只能使用 SVC(kernel = 'linear', C = 1).fit(X_train, y_train) 来解决我的多分类问题,因为 SVC 默认使用 ' ovo' 如果我不想使用 ovr ,我什至不需要使用 OneVsRestClassifier ,即只使用 decision_function_shape = 'ovr' 和 OneVsRestClassifier 是的,正确的。 SVC 将自动自行处理多类。【参考方案2】:

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

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

【讨论】:

以上是关于sklearn 多类 svm 函数的主要内容,如果未能解决你的问题,请参考以下文章

Sklearn SVM 系数属性 - 如何获取类名?

绘制scikit-learn(sklearn)SVM决策边界/表面

python中返回概率的多类线性SVM

SVM的sklearn.svm.SVC()函数应用

使用 OneVsRestClassifier 时 sklearn.svm.SVC 的哪个决策函数形状?

sklearn系列之 sklearn.svm.SVC详解