Caret RPart 决策树绘图结果

6
我正在使用 Kaggle提供的心脏病数据训练决策树模型。
由于我还在使用10倍交叉验证构建其他模型,我尝试使用rpart方法和caret包来构建树。然而,绘图结果很奇怪,因为"thalium"应该是一个因子。为什么它显示为"thaliumnormal <0.5"?这是否意味着如果"thalium" == normal,则选择左侧路径"yes",否则选择右侧路径"no"?
非常感谢!

caret rpart decision tree plot using fancyRpartPlot

编辑:很抱歉没有提供足够的背景信息,导致一些混淆。"thalium" 是一个变量,代表一种用于检测冠状动脉狭窄(也称为收缩)的技术。它是一个具有三个水平(正常、固定缺陷、可逆性缺陷)的因素。

data structure

此外,我希望将图表更易读,例如,将“thaliumnormal < 0.5”改为“thalium = normal”。我可以通过直接使用rpart来实现这个目标(见下文)。

rpart decision tree plot

然而,您可能已经注意到,尽管我使用了caret rpart CV 10 folds的推荐cp值(请参见下面的代码),但树是不同的。

code recommended cp, used for rpart tree using fancyRpartplot

我知道这两个软件包可能会有一些差异。理想情况下,我可以使用caret和rpart方法来构建树,以便它与在caret中构建的其他模型对齐。有人知道如何使使用caret rpart构建的树模型的绘图标签更易于理解吗?

2个回答

4

如果有一些数据,比如dput(head(data))展示您的数据的真实样子或者str(data)展示变量的水平和数据类型会有所帮助。但是很可能(没有看到数据)变量是thallium,其中一个水平是normal,此表格选择了变量thallium的LEVEL,并且正在评估是否在该水平normal或不在。

决策树将分类变量视为虚拟变量,按水平制定决策,并根据是否大于等于0.5或小于0.5进行判断,其中0始终小于1。

大多数决策树算法都是通过设计选择每个变量(包括虚拟的0/1变量)的分裂点,以创建最纯度的方法(将大多数观测值分到一个侧面或另一个侧面并更接近分类),并选择介于产生最大组间差异的两个值之间的中间点。

对于二元变量,分裂点在0.5处,因为它恰好位于该水平可以取的两个不同值0和1的中间。


谢谢!这正是我想的 :) 你知道如何使绘图结果更加友好吗?(请参见编辑后的帖子以获取更多详细信息) - Rui Tongyu
我并不真的使用这些类型。我已经在个人报告中采用了这些类型进行解释和调整,如果利益相关者需要,我会手动创建更加用户友好的树状结构部分,并为演示文稿提供更好的颜色方案和优化标签。 - sconfluentus

0

您的因子thaliumnormal只能是0或1,分别代表是或否 - 对吗?

在这种情况下,rpart取中值0.5,以便所有01的决策都在0.5以上或以下。

在此情况下,低于截止值(0.5)的值总是向左转。所以thaliumnormal==0向左转,是的。

您可以看到与sex相同的示例。


谢谢回复。Thalium是一个因素,“normal”是其中一个级别(总共3个级别)。我认为caret自动执行一种热编码转换,因此将原始变量名与每个级别粘合在一起。 - Rui Tongyu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接