使用 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


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

相关文章
|
12天前
|
机器学习/深度学习 数据采集 算法
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
|
8天前
|
机器学习/深度学习 数据采集 监控
Scikit-learn机器学习
【5月更文挑战第3天】Scikit-learn是一个基于NumPy、SciPy和Matplotlib的Python机器学习库,提供数据预处理到模型评估的全套工具。支持监督学习、无监督学习和降维等任务。要安装Scikit-learn,运行`pip install scikit-learn`。流程包括:数据准备(如加载鸢尾花数据集并划分训练测试集)、选择模型(如SVM分类器)、模型训练、模型评估(计算准确度)、特征工程和数据预处理(如特征缩放)、超参数调优(如Grid Search CV)、模型可视化(如混淆矩阵)和部署。
25 3
|
10天前
|
机器学习/深度学习 算法 数据可视化
【Python机器学习专栏】决策树算法的实现与解释
【4月更文挑战第30天】本文探讨了决策树算法,一种流行的监督学习方法,用于分类和回归。文章阐述了决策树的基本原理,其中内部节点代表特征判断,分支表示判断结果,叶节点代表类别。信息增益等标准用于衡量特征重要性。通过Python的scikit-learn库展示了构建鸢尾花数据集分类器的示例,包括训练、预测、评估和可视化决策树。最后,讨论了模型解释和特征重要性评估在优化中的作用。
|
10天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】使用Scikit-learn进行数据编码
【4月更文挑战第30天】本文介绍了Python Scikit-learn库在机器学习数据预处理中的作用,尤其是数据编码。数据编码将原始数据转化为算法可理解的格式,包括标签编码(适用于有序分类变量)、独热编码(适用于无序分类变量)和文本编码(如词袋模型、TF-IDF)。Scikit-learn提供LabelEncoder和OneHotEncoder类实现这些编码。示例展示了如何对数据进行标签编码和独热编码,强调了正确选择编码方法的重要性。
|
11天前
|
机器学习/深度学习 人工智能 算法
【机器学习】探究Q-Learning通过学习最优策略来解决AI序列决策问题
【机器学习】探究Q-Learning通过学习最优策略来解决AI序列决策问题
|
11天前
|
机器学习/深度学习 算法 数据挖掘
机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧
机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧
|
11天前
|
机器学习/深度学习 人工智能 算法
|
16天前
|
机器学习/深度学习 算法 Python
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享(下)
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
16天前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享(上)
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
3天前
|
机器学习/深度学习 存储 人工智能
【人工智能】机器学习算法综述及常见算法详解
【人工智能】机器学习算法综述及常见算法详解