在 sklearn 中运行 10 倍交叉验证后如何运行 SVC 分类器?

Posted

技术标签:

【中文标题】在 sklearn 中运行 10 倍交叉验证后如何运行 SVC 分类器?【英文标题】:How to run SVC classifier after running 10-fold cross validation in sklearn? 【发布时间】:2018-05-19 17:00:47 【问题描述】:

我对机器学习比较陌生,希望得到以下帮助:

我通过 10 倍交叉验证对我的数据运行了支持向量机分类器 (SVC),并计算了准确度得分(约为 89%)。我正在使用 Python 和 scikit-learn 来执行任务。这是一个代码sn-p:

def get_scores(features,target,classifier):
  X_train, X_test, y_train, y_test =train_test_split(features, target , 
    test_size=0.3)
    scores = cross_val_score(
    classifier,
    X_train,
    y_train,
    cv=10,
    scoring='accuracy',
    n_jobs=-1)
 return(scores)

get_scores(features_from_df,target_from_df,svm.SVC())

现在,我如何使用我的分类器(在运行 10 倍 cv 之后)在 X_test 上对其进行测试并将预测结果与 y_test 进行比较?您可能已经注意到,我在交叉验证过程中只使用了 X_train 和 y_train。

我注意到 sklearn 有 cross_val_predict: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_predict.html 我应该用 cross_val_predict 替换我的 cross_val_score 吗?仅供参考:我的目标数据列已二值化(值为 0 和 1)。

如果我的方法有误,请告诉我最好的处理方法。

谢谢!

【问题讨论】:

【参考方案1】:

你快到了:

# Build your classifier
classifier = svm.SVC()

# Train it on the entire training data set
classifier.fit(X_train, y_train)

# Get predictions on the test set
y_pred = classifier.predict(X_test)

此时,您可以使用sklearn.metrics 模块中的任何指标来确定您的表现。例如:

from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, y_pred))

【讨论】:

感谢您的回答。然而,这并没有考虑交叉验证。任何替代建议都会很棒。 @M_13 没有模型会考虑交叉验证。 CV 只是检查模型对数据的性能。请阅读cross-validation 我想知道这个答案是如何被接受为“答案”的。它没有解决交叉验证的要点【参考方案2】:

您只需要拆分 X 和 y。不要拆分火车和测试。

然后,您可以将案例 svm 中的分类器传递给 cross_val_score 函数,以获得每个实验的准确性。

只需 3 行代码:

clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, X, y, cv=10)
print scores

【讨论】:

别忘了:from sklearn.model_selection import cross_val_score

以上是关于在 sklearn 中运行 10 倍交叉验证后如何运行 SVC 分类器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Weka API 在 J48 / C4.5 上进行 10 倍交叉验证后保存最佳树

使用 Sklearn 进行交叉验证

如何在 Scikit-Learn 中绘制超过 10 倍交叉验证的 PR 曲线

Tidymodels:在 R 中进行 10 倍交叉验证后,从 TIbble 中取消最佳拟合模型的 RMSE 和 RSQ 值

如何在 sklearn 中编写自定义估算器并对其使用交叉验证?

在 sklearn 中使用网格搜索和管道获得正确的交叉验证分数