使用 scikit-learn 玩转机器学习——决策树

简介: 决策树算法是计算机科学家罗斯.昆兰(下图大佬,没错,是图灵,因为我没找到昆兰大佬的照片)在学术休假时提出的。期间,他到斯坦福大学访问,选修了图灵的助手 D.Michie 开设的一门研究生课程。课上布置的一个大作业就是用程序写出一个完备正确的规则,以判定国际象棋的残局是否会在2步后被将死,昆兰在这个任务中得到灵感,之后又将该部分工作整理出来于1979年发表,并命名为 ID3 算法。之后很多其他的决策树算法也相继问世,比如ID4、ID5、C4.5、和 CART(Classification and Regression Tree) 等。scikit-learn 中决策树的实现是基于 CART。

决策树算法是计算机科学家罗斯.昆兰(下图大佬,没错,是图灵,因为我没找到昆兰大佬的照片)在学术休假时提出的。期间,他到斯坦福大学访问,选修了图灵的助手 D.Michie 开设的一门研究生课程。课上布置的一个大作业就是用程序写出一个完备正确的规则,以判定国际象棋的残局是否会在2步后被将死,昆兰在这个任务中得到灵感,之后又将该部分工作整理出来于1979年发表,并命名为 ID3 算法。之后很多其他的决策树算法也相继问世,比如ID4、ID5、C4.5、和 CART(Classification and Regression Tree) 等。scikit-learn 中决策树的实现是基于 CART。

52.jpg

决策树是一类常见的机器学习方法。它把分类和回归问题归结为做出一系列子决策,通过一系列子决策组合得到的结果来做出最终决策。当使用 CART 解决分类问题时,会使用待预测样本所在的叶子节点所有的数据进行投票,来决定未知样本的类别;当使用 CART 解决回归问题时,会使用待预测样本所在的叶子节点所有的样本输出的平均值,来表示未知样本的输出值。下面我们举个栗子。


最近一部叫做《海王》的电影很热,小宁也打算去看,在去看之前,小宁做出了如下的决策。1)是好莱坞大片吗?当然是,DC 巨制;2)导演是谁?水不水?温子仁,拍过电锯惊魂等恐怖片为代表的佳作;3)投资1.6亿美元,据说光看特效就值了。考虑之后,小宁兴高采烈的买了2张晚上7点半的票。

53.jpg


决策树在使用数据训练的过程中会建立一棵树,使用这棵树来预测未知样本的类别或回归值。在构建决策树时,我们会遍历数据的每一维特征,并在每一位特征上进行插值,以搜索最大信息增益或最小的子区间的信息熵之和。这涉及到信息熵和基尼系数的概念。


我第一次接触到熵的概念是高中化学(学霸勿喷),它用来表示物质的混乱度。这里的信息熵用来代表随机变量不确定度的度量,其表达式为:


基尼系数与信息熵类似,可以起到大概相同的作用。scikit-learn 中默认使用基尼系数进行计算,因为基尼系数的计算是多项式运算,比熵计算更快,大多数情况下区别不明显,基尼系数表达式如下:


代码演练

1、我们先加载一个鸢尾花数据集,并实例化一棵朴素的决策树分类器,绘出该决策树的决策边界,看看是什么样子。

54.jpg


下面我们绘制出刚才实例化并训练过的决策树模型的决策边界,和鸢尾花数据集样本点。

55.jpg


2、接下来介绍下决策树的一些重要的超参数。


criterion: 字符串,可选‘gini’或者‘entropy’,分别表示要使用基尼系数或熵进行决策区间的划分,默认选‘gini’;


max_depth: 整型型数字,用来规定决策树的最大深度;


min_samples_split: 可以使整型或浮点型数字,用来规定如果进行一次决策区间的划分至少要包含多少个样本;


min_samples_leaf: 可以使整型或浮点型数字,用来规定每个叶子节点至少要包含多少个样本;


max_features: 在寻找最佳划分时,最多考虑多少样本特征;


min_impurity_decrese: 浮点数,设定了一个阈值,只有一次划分使得不纯度的减少量超过该阈值,该划分才会被允许。


3、给小伙伴们介绍一个很方便的 Python 模块 —— graphviz。我们可以先在 scikit-learn 中的 tree 的 export_graphviz() 函数中传入必要的信息来实例化一个图例,将图例传给 graphviz 的 source() 函数即可绘制出你训练过的决策树的结构。如下是刚才实例化的朴素决策树的结构图:


56.jpg


鸢尾花数据集是一个著名的数据集,它含有4个特征分别是花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)和花瓣宽度(petal length),上述决策树在生成时使用了鸢尾花数据集的全部特征。根据这些特征,鸢尾花最终分为3类,山鸢尾(iris Setosa)、杂色鸢尾(iris Versicolour)、和维吉尼亚鸢尾(iris Virginica)。然后我们再去看上述的决策树结构图,从根节点开始,第一个最优划分特征是花瓣长度(petal length),最优划分值为2.45,此时的基尼系数为0.667,共150个样本,第一次划分后所得的左分支节点全是山鸢尾,共50个样本,基尼系数为0,停止继续划分;所得的右分支节点基尼系数不为0,需要继续划分,第二次最佳划分属性为花瓣宽度,最佳划分值为1.75......


4、上面的决策树似乎有些过拟合了,因为是默认模型,我们可以传入一些超参数给决策树模型剪枝,以此防止模型的过拟合,具体如下:

57.jpg


如上图所示,经过传参剪枝的决策树模型的决策边界好像是简洁多了,不过过度的剪枝会导致决策树模型的欠拟合,具体要看模型在训练集和测试集上的精度来调参,不再赘述。该模型对应的决策树结构如下:

58.jpg


经过剪枝之后的决策树结构也变的十分简洁,篇幅好像够了,那这次分享就到这里,再见!

相关文章
|
3天前
|
机器学习/深度学习 算法 Python
从菜鸟到大师:一棵决策树如何引领你的Python机器学习之旅
【9月更文挑战第9天】在数据科学领域,机器学习如同璀璨明珠,吸引无数探索者。尤其对于新手而言,纷繁复杂的算法常让人感到迷茫。本文将以决策树为切入点,带您从Python机器学习的新手逐步成长为高手。决策树以其直观易懂的特点成为入门利器。通过构建决策树分类器并应用到鸢尾花数据集上,我们展示了其基本用法及效果。掌握决策树后,还需深入理解其工作原理,调整参数,并探索集成学习方法,最终将所学应用于实际问题解决中,不断提升技能。愿这棵智慧之树助您成为独当一面的大师。
13 3
|
5天前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【9月更文挑战第7天】当我们身处数据海洋,如何提炼出有价值的洞察?决策树作为一种直观且强大的机器学习算法,宛如智慧之树,引领我们在繁复的数据中找到答案。通过Python的scikit-learn库,我们可以轻松实现决策树模型,对数据进行分类或回归分析。本教程将带领大家从零开始,通过实际案例掌握决策树的原理与应用,探索数据中的秘密。
14 1
|
10天前
|
机器学习/深度学习 算法 数据挖掘
|
12天前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
15天前
|
机器学习/深度学习 算法 数据挖掘
【白话机器学习】算法理论+实战之决策树
【白话机器学习】算法理论+实战之决策树
|
20天前
|
机器学习/深度学习 算法 自动驾驶
揭秘机器学习模型的决策之道
【8月更文挑战第22天】本文将深入浅出地探讨机器学习模型如何从数据中学习并做出预测。我们将一起探索模型背后的数学原理,了解它们是如何被训练以及如何对新数据进行预测的。文章旨在为初学者提供一个清晰的机器学习过程概述,并启发读者思考如何在自己的项目中应用这些技术。
|
28天前
|
机器学习/深度学习 人工智能 算法
如何使用Scikit-learn在Python中构建一个机器学习分类器
如何使用Scikit-learn在Python中构建一个机器学习分类器
17 3
|
1月前
|
机器学习/深度学习 算法 搜索推荐
基于机器学习的用户行为分析:深入洞察与精准决策
【8月更文挑战第3天】基于机器学习的用户行为分析为企业提供了深入了解用户需求、优化产品设计和制定精准营销策略的有力工具。随着人工智能和大数据技术的不断发展,用户行为分析将更加智能化和个性化。未来,我们可以期待更加高效、精准的机器学习算法和模型的出现,以及更多创新性的应用场景的拓展。同时,也需要关注数据隐私和安全性问题,确保用户数据的安全和合规使用。
|
30天前
|
机器学习/深度学习 算法 数据挖掘
机器学习新手也能飞:Python+Scikit-learn让你轻松入门!
在数据驱动的时代,机器学习是推动科技进步和智能化生活的关键。Python以简洁的语法和强大的库支持,成为机器学习的理想语言。Scikit-learn作为Python的开源机器学习库,提供简单易用的API和丰富的算法,降低了学习门槛。通过Python结合Scikit-learn,即使是初学者也能快速上手,如使用鸢尾花数据集进行分类任务,体验从数据预处理到模型训练和评估的全过程,进而探索更多机器学习的可能性。
34 0
|
1月前
|
机器学习/深度学习 数据采集 算法
Scikit-learn:打破机器学习神秘面纱,带你一路狂飙入门与进阶!
【8月更文挑战第5天】Scikit-learn 是 Python 中广泛使用的机器学习库,提供丰富的工具和算法,助力解决实际问题。对初学者友好,从简单的线性回归开始,到复杂的分类任务如逻辑回归和支持向量机,再到数据预处理如标准化和归一化,逐步展现其强大功能。通过实践,用户可以熟练掌握并应用于房价预测、图像识别等多种场景,创造高价值成果。
27 0