R语言辅导笔记——决策树

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

小编接触R语言以来做过很多辅导,觉得可以把积累的经验免费分享给大家,因此把辅导笔记做成文章,感谢大家支持。(ps因为内容都是原创的,所以禁止各种商用哈,转载要注明来源哈)

1.  理论梳理问答

问:决策树可以解决哪类问题

答:可以完成分类任务或者回归(预测)任务

问:如何使用决策树模型来完成分类任务

答:只要确定好根节点和内部节点(离散值),便能完成分类任务,如下:

问:如何确定根节点和内部节点

答:

可以选择「贪心算法」,Tree的每个层级上的Node寻找split点时,都使用best split。这种算法不能保证获得全局最优决策树,但可以在获得一个可以接受的解的同时,大大降低计算复杂度。

这里的best split如何确定呢?

信息增益 (熵减) / Information Gain (Entropy Decrease)

期望信息越小,信息增益越大,从而纯度越高

ID3算法,以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂

信息增益比 / Information Gain Ratio

信息增益不能完全反应一个分裂的有效性, 通过改造使用信息增益比公式,可以有效避免决策树分裂策略使用类uuid、编号类的取值量特别大的特征,陷入「最大化信息增益」的误区中

C4.5算法使用的是信息增益比

基尼不纯度 / Gini impurity

Gini越小,则数据集D的纯度越高。相较前两者,Gini 指数的计算不需要对数运算,更加高效;Gini 指数更偏向于连续属性,熵更偏向于离散属性。

CART算法使用的就是Gini

问:树可以是多叉的吗?

答:CART就是二叉,ID3,C4.5可以是多叉,但是二叉树的特性使它自带抑制「过拟合」的功能。

问:决策树如何完成回归问题(需要多理解)

问:由于生成的决策树会容易产生过拟合的现象,要如何解决

答:

可以选择预剪枝和后剪枝两种方法,这里用一个例子来进行

如果建立一颗完整的决策树为:

预剪枝:从根节点处考虑,有些枝叶不进行分支操作,对比验证集在进行划分后是否会提升精度,不提升则不进行分支,这种基于“贪心”的本质给预剪枝决策树带来了欠拟合的风险。

后剪枝:先从训练集生成一颗完整决策树,在从末端开始判断是否需要分支

后剪枝决策树的欠拟合风险很小,泛化能力往往优于预剪枝决策树。然而后剪枝过程是在生成完全决策树之后进行的,并且自底向上地对树中的所有非叶结点进行逐一考察,所以它的训练时间开销比未剪枝决策树和预剪枝决策树都要大很多。

2、完整代码可私信小编

#主体模型
bodyfat_rpart <- rpart(myFormulaa, data = bodyfat_train,  control = rpart.control(minsplit = 10))
#剪枝操作
opt <- which.min(bodyfat_rpart$cptable[,"xerror"])
cp <- bodyfat_rpart$cptable[opt, "CP"]
bodyfat_prune <- prune(bodyfat_rpart, cp = cp)
复制代码

写在最后:

文章首发于微信公众号:算法学习日程本

向大家推荐这个公众号,如果想了解更多内容,可以私信我或者关注公众号的其他文章哈,R语言操作的疑问都可以得到解答哒。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享