机器学习中的决策树算法:从原理到实战
创作时间:
作者:
@小白创作中心
机器学习中的决策树算法:从原理到实战
引用
1
来源
1.
https://www.cnblogs.com/Codewar/p/18625008
决策树是一种直观且强大的机器学习算法,广泛应用于分类和回归任务。本文将详细介绍决策树的基本概念、构建过程、剪枝方法以及如何使用R语言进行实际操作。通过本文的学习,读者将能够全面理解决策树的工作原理,并掌握其在实际项目中的应用。
决策树的基本概念
决策树是一种树形结构的预测模型,用于分类和回归任务。它通过一系列的决策规则将数据集分割成更小的子集,最终形成一个树状结构。决策树的构建过程类似于人类做决策的过程,通过逐步排除可能的选项,最终得出结论。
一个典型的决策树包括以下几个组成部分:
- 根节点(Root Node):代表决策过程要问的第一个问题。
- 内部节点(Internal Nodes):代表依据特征决策的后续过程,每一个节点根据结果有不同的分支。
- 分支(Branches):代表决策的结果,通常会指向下一个节点。
- 叶节点(Leaf Nodes):代表最终决策结果,叶节点不会出现分支。
决策树具有以下优点:
- 直观易懂:决策树的结构就像一棵树,每个节点代表一个属性测试,每条边代表一个测试结果,叶子节点代表最终的分类结果。这种结构非常符合人类的思维方式,让我们很容易理解模型是如何做出决策的。
- 可解释性强:通过观察决策树,我们可以清晰地看到哪些特征对分类结果影响最大,从而帮助我们更好地理解数据。
决策树的构建过程
决策树的构建过程主要包括以下几个步骤:
- 选择根节点:选择对模型贡献最大的特征作为根节点。常用的评估标准包括熵值(Entropy)、信息增益(Information Gain)和基尼纯度(Gini Impurity)。
- 划分数据集:根据根节点的取值,将数据集分成若干个子集。
- 递归划分:对每个子集重复上述过程,直到满足停止条件。
以一个简单的例子来说明决策树的构建过程:
假设我们想根据天气情况决定是否去打篮球。我们收集了一些历史天气数据以及是否打篮球的记录,包括天气、温度、风力、是否下雨等特征。使用ID3算法构建决策树:
- 选择根节点:计算每个属性的信息增益,选择信息增益最大的属性作为根节点。假设“是否下雨”的信息增益最大,因此选择“是否下雨”作为根节点。
- 划分数据集:根据“是否下雨”将数据集分为两个子集:下雨和不下雨。
- 递归划分:对每个子集重复上述过程,直到满足停止条件。
决策树的剪枝
为了防止过拟合,通常需要对决策树进行剪枝。剪枝的方法主要分为预剪枝和后剪枝:
- 预剪枝:在树生成过程中提前停止分支生长。比如可以设置最大深度、设置节点包含的最小样本数、设置信息增益阈值。
- 后剪枝:先生成一棵完整的树,然后自底向上地剪掉一些分支。比如错误率降低剪枝(Reduced-Error Pruning, REP)和代价复杂度剪枝(Cost-Complexity Pruning, CCP)都属于后剪枝。
决策树实操
我们使用R语言和iris数据集进行决策树的实践。以Species作为因变量,其余变量作为自变量构建决策树:
library(partykit)
data(iris)
# 划分训练集和测试集
set.seed(123)
train_index <- sample(1:nrow(iris), size = 0.7 * nrow(iris))
iris_train <- iris[train_index, ]
iris_test <- iris[-train_index, ]
# 构建决策树模型
tree_model <- ctree(Species ~ ., data = iris_train)
plot(tree_model)
运行代码得到决策树如下:
训练好的模型在验证集中的表现如下:
针对连续特征的回归树
决策树也可以用于回归任务,即处理连续型目标变量。回归树的构建过程与分类树类似,但叶节点输出的是该节点包含的所有训练样本目标值的平均值或中位数。
例如,我们使用波士顿房价数据集构建回归树:
library(rpart)
data(Boston)
# 构建回归树模型
fit <- rpart(medv ~ ., data = Boston, method = "anova")
rpart.plot(fit, type = 4, extra = 101)
运行代码后输出结果如下:
模型的均方误差(MSE)为16.24467。通过剪枝优化模型:
# 剪枝后的模型
fit.pruned <- prune(fit, cp = 0.01)
rpart.plot(fit.pruned, type = 4, extra = 101)
# 计算剪枝后模型的MSE
predictions <- predict(fit.pruned, newdata = Boston)
mse <- mean((predictions - Boston$medv)^2)
print(mse)
剪枝后的模型MSE降低到10.3362,说明剪枝确实提高了拟合效果。
交叉验证剪枝实操
使用交叉验证选择最佳的代价复杂度因子(α)值:
# 构建决策树模型
fit <- rpart(Species ~ ., data = iris)
plotcp(fit)
rpart.plot(fit, type = 4, extra = 101)
# 使用1-SE规则选择cp值
bestcp <- fit$cptable[which.min(fit$cptable[,"xerror"] + fit$cptable[,"xstd"]), "CP"]
# 剪枝
fit.pruned <- prune(fit, cp = bestcp)
predicted.classes <- fit.pruned %>% predict(iris,type = "class")
tab_tree <- table(predicted.classes, iris$Species)
caret::confusionMatrix(tab_tree)
运行代码输出结果如下:
可以看到模型整体的正确性提升到了96%,比未剪枝时的93%有了显著提高。
热门推荐
中国各地米粉大观:从广西螺蛳粉到江西拌粉
如何制作淘宝无货源开店教程?淘宝店的货源从哪里找?不断学习才能取得成功!
盛开的《迟桂花》与杭州翁家山的美
柳叶刀子刊:纹身或增加恶性淋巴瘤风险
Unity组件详解:Rigidbody 2D 刚体
交警查车发现问题如何处理?一文详解交通违法处理流程
Docker技术全景:推动云原生架构的关键力量
怎样提高代谢最有效的方法
《上甘岭》这场“高端局”,打得好!
蒲公英粉的功效与作用
快速去痘印的方法:激光祛痘疗程短见效快
一篇看懂BMR与TDEE差别!基础代谢率多少正常?想要提高基础代谢记得做这5件事
硬盘修复工具哪个好:6款实用硬盘修复工具软件对比评测
怎么看硬盘健康度?三种实用的硬盘检测方法
Windows注册表卸载残留清理指南
房产证写上孩子名字房产归谁
香港公司经营范围的查询方法全解析
追求性价比?请关注这3所"双非",毕业不输985高校
华表的前世今生
华表双标白玉栏,红门下马驻银鞍:漫说长陵神道上的路仪华表之尊
债务重组协议的法律性质是什么?
冻一冻就能减肥?抗性淀粉的真相与风险
眼底黄斑病变的五种治疗方法
笔记本电源适配器检测:确保电力供应安全稳定的实用指南
大脑底部的基底神经节如何促进和抑制运动?
明亮的灯光才是家的感觉……
乙酰胆碱(ACH)是什么?作用机制与疾病关系全解析
长期湿气困扰?如何通过饮食、运动和草本调理改善健康?
吃什么可以祛湿
20万合资B级车推荐,亚洲龙VS凯美瑞谁更值得买?