我有多类标签,想要计算我的模型的准确性。
我有点搞不懂我需要用什么滑雪板功能。据我所知,下面的代码只用于二进制分类。
# 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
正如我从链接中了解到的: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多分类器的时间吗?
发布于 2018-04-16 02:33:51
这里有很多事情要考虑:
1)您知道,OneVsRestClassifier
将分离所有标签,并在给定的数据上训练多个svm对象(每个标签一个)。因此,每次只向单个svm对象提供二进制数据。
2) SVC内部使用libsvm
和liblinear
,它们对多类或多标签输出具有“OvO”策略。但是这一点没有用,因为第1点。libsvm
只会得到二进制数据。
即使它做到了,它也没有考虑到'decision_function_shape'
。因此,提供decision_function_shape = 'ovr'
或decision_function_shape = 'ovr'
并不重要。
看来你看错问题了。decision_function_shape
不应影响速度。试着在拟合前标准化你的数据。SVMs可以很好地处理标准化数据。
发布于 2019-02-08 07:47:53
当使用ovr
或ovc
分类器包装模型时,可以设置n_jobs
参数以使它们运行得更快,例如sklearn.multiclass.OneVsOneClassifier(estimator, n_jobs=-1)
或sklearn.multiclass.OneVsRestClassifier(estimator, n_jobs=-1)
。
虽然sklearn中的单个支持向量机分类器一次只能使用一个CPU核,但集成多类分类器可以通过设置n_jobs
来同时拟合多个模型。
https://stackoverflow.com/questions/49848453
复制相似问题