machine-learning - sklearn 的 cross_val_score 函数需要澄清
问题描述
我正在使用带有 LeaveOneOut 函数的 cross_val_score 函数,因为我的数据有 60 个样本。
我对 cross_val_score 如何计算 Leave One Out 交叉验证 (LOOCV) 中每个估计的结果感到困惑。
例如,在 LOOCV 中,它适合使用 59 个样本进行训练的模型,比如说决策树分类器 (DTC),并预测剩下的单个样本。
那么主要的问题是:它是否在 cross_val_score 中的每个实例(即 60 种不同的拟合)都适合一个新模型?
如果是这样,事情就会变得混乱。
然后我可以有一个平均准确度(满分 60)分数来进行性能评估。但我需要提出一个最好的 DTC 模型,而不仅仅是针对我自己的数据,尽管它基于我的数据。
如果我使用整个数据,它非常适合,但该模型只是过拟合。
我想要一个基于我的数据通常效果最好的单一 DTC 模型。
如果有意义的话,这是我的代码:
model = DecisionTreeClassifier(random_state=27, criterion='gini', max_depth=4, max_features='auto' )
loocv = LeaveOneOut()
results = cross_val_score(model, X, y, cv=loocv)
解决方案
我不完全明白你想知道什么。
它是否适合 cross_val_score 内的每个实例(即 60 种不同的拟合)的新模型?
是的,在你的情况下确实如此。有什么后续问题可以帮助澄清您在这种情况下的困惑?
CV 的想法是获得您选择的模型构建过程的性能估计。最终模型可以(并且应该从数据中受益最大)建立在完整的数据集上。然后你可以用它来预测测试数据,你可以用你的cross_val_score
结果来估计这个模型的性能。在我之前的答案中查看更详细的答案以及非常有用的链接。
我的回答适用于更大的数据集。可能存在与小数据集处理相关的麻烦,我不知道,但我不明白为什么逻辑不能推广到这种情况。
推荐阅读
- java - Recycler ItemClick 不适用于倒数计时器
- javascript - Angular - 循环检查对象内部是否存在值
- c++ - Windows 应用程序无法停止并挂起
- postgresql - 找不到包 postgresql“版本”
- java - Minecraft Forge 1.12.2 14.23.5.2854 不会加载我的 mcmod.info 文件
- arrays - 为什么输出不对?
- python - xlsxwriter 在使用 ' 符号插入 8 位值时出现问题
- r - R中的大写字母字符串
- php - MySQL 查询中的 CamelCase 问题
- c# - C#如何在程序集类型中使用read方法