当前位置: 首页 > 面试题库 >

帮助了解交叉验证和决策树

公良文彬
2023-03-14
问题内容

我一直在阅读“决策树”和“交叉验证”,并且我理解这两个概念。但是,我在理解交叉验证方面遇到了麻烦,因为它与决策树有关。本质上,交叉验证使您可以在数据集相对较小时在训练和测试之间进行切换,以最大程度地提高错误估计率。一个非常简单的算法是这样的:

  1. 确定所需的折数(k)
  2. 将您的数据集细分为k折
  3. 使用k-1折作为训练集以构建树。
  4. 使用测试集来估计有关树中错误的统计信息。
  5. 保存结果供以后使用
  6. 重复步骤3-6,进行k次,为测试集留出不同的折痕。
  7. 对迭代中的误差取平均值以预测整体误差

我不知道的问题是最后您将拥有k个决策树,这些决策树可能都稍有不同,因为它们可能无法以相同的方式拆分,等等。您选择哪棵树?我曾经想到过的一个想法是选择误差最小的想法(尽管这并不能使它达到最佳效果-
也许使用分层效果可能会更好-也许使用分层会有所帮助,但我读过的所有内容都说它只会有所帮助)。

据我了解,交叉验证的重点是计算节点统计信息,以后可以将其用于修剪。因此,实际上,树中的每个节点都会根据为其提供的测试集为其计算统计信息。重要的是节点统计中的这些,但是如果您平均出错的话。当每棵树的分割选择可能不同时,如何将这些统计信息合并到k棵树的每个节点中。

在每次迭代中计算总体误差的重点是什么?在修剪过程中不能使用这种方法。

任何帮助与这个小皱纹将不胜感激。


问题答案:

我不知道的问题是最后您将拥有k个决策树,这些决策树可能都稍有不同,因为它们可能无法以相同的方式拆分,等等。您选择哪棵树?

交叉验证的目的 不是帮助选择分类器的特定 实例 (或决策树,或任何自动学习应用程序),而是使 模型
合格,即提供诸如平均错误率,相对于此的偏差之类的度量。平均值等,对确定应用程序可以期望的精度水平很有用。交叉验证可以帮助断言的一件事是训练数据是否足够大。

关于选择特定树
,您应该改为对100%可用的训练数据进行另一次训练,因为这通常会产生更好的树。(交叉验证方法的缺点是,我们需要将[通常很少]的训练数据划分为“折叠”,正如您在问题中暗示的那样,这可能导致特定数据实例的树过拟合或欠拟合)

在决策树的情况下,我不确定您对节点中收集的统计信息的引用与用于修剪决策树的引用有关。也许是交叉验证相关技术的一种特殊用法?



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

  • 问题内容: 我正在尝试进行交叉验证,并且遇到一个错误:“找到的输入变量样本数量不一致:[18,1]” 我在熊猫数据框(df)中使用不同的列作为要素,最后一列作为标签。这源自UC Irvine的机器学习存储库。导入我过去使用过的交叉验证程序包时,我收到了一个错误消息,说明它可能已贬值。我将运行决策树,SVM和K-NN。 我的代码是这样的: 任何帮助将是巨大的! 问题答案: 不推荐使用该模块。新模块已

  • 在前面的章节和笔记本中,我们将数据集分为两部分:训练集和测试集。 我们使用训练集来拟合我们的模型,并且我们使用测试集来评估其泛化能力 - 它对新的,没见过的数据的表现情况。 然而,(标记的)数据通常是宝贵的,这种方法让我们只将约 3/4 的数据用于行训练。 另一方面,我们只会尝试将我们的 1/4 数据应用于测试。 使用更多数据来构建模型,并且获得更加鲁棒的泛化能力估计,常用方法是交叉验证。 在交叉

  • 我正在尝试用Python实现k-fold交叉验证算法。我知道SKLearn提供了一个实现,但是...这是我现在的代码。 learner参数是来自SKlearn库的分类器,k是折叠数,examples是CountVectorizer(再次是SKlearn)产生的稀疏矩阵,它是单词包的表示。例如: 我假设在某个地方有一些逻辑错误,因为训练集上的分数是95%(正如预期的那样),而测试测试上的分数实际上是

  • 了解采集: 关于采集 采集流程 界面和功能介绍   采集管理菜单介绍   采集节点管理介绍   临时内容管理介绍   导入采集规则介绍   监控采集模式介绍   导出所有内容介绍   采集未下载内容介绍 常用过滤规则   HTML过滤   常用正则表达式

  • 发布这个问题的人似乎和我一样使用了同样的Bazel交叉构建教程,但他们对根本原因得出了非常不同的结论(即,他们声称这是由于输入错误的include路径导致的用户错误)。在我的例子中,所有路径都是正确的,但它们被nsync的构建忽略/重写。我真的需要一些帮助来弄清楚需要什么更改才能用Linaro工具链正确构建nsync。 下面是一个小脚本,它在我的系统上100%地重现了这个问题: 下面是我运行它时得

  • 问题内容: 我目前正在研究一个问题,该问题将在同一数据集上比较三种不同的机器学习算法的性能。我将数据集分为70/30训练/测试集,然后使用GridSearchCV和进行网格搜索以找到每种算法的最佳参数。 第一个问题,我是应该对训练集执行网格搜索,还是应该对整个数据集进行网格搜索? 第二个问题,我知道GridSearchCV在其实现中使用K折,如果我对GridSearchCV中比较的所有三种算法都使