我正在尝试为学校项目训练经过交叉验证的SVM模型。在我打电话时给定X
和y
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预测变量,我如何获得可以用来进行预测的交叉验证的预测变量?
答案 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