【问题标题】:How to use classifiers used by cross_validation_scores如何使用 cross_validation_scores 使用的分类器
【发布时间】:2020-01-08 22:30:16
【问题描述】:

我正在尝试训练一个经过交叉验证的 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]或者可能是具有predict 方法的CrossValidationPredictor,但事实并非如此。)

当然,我可以打电话给classifier = clf.fit(X, y),但这并没有给我一个交叉验证的 SVM 预测器,我如何获得一个可以用来 - 你知道 - 预测的交叉验证的预测器?

【问题讨论】:

  • 你想要GridSearchCV,带参数refit=True

标签: scikit-learn svm cross-validation


【解决方案1】:

当然,我可以打电话给classifier = clf.fit(X, y),但这并没有给我一个交叉验证的 SVM 预测器,我如何获得一个可以用来 - 你知道 - 预测的交叉验证的预测器?

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

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

交叉验证 [...] 是用于评估统计分析结果如何推广到独立数据集的各种类似模型验证技术中的任何一种。

(此处的统计分析包括预测模型,例如回归器或分类器。)

交叉验证回答的问题是“当我将分类器应用于我还没有的数据时,它的性能如何?”。通常,您会尝试交叉验证不同的分类器或超参数,然后选择得分最高的那个,即最能泛化到未见数据的那个。

最后你在完整的数据集上训练分类器,因为你想部署最好的分类器。

【讨论】:

    【解决方案2】:

    也许你可以看看网格搜索:

    网格搜索

    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

    【讨论】:

    • 虽然这个问题并没有表明他们想要进行参数搜索,但这很可能是他们真正需要的 :) (但请注意,在幕后 GridSearchCV 实际上对整体进行了改装数据集,类似于clf.fit(X, y)。)
    猜你喜欢
    • 2013-04-01
    • 2012-04-02
    • 1970-01-01
    • 2011-08-14
    • 2018-05-13
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多