sklearn多类SVM函数

2024-02-08

我有多个类标签,想要计算模型的准确性。
我有点困惑我需要使用哪个 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

正如我从链接中了解到的:使用 OneVsRestClassifier 时 sklearn.svm.SVC 的 Decision_function_shape 是什么? https://stackoverflow.com/questions/43505451/which-decision-function-shape-for-sklearn-svm-svc-when-using-onevsrestclassifier

对于多类分类我应该使用OneVsRestClassifier与决策函数形状(与ovr or ovo并检查哪一个效果更好)

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

主要问题是预测标签的时间对我来说确实很重要,但运行分类器和预测数据大约需要 1 分钟(而且这个时间还添加到诸如 PCA 之类的特征减少中,这也需要一些时间)?有什么建议可以减少支持向量机多重分类器的时间吗?


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

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

2)SVC内部使用libsvm and liblinear,它具有用于多类或多标签输出的“OvO”策略。但由于第 1 点,这一点将毫无用处。libsvm只会得到二进制数据。

即使有,也没有考虑到'decision_function_shape'。所以如果你提供也没关系decision_function_shape = 'ovr' or decision_function_shape = 'ovr'.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn多类SVM函数 的相关文章

随机推荐