机器学习——决策树的剪枝

一、决策树剪枝

1.为什么要进行剪枝?

原因:上一篇博客是使用ID算法构建的决策树,而ID3算法构建的决策树可能存在以下问题:
① 不能对连续数据进行处理,只能通过连续数据离散化进行处理;
② 采用信息增益容易偏向取值较多的特征,准确率不如信息增益率;
③没有采用剪枝,决策树的结构可能过于复杂,容易出现过拟合。

2.什么是剪枝?

概念:剪枝主要是解决决策树出现的“过拟合”现象。剪枝就是通过某种判断,避免一些不必要的遍历过程。剪枝剪枝又分为预剪枝和后剪枝。

预剪枝:预剪枝,就是将即将发芽的分支“扼杀在萌芽状态”即在分支划分前就进行剪枝判断,如果判断结果是需要剪枝,则不进行该分支划分。

后剪枝(自底向上):在分支划分之后,通常是决策树的各个判断分支已经形成后,才开始进行剪枝判断。

二、代码实现

1.数据集准备:在上一篇文章的数据下改进新的数据集:

动物名称 食性 毛发 生活环境 哺乳动物
猫科 短毛 草原
爬行 森林
爬行 水里
两栖 多毛 草原
两栖 短毛 草原
猫科 多毛 森林
两栖 森林
两栖 水里
飞行 水里
爬行 水里
飞行 短毛 森林
爬行 森林
猫科 森林
爬行 水里
飞行 森林
两栖 水里
两栖 短毛 草原
猫科 多毛 草原
飞行 杂食 短毛 海边

2.没有剪枝前的决策树

#树的可视化

decisionNodeStyle = dict(boxstyle="sawtooth", fc="0.8")
leafNodeStyle = {"boxstyle": "round4", "fc": "0.8"}
arrowArgs = {"arrowstyle": "<-"}


# 画节点
def plotNode(nodeText, centerPt, parentPt, nodeStyle):
    createPlot.ax1.annotate(nodeText, xy=parentPt, xycoords="axes fraction", xytext=centerPt
                            , textcoords="axes fraction", va="center", ha="center", bbox=nodeStyle,
                            arrowprops=arrowArgs)


# 添加箭头上的标注文字
def plotMidText(centerPt, parentPt, lineText):
    xMid = (centerPt[0] + parentPt[0]) / 2.0
    yMid = (centerPt[1
决策树算法是一种广泛应用于分类和回归的机器学习算法,它基于树形结构对样本进行分类或预测。决策树算法的主要思想是通过一系列的判断来对样本进行分类或预测。在决策树中,每个节点表示一个属性或特征,每个分支代表该属性或特征的一个取值,而每个叶子节点代表一个分类或预测结果。 决策树算法的训练过程主要包括以下步骤: 1. 特征选择:根据某种指标(如信息增益或基尼系数)选择最优的特征作为当前节点的分裂属性。 2. 决策树生成:根据选择的特征将数据集分成若干个子集,并递归地生成决策树。 3. 剪枝:通过剪枝操作来提高决策树的泛化性能。 决策树算法的优点包括易于理解和解释、计算复杂度较低、对缺失值不敏感等。但是,决策树算法也存在一些缺点,如容易出现过拟合、对离散数据敏感等。 下面是一个决策树算法的案例:假设我们要根据一个人的年龄、性别、教育程度和职业预测其收入水平(高于或低于50K)。首先,我们需要将这些特征进行编码,将其转换为数值型数据。然后,我们可以使用决策树算法对这些数据进行训练,并生成一个决策树模型。最后,我们可以使用该模型对新的数据进行分类或预测。例如,根据一个人的年龄、性别、教育程度和职业,我们可以使用决策树模型预测该人的收入水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值