sklearn多分类SVM功能

问题描述 投票:0回答:2

我多类标签,并希望我的计算模型的准确性。 我是那种上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的时间?

machine-learning scikit-learn classification svm pca
2个回答
1
投票

有多种事情要考虑这里:

1)你看,OneVsRestClassifier会分离出所有的标签和培养多SVM对象(每个标签)在给定的数据。所以每次只有二进制数据将被提供给单个SVM对象。

2)SVC内部使用libsvmliblinear,其具有多级或多标签输出“卵内”的策略。但是,这一点不会使用,因为点1 libsvm只会得到的二进制数据。

即使它没有,它没有考虑到'decision_function_shape'。所以,如果你提供decision_function_shape = 'ovr'decision_function_shape = 'ovr'不要紧。

如此看来,你是在寻找这个问题是错误的。 decision_function_shape应该不会影响速度。尝试安装之前标准化您的数据。支持向量机与标准化的数据很好地工作。


0
投票

当与ovrovc分类包装模式,你可以设置n_jobs参数,使其运行速度更快,例如sklearn.multiclass.OneVsOneClassifier(estimator, n_jobs=-1)sklearn.multiclass.OneVsRestClassifier(estimator, n_jobs=-1)

虽然在sklearn每个单SVM分类只能同时使用一个CPU核心,集成多类分类可以通过设置n_jobs同时适合多种车型。

© www.soinside.com 2019 - 2024. All rights reserved.