全文链接:https://tecdat.cn/?p=33128
分析师:Yudong Wan
决策树模型是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题(点击文末“阅读原文”获取完整代码数据)。
决策树模型简介
与传统的线性回归模型不同,决策树回归模型能够捕捉到非线性关系,并生成易于解释的规则。
决策树模型的实现过程
决策树模型的实现过程主要包括三个步骤:特征选择、树的构建和剪枝。
首先,特征选择是为了确定在每个节点上进行分割的最佳特征。常用的特征选择指标有信息增益、基尼指数等。
其次,树的构建是通过递归地分割数据集来生成决策树。根据某个标准,我们选择一个特征作为划分依据,并将数据集划分为更小的子集。
点击标题查阅往期内容
PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像
01
02
03
04
最后,剪枝是为了避免过拟合,提高模型的泛化能力。我们可以通过剪掉一些叶节点来减少决策树的复杂度。
max_features:在划分节点时所考虑的特征值数量的最大值,默认取None,可以传入int型或float型数据。如果是float型数据,表示百分数。
max_leaf_nodes:最大叶子节点数,默认取None,可以传入int型数据。
min samples leaf:叶子节点的最少样本数,默认取1,如果小于该数值,该叶子节点会和兄弟节点一起被剪枝(即剔除该叶子节点和其兑弟节点,并停止分裂)。
min_weight_fraction_leaf:叶子节点最小的样本权重和,默认取0,即不考虑权重问题,如果小于该数值,该叶子节点会和兄弟节点一起被剪枝(即剔除该叶子节点和其兄弟节点,并停止分裂)。如果较多样本有缺失值或者样本的分布类别偏差很大,则需考虑样本权重问题。
max_features:在划分节点时所考虑的特征值数量的最大值,默认取None,可以传入int型或float型数据。如果是float型数据,表示百分数。max_leaf_nodes:最大叶子节点数,默认取None,可以传入int型数据。
决策树模型的应用场景
应用场景:决策树模型适用于非线性关系较为明显的问题,例如:
1.房屋价格预测:基于一些特征(如地理位置、面积等),预测房屋的价格。
2.销售量预测:根据产品的特征(如价格、广告费用等),预测销售量。
决策树模型的优缺点
优点
决策树模型具有以下优点: 首先,它易于理解和解释,生成的决策树可以直观地呈现规 则,让我们能够了解特征对结果的影响。
其次,决策树模型能够处理离散型和连续型的特征,适用于 多种数据类型。
最后,它对异常值和缺失值相对不敏感,能够在存在噪声的 数据集中表现较好。
缺点
然而,决策树模型也有一些缺点需要注意:
首先,在处理复杂问题时,决策树可能过度拟合训练数据,导致泛化能力较差,需要采取剪枝等措施来解决这个问题。
其次,对于特征空间划分较多的数据,决策树可能会产生过于复杂的模型,难以解释和理解。
最后,决策树的训练过程容易受到数据的微小变化影响,可能会产生不稳定的结果。
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
数据集信息:
这个数据集(查看文末了解数据免费获取方式)可以追溯到1988年,由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标 "字段是指病人是否有心脏病。它的数值为整数,0=无病,1=有病。
目标:
主要目的是预测给定的人是否有心脏病,借助于几个因素,如年龄、胆固醇水平、胸痛类型等。
我们在这个问题上使用的算法是:
- 二元逻辑回归
- Naive Bayes算法
- 决策树
- 随机森林
数据集的描述:
该数据有303个观察值和14个变量。每个观察值都包含关于个人的以下信息。
- 年龄:- 个人的年龄,以年为单位
- sex:- 性别(1=男性;0=女性)
- cp - 胸痛类型(1=典型心绞痛;2=非典型心绞痛;3=非心绞痛;4=无症状)。
- trestbps--静息血压
- chol - 血清胆固醇,单位:mg/dl
- fbs - 空腹血糖水平>120 mg/dl(1=真;0=假)
- restecg - 静息心电图结果(0=正常;1=有ST-T;2=肥大)
- thalach - 达到的最大心率
- exang - 运动诱发的心绞痛(1=是;0=否)
- oldpeak - 相对于静止状态,运动诱发的ST压低
- slope - 运动时ST段峰值的斜率(1=上斜;2=平坦;3=下斜)
- ca - 主要血管的数量(0-4),由Flourosopy着色
- 地中海贫血症--地中海贫血症是一种遗传性血液疾病,会影响身体产生血红蛋白和红细胞的能力。1=正常;2=固定缺陷;3=可逆转缺陷
- 目标--预测属性--心脏疾病的诊断(血管造影疾病状态)(值0=<50%直径狭窄;值1=>50%直径狭窄)
在Rstudio中加载数据
heart<-read.csv("heart.csv",header = T)
header = T意味着给定的数据有自己的标题,或者换句话说,第一个观测值也被考虑用于预测。
head(heart)
当我们想查看和检查数据的前六个观察点时,我们使用head函数。
tail(heart)
显示的是我们数据中最后面的六个观察点
colSums(is.na(heart))
这个函数是用来检查我们的数据是否包含任何NA值。
如果没有发现NA,我们就可以继续前进,否则我们就必须在之前删除NA。
检查我们的数据结构
str(heart)
查看我们的数据摘要
summary(heart)
通过观察以上的总结,我们可以说以下几点
- 性别不是连续变量,因为根据我们的描述,它可以是男性或女性。因此,我们必须将性别这个变量名称从整数转换为因子。
- cp不能成为连续变量,因为它是胸痛的类型。由于它是胸痛的类型,我们必须将变量cp转换为因子。
- fbs不能是连续变量或整数,因为它显示血糖水平是否低于120mg/dl。
- restecg是因子,因为它是心电图结果的类型。它不能是整数。所以,我们要把它转换为因子和标签。
- 根据数据集的描述,exang应该是因子。心绞痛发生或不发生。因此,将该变量转换为因子。
- 斜率不能是整数,因为它是在心电图中观察到的斜率类型。因此,我们将变量转换为因子。
- 根据数据集的描述,ca不是整数。因此,我们要将该变量转换为因子。
- thal不是整数,因为它是地中海贫血的类型。因此,我们将变量转换为因子。
- 目标是预测变量,告诉我们这个人是否有心脏病。因此,我们将该变量转换为因子,并为其贴上标签。
根据上述考虑,我们对变量做了一些变化
#例如 sex<-as.factor(sex) levels(sex)<-c("Female","Male")
检查上述变化是否执行成功
str(heart)
summary(heart)
【视频】决策树模型原理和R语言预测心脏病实例|数据分享(下):https://developer.aliyun.com/article/1498070