sklearn 多类 svm 函数
sklearn multiclass svm function
我有多个 class 标签,想计算我的模型的准确性。
我对我需要使用哪个 sklearn 函数感到困惑。
据我了解,以下代码仅用于二进制 classification.
# 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
正如我从 link 中了解到的那样:
for multiclass classification 我应该使用 OneVsRestClassifier
和 decision_function_shape(使用 ovr
或 ovo
并检查哪个有效更好)
svm_model_linear = OneVsRestClassifier(SVC(kernel = 'linear',C = 1, decision_function_shape = 'ovr')).fit(X_train, y_train)
主要问题是预测标签的时间对我来说很重要,但是 运行 classifier 和预测数据需要大约 1 分钟(而且这个时间被添加到PCA 等特征缩减也需要一些时间)?有什么减少 svm multiclassifer 时间的建议吗?
这里有很多事情需要考虑:
1) 你看,OneVsRestClassifier
将分离出所有标签并在给定数据上训练多个 svm 对象(每个标签一个)。所以每次,只会将二进制数据提供给单个 svm 对象。
2) SVC 内部使用 libsvm
和 liblinear
,它们具有针对多 class 或多标签输出的 'OvO' 策略。但是这一点会因为第1点而没有用。libsvm
只会得到二进制数据。
即使有,也没有考虑 'decision_function_shape'
。所以你提供decision_function_shape = 'ovr'
还是decision_function_shape = 'ovr'
都没有关系。
看来你是看错问题了。 decision_function_shape
应该不会影响速度。在拟合之前尝试标准化您的数据。 SVM 可以很好地处理标准化数据。
当使用 ovr
或 ovc
class fiers 包装模型时,您可以设置 n_jobs
参数以使它们 运行 更快,例如sklearn.multiclass.OneVsOneClassifier(estimator, n_jobs=-1)
或 sklearn.multiclass.OneVsRestClassifier(estimator, n_jobs=-1)
.
尽管 sklearn 中的每个 SVM classifier 一次只能使用一个 CPU 核心,但集成多 class classifier 可以同时拟合多个模型同时通过设置 n_jobs
.
我有多个 class 标签,想计算我的模型的准确性。
我对我需要使用哪个 sklearn 函数感到困惑。
据我了解,以下代码仅用于二进制 classification.
# 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
正如我从 link 中了解到的那样:
for multiclass classification 我应该使用 OneVsRestClassifier
和 decision_function_shape(使用 ovr
或 ovo
并检查哪个有效更好)
svm_model_linear = OneVsRestClassifier(SVC(kernel = 'linear',C = 1, decision_function_shape = 'ovr')).fit(X_train, y_train)
主要问题是预测标签的时间对我来说很重要,但是 运行 classifier 和预测数据需要大约 1 分钟(而且这个时间被添加到PCA 等特征缩减也需要一些时间)?有什么减少 svm multiclassifer 时间的建议吗?
这里有很多事情需要考虑:
1) 你看,OneVsRestClassifier
将分离出所有标签并在给定数据上训练多个 svm 对象(每个标签一个)。所以每次,只会将二进制数据提供给单个 svm 对象。
2) SVC 内部使用 libsvm
和 liblinear
,它们具有针对多 class 或多标签输出的 'OvO' 策略。但是这一点会因为第1点而没有用。libsvm
只会得到二进制数据。
即使有,也没有考虑 'decision_function_shape'
。所以你提供decision_function_shape = 'ovr'
还是decision_function_shape = 'ovr'
都没有关系。
看来你是看错问题了。 decision_function_shape
应该不会影响速度。在拟合之前尝试标准化您的数据。 SVM 可以很好地处理标准化数据。
当使用 ovr
或 ovc
class fiers 包装模型时,您可以设置 n_jobs
参数以使它们 运行 更快,例如sklearn.multiclass.OneVsOneClassifier(estimator, n_jobs=-1)
或 sklearn.multiclass.OneVsRestClassifier(estimator, n_jobs=-1)
.
尽管 sklearn 中的每个 SVM classifier 一次只能使用一个 CPU 核心,但集成多 class classifier 可以同时拟合多个模型同时通过设置 n_jobs
.