我多类标签,并希望我的计算模型的准确性。 我是那种上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(与ovr
或ovo
和检查哪一个效果更好)
svm_model_linear = OneVsRestClassifier(SVC(kernel = 'linear',C = 1, decision_function_shape = 'ovr')).fit(X_train, y_train)
主要的问题是,预测标签的时间也与我无关,但它需要大约1分钟跑分类和预测数据(也是这个时间被添加到该功能降低,如PCA这也需要一段时间)?任何建议,以减少对SVM multiclassifer的时间?
有多种事情要考虑这里:
1)你看,OneVsRestClassifier
会分离出所有的标签和培养多SVM对象(每个标签)在给定的数据。所以每次只有二进制数据将被提供给单个SVM对象。
2)SVC内部使用libsvm
和liblinear
,其具有多级或多标签输出“卵内”的策略。但是,这一点不会使用,因为点1 libsvm
只会得到的二进制数据。
即使它没有,它没有考虑到'decision_function_shape'
。所以,如果你提供decision_function_shape = 'ovr'
或decision_function_shape = 'ovr'
不要紧。
如此看来,你是在寻找这个问题是错误的。 decision_function_shape
应该不会影响速度。尝试安装之前标准化您的数据。支持向量机与标准化的数据很好地工作。
当与ovr
或ovc
分类包装模式,你可以设置n_jobs
参数,使其运行速度更快,例如sklearn.multiclass.OneVsOneClassifier(estimator, n_jobs=-1)
或sklearn.multiclass.OneVsRestClassifier(estimator, n_jobs=-1)
。
虽然在sklearn每个单SVM分类只能同时使用一个CPU核心,集成多类分类可以通过设置n_jobs
同时适合多种车型。