如何使用cross_validation_scores使用的分类器

时间:2019-09-06 03:29:37

标签: scikit-learn svm cross-validation

我正在尝试为学校项目训练经过交叉验证的SVM模型。在我打电话时给定Xy

clf = svm.SVC(gamma='scale')
scores = cross_val_score(clf, X, y, cv=4)

scores设置为预期的数组,但是我希望能够调用clf.predict(test_x),但是当我这样做时,它会抛出一条消息This SVC instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.的异常(我希望它会返回类似[scores, predictor]的东西,或者返回具有CrossValidationPredictor方法的 predict ,但这不是事实。)

当然,我可以打电话给classifier = clf.fit(X, y),但这并不能为我提供一个经过交叉验证的SVM预测变量,我如何获得可以用来进行预测的交叉验证的预测变量?

2 个答案:

答案 0 :(得分:2)

  

当然,我可以打电话给classifier = clf.fit(X, y),但这并不能为我提供一个经过交叉验证的SVM预测变量,我如何获得可以用来进行预测的交叉验证的预测变量?

clf.fit(X, y)正是您应该做的。

没有交叉验证的 predictor 这样的东西,因为交叉验证不是训练预测变量的方法,而是用于 validate 一种预测变量的方法。让我引用Wikipedia entry

  

交叉验证[…]是各种类似的模型验证技术中的一种,用于评估统计分析的结果将如何概括为一个独立的数据集。

(此处的统计分析包括诸如回归变量或分类器之类的预测模型。)

交叉验证回答的问题是“ 将我的分类器应用于我还没有的数据时,以后的性能如何?”。通常,您会尝试交叉验证不同的分类器或超参数,然后选择得分最高的分类器或超参数,该分类器有望最广泛地推广到看不见的数据。

最后,由于要部署最佳分类器,因此需要在整个数据集上训练分类器。

答案 1 :(得分:1)

也许您可以看一下网格搜索:

  

网格搜索

     

scikit-learn提供了一个对象,该对象根据给定的数据计算得分   在参数网格上的估计量拟合期间,选择   参数以最大化交叉验证得分。该对象需要   构建过程中的估算器,并公开估算器API

示例:

>>> from sklearn.model_selection import GridSearchCV, cross_val_score
>>> Cs = np.logspace(-6, -1, 10)
>>> clf = GridSearchCV(estimator=svc, param_grid=dict(C=Cs),
...                    n_jobs=-1)
>>> clf.fit(X_digits[:1000], y_digits[:1000])        
GridSearchCV(cv=None,...
>>> clf.best_score_                                  
0.925...
>>> clf.best_estimator_.C                            
0.0077...

>>> # Prediction performance on test set is not as good as on train set
>>> clf.score(X_digits[1000:], y_digits[1000:]) 

这里是检查它的站点:https://scikit-learn.org/stable/tutorial/statistical_inference/model_selection.html