机器学习中的决策树算法:从原理到实战
创作时间:
作者:
@小白创作中心
机器学习中的决策树算法:从原理到实战
引用
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%有了显著提高。
热门推荐
《三谋》S6赛季更新深度解析:3V3强制分组与精锐兵种系统详解
萝卜怎么保存比较好?延长保鲜期的技巧是什么?
神漏洞!任意修改车牌号码,让其他车主支付过路费和罚单
痛风患者如何科学运动?医生的专业建议来了
江苏省十大旅游景点
如何通过生辰八字分析命理中缺失的元素
阿卡波糖用量是什么
别墅安装光伏系统,详细步骤与注意事项
农村土地使用权流转方式有哪些
如何办理购房发票?这些办理流程对财务管理有何影响?
政协委员彭丁煌:建议建设戏曲人工智能创研中心开展跨学科教育
超纤皮:时尚与环保的完美结合,满足消费者多样需求
锈斑病的防治方法,可以使用粉锈宁、咪鲜胺、丙环唑等
《魔兽世界》11.0版本:四大简单职业推荐
比特币对国家经济的影响:机遇与挑战并存
泉州承天寺:闽南千年古刹的历史与文化
如何在日语学习中克服发音难关?
糖化血红蛋白多少可以确诊为糖尿病
荆门:以检察之力助力医疗领域职务犯罪法律风险防控
如何科学挑选种母猪?五大核心指标要知道!
射频采样ADC时钟优化:降低抖动提升信噪比
坐月子能吃什么主食比较好
探索非牛顿流体的制作与奇妙性质,畅享科学实验的乐趣与启发
2024考研趋势分析:报考人数激增,总录取人数平稳增长
白茶适合什么人群喝,白茶适合老人喝吗(六类群体适饮)
火车票如何报销?攻略来啦
腋下痒怎么办?五种缓解方法助你摆脱困扰
解析河北城市:省会石家庄为何落后钢铁之城唐山?未来又将如何?
成都越来越热了?历史档案揭秘答案
4级人力资源管理师资格证书的重要性