决策树代码实现(决策树算法测试代码)

本教程介绍了用于分类的决策树,即分类树,包括分类树的结构,分类树如何进行预测,使用scikit-learn构造分类树,以及超参数的调整。 本教程详细介绍了决策树的工作原理 由于各种原因,决策树一种流行的监督学习方法。决策树的优点包括,它既可以用于回归,也可用于分类,易于解释并且不需要特征缩放。它也有一些缺点,比如容易过拟合。本教程介绍了用于分类的决策树,也被称为分类树。 除此之外,本教程还将涵盖:…

本教程介绍了用于分类的决策树,即分类树,包括分类树的结构,分类树如何进行预测,使用scikit-learn构造分类树,以及超参数的调整。

使用Python了解分类决策树(附代码)

本教程详细介绍了决策树的工作原理

由于各种原因,决策树一种流行的监督学习方法。决策树的优点包括,它既可以用于回归,也可用于分类,易于解释并且不需要特征缩放。它也有一些缺点,比如容易过拟合。本教程介绍了用于分类的决策树,也被称为分类树。

除此之外,本教程还将涵盖:

  • 分类树的结构(树的深度,根节点,决策节点,叶节点/终端节点)
  • 分类树如何进行预测
  • 如何通过Python中的scikit-learn构造决策树
  • 超参数调整

与往常一样,本教程中用到的代码可以在我的github(结构,预测)中找到,我们开始吧!

什么是分类树?

分类和回归树(CART)是由Leo Breiman引入的,用一种于解决分类或回归预测建模问题的决策树算法。本文只介绍分类树。

分类树

从本质上讲,分类树将分类转化为一系列问题。下图是在IRIS数据集(花卉种类)上训练的一个分类树。根节点(棕色)和决策节点(蓝色)中包含了用于分裂子节点的问题。根节点即为最顶端的决策节点。换句话说,它就是你遍历分类树的起点。叶子节点(绿色),也叫做终端节点,它们不再分裂成更多节点。在叶节点处,通过多数投票决定分类。

使用Python了解分类决策树(附代码)

将三个花卉品种(IRIS数据集)一一进行分类的分类树

如何使用分类树

使用分类树,要从根节点(棕色)开始,逐层遍历整棵树,直到到达叶节点(终端节点)。如下图所示的分类树,假设你有一朵花瓣长度为4.5cm的花,想对它进行分类。首先从根节点开始,先回答“花瓣长度(单位:cm)≤ 2.45吗?”因为宽度大于2.45,所以回答否。然后进入下一个决策节点,回答“花瓣长度(单位:cm)≤ 4.95吗?”。答案为是,所以你可以预测这朵花的品种为变色鸢尾(versicolor)。这就是一个简单的例子。

使用Python了解分类决策树(附代码)

分类树如何生长(非数学版)

分类树从数据中学到了一系列“如果…那么…”的问题,其中每个问题都涉及到一个特征和一个分割节点。从下图的局部树(A)可看出,问题“花瓣长度(单位:cm)≤ 2.45”将数据基于某个值(本例中为2.45)分成两个部分。这个数值叫做分割点。对分割点而言,一个好的值(使得信息增益最大)可将类与类之间分离开。观察下图中的B部分可知,位于分割点左侧的所有点都被归为山鸢尾类(setosa),右侧的所有点则被归为变色鸢尾类(versicolor)。

使用Python了解分类决策树(附代码)

从图中可看出,山鸢尾类(setosa)中所有的38个点都已被正确分类。它是一个纯节点。分类树在纯节点上不会分裂。它不再产生信息增益。但是不纯节点可以进一步分裂。观察图B的右侧可知,许多点被错误归类到了变色鸢尾类(versicolor)。换而言之,它包含了分属于两个不同类(setosa和versicolor)的点。分类树是个贪婪算法,这意味着它会默认一直分裂直到得到纯节点。而且,该算法会为不纯节点选择最佳分割点(我们会在下节介绍数学方法)。

使用Python了解分类决策树(附代码)

在上图中,树的最大深度为2。树的深度是对一棵树在进行预测之前可分裂次数的度量。树可进行多次分裂,直到树的纯度越来越高。多次重复此过程,会导致树的深度越来越大,节点越来越多。这会引起对训练数据的过拟合。幸运的是, 大多数分类树的实现都允许控制树的最大深度,从而减少过拟合。换而言之,可以通过设置决策树的最大深度从而阻止树的生长超过某个特定深度。可通过下图直观地了解最大深度。

使用Python了解分类决策树(附代码)

选择准则

使用Python了解分类决策树(附代码)

本节解答了信息增益、基尼指数和熵是如何计算出来的。

在本节,你可以了解到什么是分类树中根节点/决策节点的最佳分割点。决策树在某个特征和相对应的分割点上进行分裂,从而根据给定的准则(本例中为基尼指数或熵)产生最大的信息增益(IG)。可以将信息增益简单定义为:

IG = 分裂前的信息(父) – 分裂后的信息(子)

通过下图的决策树,我们可以更清晰的理解父与子。

使用Python了解分类决策树(附代码)

下图为更准确的信息增益公式。

使用Python了解分类决策树(附代码)

因为分类树是二元分裂,上述公式可以简化为以下公式。

使用Python了解分类决策树(附代码)

基尼指数和熵是两个用于衡量节点不纯度的常用准则。

使用Python了解分类决策树(附代码)

为了更好的理解这些公式,下图展示了如何使用基尼指数准则计算决策树的信息增益。

使用Python了解分类决策树(附代码)

下图展示了如何使用熵来计算决策树的信息增益。

使用Python了解分类决策树(附代码)

我不打算对细节进行过多的阐述,但是你应当知道,不同的不纯度度量(基尼指数和熵)通常会产生相似的结果。下图就展示了基尼指数和熵是极其相似的不纯度度量。我猜测,基尼指数之所以是scikit-learn的默认值,是因为熵的计算过程略慢一些(因为它使用了对数)。

使用Python了解分类决策树(附代码)

不同的不纯度度量(基尼指数和熵)通常会产生相似的结果。感谢Data Science StackExchange 和 Sebastian Raschka为本图提供的灵感。

在结束本节之前,我应注明,各种决策树算法彼此不同。比较流行的算法有ID3,C4.5和CART。Scikit-learn使用了CART算法的优化版本。你可以点击此处了解它的时间复杂度。

使用Python实现分类树

我们在上节介绍了分类树的理论。之所以需要学习如何使用某个编程语言来实现决策树,是因为处理数据可以帮助我们来理解算法。

加载数据

Iris数据集是scikit-learn自带的数据集之一,不需要从外部网站下载。通过下列代码载入数据。

import pandas as pd
from sklearn.datasets import load_iris
data = load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df[\'target\'] = data.target
使用Python了解分类决策树(附代码)

原始Pandas df(特征和目标)

将数据划分为训练集和测试集

下述代码将75%的数据划分到为训练集,25%的数据划分到测试集合。

X_train, X_test, Y_train, Y_test = train_test_split(df[data.feature_names], df[\'target\'], random_state=0)
使用Python了解分类决策树(附代码)

图中的颜色标注了数据框df中的数据划分到了哪类(X_train, X_test, Y_train, Y_test)变量

注意,决策树的优点之一是,你不需要标准化你的数据,这与PCA和逻辑回归不同,没有标准化的数据对它们的影响非常大。

Scikit-learn建模的四个步骤

第一步:导入你想使用的模型

在scikit-learn中,所有的机器学习模型都被封装为Python中的类。

from sklearn.tree import DecisionTreeClassifier

第二步:构造模型的实例

在下列代码中,我通过设定max_depth=2来预剪枝我的树,从而确保它的深度不会超过2。请注意,这个教程的下一节将介绍如何为你的树选择恰当的max_depth值。

还需注意,在下列代码中,我设定random_state=0,所以你也可以得到和我一样的结果。

clf = DecisionTreeClassifier(max_depth = 2,
 random_state = 0)

第三步:基于数据训练模型

该模型将学习X (sepal length, sepal width, petal length, and petal width) 和 Y(species of iris)之间的关系。

clf.fit(X_train, Y_train)

第四步:预测未知(测试)数据的标签

# Predict for 1 observation
clf.predict(X_test.iloc[0].values.reshape(1, -1))
# Predict for multiple observations
clf.predict(X_test[0:10])

请记住,预测只是叶节点中实例的多数类。

评估模型性能

尽管有许多评估模型性能的方式(精度,召回率,F1得分,ROC曲线等),我们还是保持简单的基调,使用准确率作为评估的标准。

准确率的定义为:(正确预测的比例):正确预测的数量/总数据量

# The score method returns the accuracy of the model
score = clf.score(X_test, Y_test)
print(score)

调整树的深度

寻找max_depth最优值的过程就是调整模型的过程。下列代码输出了不同max_depth值所对应的决策树的准确率。

# List of values to try for max_depth:
max_depth_range = list(range(1, 6))
# List to store the accuracy for each value of max_depth:
accuracy = []
for depth in max_depth_range:
 
 clf = DecisionTreeClassifier(max_depth = depth,
 random_state = 0)
clf.fit(X_train, Y_train) 
score = clf.score(X_test, Y_test)
 accuracy.append(score)

由下图可看出,当max_depth的值大于或等于3时,模型的准确率最高,所以选择max_depth=3,在准确率同样高的情况下,模型的复杂度最低。

使用Python了解分类决策树(附代码)

选择max_depth=3因为此时模型的精确率高且复杂度较低。

你需要谨记,max_depth和决策树的深度并不是一回事。Max_depth是对决策树进行预剪枝的一个方法。换而言之,如果一棵树在某个深度纯度已经足够高,将会停止分裂。下图分别展示了当max_depth的值为3,4,5时的决策树。由下图可知,max_depth为4和5时的决策树是一模一样的。它们的深度相同。

使用Python了解分类决策树(附代码)

请观察我们是如何得到两棵一模一样的树

如果想知道你训练的决策树的深度是多少,可以使用get_depth方法。除此之外,可以通过get_n_leaves方法得到叶子节点的数量。

尽管本教程已经介绍了一些选择准则(基尼指数,熵等)和树的max_depth,请记住你也可以调整要分裂的节点的最小样本(min_samples_leaf),最大叶子节点数量(max_leaf_nodes)等。

特征重要性

分类树的优点之一是,它们相对易于解释。基于scikit-learn的分类树可以计算出特征的重要性,即在给定特征上分裂而导致基尼指数或熵减小的总量。Scikit-learn对每个特征输出一个0和1之间的数值。所有特征的重要性之和为1。下列代码展示了在决策树模型中每个特征的重要性。

importances = pd.DataFrame({\'feature\':X_train.columns,\'importance\':np.round(clf.feature_importances_,3)})
importances = importances.sort_values(\'importance\',ascending=False)
使用Python了解分类决策树(附代码)

在上述例子中(iris的某个特定的训练集测试集划分),花瓣宽度的特征重要性权重最高。我们可以通过察看相应的决策树来确认。

使用Python了解分类决策树(附代码)

这个决策树仅基于两个特征进行分裂,分别是花瓣宽度(单位:cm)和花瓣长度(单位:cm)

请注意,如果一个特征的重要性分值较低,也并不意味着这个特征对预测而言不重要,只是说明在树的较早阶段,它未被选择到。该特征也可能与另一个信息量较高的特征完全相同或高度相关。特征重要性值不能说明它们对哪个类别具有很好的预测性,也不会说明可能影响预测的特征之间的关系。要注意的是,在进行交叉验证或类似的验证时,可以使用来自不同训练集测试集划分的特征重要性值的平均值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月9日 下午5:38
下一篇 2022年5月9日 下午5:40

相关推荐

  • 谷歌seo有哪些规则,谷歌排名优化入门教程

    我们都知道谷歌的流量是巨大的,做外贸的谁不想多分一些谷歌搜索引擎流量的蛋糕,但是如果你不懂搜索引擎的规则,这块蛋糕你很难分到更多。 如果说Google排名是一场奥运会角逐,那么每一条链接URL就是有潜力的运动员种子,他们报名的比赛项目“XXX关键词”——被Google爬虫抓取内容,进入海选,优质的选手就会被收录,然后编入索引,可参与Google的搜索排名。“搜索关键词”排名靠前的网站,相当于奥运会…

    2022年6月1日
    1220
  • 手机数据恢复免费(不收费的数据恢复软件)

    很多朋友因为对手机的功能比较好奇,不小心将手机的机身内存给格式化了,导致存储在手机内的数据全部被“清空”了,想要恢复但又不知道该如何操作,本期文章就系统的跟大家说一下如何恢复这些“被格式化”的数据。 手机数据恢复最怕的就是格式化,但格式化之后不代表无法恢复,只是恢复的难度较大、恢复的几率较低而已,大多数情况下的数据恢复,都是“尽人事而听天命”,接下来系统的说一下原理、方法。 手机格式化的基本概述 …

    2022年4月28日
    1220
  • 2020汉堡店加盟排行榜,想加盟汉堡店这三个品牌绝对是首选

    说起汉堡大家肯定联想到的都是麦当劳、肯德基这种风靡全球的业界大佬,他们在业界的名气自然就不用小编多说了,今天小编主要介绍的一些是汉堡界的后起之秀,在汉堡界极具发展潜力,接下来就跟着小编一起来一下几支汉堡界“潜力股”。 一、汤姆之家 汤姆之家汉堡起源于美国汉堡文化,公司创立于2001年,它快乐、营养、温馨的品牌理念在汉堡界闻名遐迩。中式快餐讲究的是营养均衡搭配,西式快餐注重标准化的制作工艺,汤姆之家…

    2022年10月5日
    480
  • 加盟私人影院能挣钱吗,私人影院加盟十大品牌

    家庭影院,顾名思义,就是将电影院搬到家中,使您在家中能够获得身临其境的现场感、惊心动魄的紧张感。家庭影院之所以能够使您体验身临其境的强劲震撼,除了家庭影院必须配置的大屏幕彩色电视机播放的现场画面外,另一个更重要的原因,就是家庭影院营造的特殊的声音气氛。家庭影院音响哪家好?十大家庭影院音响品牌排行榜都有哪些?不妨看看2020年家庭影院音响十大品牌排名,数据来源网络,排名不分先后,仅供参考,欢迎指正!…

    2022年8月22日
    520
  • 未保存的excel文档如何恢复,excel未保存数据恢复方法步骤

    1、我们打开excel工作表; 2、鼠标点击左上角文件→选项→保存→选中自动恢复文件位置里面的地址→复制地址; 3、打开我的电脑→将刚才复制的地址粘贴进我的电脑位置→点击转到开始搜索文件位置; 4、电脑根据粘贴的地址信息搜索出文件所在的位置,然后就可以去搜索出的文件列表里查找你未保存的文件。

    2022年7月24日
    880
  • 创业故事会,分享普通人创业的真实案例

    我一个地地道道的80后农村小伙儿,当年靠着投机取巧的脑袋,考了一个超出理想的高分。为此老师学校都为我粘了不少光。可惜冉冉飘的我报出了超现实的自愿,最后落入一个不起眼的大学,高考是我一辈子从记事起绝对没有作弊的一次,考的这么好,落的这么惨,大学几年都不心甘,在纠结中昏昏沉沉的就毕业了。 当年所学专业其实是很不好找工作的。本打算回家乡干点公职的事,没想到家乡的要求比我现在的省会城市要求还高,工资还低,…

    2022年6月19日
    620
  • 到美国留学中介费用,看完再也不用担心被中介坑

    去美国留学大家最关心的问题莫过于费用,一年的总花费主要由考试费用、学费、生活费和杂费组成,那么去美国留学到底需要花多少钱呢? 下面季老师为大家盘点一下。 1、美国留学申请中介费及第三方费用 此部分主要是出国前的花销,根据申请院校排名情况,所需考试类型,必须支付的第三方费用等等,大概在2万-10多万不等。 2、学费。 美国大学留学一年的费用最大开支就是学费,美国大学分为公立大学和私立大学两种,公立大…

    2022年10月9日
    540
  • office万能激活工具(office一键激活工具)

    经常有朋友问我怎么激活Win10系统及office办公软件,叫我帮忙远程一下。我今天刚重装了一下Win10正式专业版系统,由于是采用“全新”方式安装Windows10系统及office2019,因此系统处于“未激活”状态。我花了两小时,在网上淘了一下,找到一个比较好用的激活工具与大家分享一下具体的激活方法。 成功激活 第一步:打开激活工具“HEU_KMS”,HEUKMSActivator是一位大神…

    2022年5月2日
    980
  • 电脑微信可以登录两个吗,当然可以用这个方法简单易懂

    导读 当代职场人士拥有两个微信号甚至三个已经不是什么罕见的事情了,毕竟我们大家都希望工作不要打扰到生活。在安卓手机上进行微信应用双开也已经很简单了,通常一键就能搞定。但是如何在我们日常办公用的电脑上同时开启两个甚至是三个微信呢?其实很简单! 怎么做 1.如果你是Windows10的用户,就在你的系统自带应用商店(Microsoft stote)里面搜索“微信”,然后下载微信for Windows,…

    2022年8月25日
    450
  • 短视频营销策略有哪些,短视频目标市场分析

    众所周知,2019年是一个全新的时代,移动互联网的普及,带来了媒体环境的巨变,信息传递已呈现粉尘化传播。 短视频之所以如此“受宠”,要分为两个方面: 一方面是短视频的制作需要文字、图片、音乐、视频、表演等因素综合为一体而形成的,多元化的媒体性利用,为更多的品牌和产品提供了更多的植入空间。 另一方面要想制作精品的短视频作品,需要大量的专业性人员,比如: 撰写剧本的文案、涉及分镜的导演、表演才能的演员…

    2022年5月27日
    720

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信