当前位置: 首页 > 知识库问答 >
问题:

模型拟合与交叉验证

沈巴英
2023-03-14

我正在训练一个数据集,然后在其他数据集上测试它。

svm = SVC(kernel='rbf', probability=True, random_state=42)

accuracies = cross_val_score(svm, data_train, lbs_train, cv=5)

pred_test = svm.predict(data_test)
accuracy = accuracy_score(lbs_test, pred_test)

共有1个答案

冀弘济
2023-03-14

这是正确的,cross_validate_score不会返回拟合的模型。在您的示例中,您有cv=5,这意味着模型拟合了5次。那么,你想要哪一个?最后一个?

函数cross_val_scoresklearn.model_selection.cross_validate的更简单版本。它不仅返回分数,还返回更多的信息。

所以您可以这样做:

from sklearn.model_selection import cross_validate

svm = SVC(kernel='rbf', probability=True, random_state=42)

cv_results = cross_validate(svm, data_train, lbs_train, cv=5, return_estimator=True)
# cv_results is a dict with the following keys:
# 'test_score' which is what cross_val_score returns
# 'train_score'
# 'fit_time'
# 'score_time'
# 'estimator' which is a tuple of size cv and only if return_estimator=True

accuracies = cv_results['test_score'] # what you had before

svms = cv_results['estimator']
print(len(svms)) # 5

svm = svms[-1] # the last fitted svm, or pick any that you want

pred_test = svm.predict(data_test)
accuracy = accuracy_score(lbs_test, pred_test)

注意,这里需要选择一个5匹配的SVM。理想情况下,您将使用交叉验证来测试模型的性能。所以,你不需要在最后再做一次。然后,您将再次拟合您的模型,但这一次使用的是您将在生产中实际使用的模型的所有数据。

另一个注意事项是,您提到您希望通过这个来微调您的模型的参数。也许你应该看看超参数优化。例如:https://datascience.stackExchange.com/a/36087/54395在这里您将看到如何使用交叉验证和定义参数搜索空间。

 类似资料:
  • 我有一个相对大的数据: 超过37万个观测数据,分类因变量有250个水平,10个自变量包括数值变量和分类变量。 下面是我的代码: 有人告诉我包'CV tools'或'cert'可以预形成k-folds CV,但我仍然不能成功地执行这些包或函数。

  • 问题内容: 我想通过交叉验证从Logistic回归模型预测概率。我知道您可以获取交叉验证分数,但是可以从predict_proba返回值而不是分数吗? 问题答案: 现在,这已作为scikit- learn版本0.18的一部分实现。您可以将’method’字符串参数传递给cross_val_predict方法。文档在这里。 例: 还要注意,这是新的sklearn.model_selection包的一

  • 密钥错误:0 我通过将中的替换为或来进行实验。此外,我尝试了对原始输入数据()进行同样的处理,而不是预处理文本。我怀疑用于交叉验证的的格式一定有问题,而用于管道的函数工作得很好。我还注意到与一起工作。 有人发现错误了吗?

  • 本示例利用Akaike信息判据(AIC)、Bayes信息判据(BIC)和交叉验证,来筛选Lasso回归的正则化项参数alpha的最优值。 通过LassoLarsIC得到的结果,是基于AIC/BIC判据的。 这种基于信息判据(AIC/BIC)的模型选择非常快,但它依赖于对自由度的正确估计。该方式的假设模型必需是正确, 而且是对大样本(渐近结果)进行推导,即,数据实际上是由该模型生成的。当问题的背景条

  • 在ngram模型(字符ngram或单词袋)中,我们需要确保测试数据的词汇不被用于拟合或训练模型。 这就是sklearn TfidfVectorizer函数对两个函数(fit和transform)所做的操作。 还是一开始就适合模型一次(第一次)?

  • 交叉验证 那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。比如在我日常项目里面,对于普通适中问题,如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预