机器学习-决策树算法

article/2025/11/10 18:58:31

概念:

  • 是一种树形结构,本质是一颗由多个判断节点组成的树
  • 其中每个内部节点表示一个属性上的判断,
  • 每个分支代表一个判断结果的输出,
  • 最后每个叶节点代表一种分类结果

通过分析可知:

  • 决策树是非参数学习算法
  • 决策树可以解决分类问题
  • 决策树天然可以解决多分类问题
  • 决策树可以解决回归问题:落在叶子节点(对应图中的A、B、C三点)的数据的平均值作为回归的结果
  • 决策树可以应用于信用卡评级的案例中,生成相应的分类规则。

1、熵

  • 定义

    • 熵在信息论中代表随机变量不确定度的度量。
    • 熵越大,数据的不确定性度越高
    • 熵越小,数据的不确定性越低
  • 公式

    H=−∑i=1kpilog⁡(pi)

    • 例子1:假如有三个类别,分别占比为:{1/3,1/3,1/3},信息熵计算结果为:

      H=−13log⁡(13)−13log⁡(13)−13log⁡(13)=1.0986

    • 例子2:假如有三个类别,分别占比为:{1/10,2/10,7/10},信息熵计算结果为:

      H=−110log⁡(110)−210log⁡(210)−710log⁡(710)=0.8018

      熵越大,表示整个系统不确定性越大,越随机,反之确定性越强。

    • 例子3:假如有三个类别,分别占比为:{1,0,0},信息熵计算结果为:

      H=−1log⁡(1)=0

  • 公式的转换

    当数据类别只有两类的情况下,公式可以做如下转换   

  • 代码角度理解信息熵的概念
  • import numpy as np
    import matplotlib.pyplot as pltdef entropy(p):return -p*np.log(p)-(1-p)*np.log(1-p)x = np.linspace(0.01,0.99,200)
    plt.plot(x,entropy(x))
    plt.show()

2、信息增益 

 

3、信息增益比 

 4、决策树生成-ID3算法&C4.5算法

  • ID3算法缺点

    • ID3算法不能处理具有连续值的属性
    • ID3算法不能处理属性具有缺失值的样本
    • 算法会生成很深的树,容易产生过拟合现象
    • 算法一般会优先选择有较多属性值的特征,因为属性值多的特征会有相对较大的信息增益,但这里的属性并不一定是最优的
  • C4.5算法的核心思想是ID3算法,对ID3算法进行了相应的改进。

    • C4.5使用的是信息增益比来选择特征,克服了ID3的不足。
    • 可以处理离散型描述属性,也可以处理连续数值型属性
    • 能处理不完整数据
  • C4.5算法优缺点

    • 优点:分类规则利于理解,准确率高

    • 缺点

      • 在构造过程中,需要对数据集进行多次的顺序扫描和排序,导致算法的低效
      • C4.5只适合于能够驻留内存的数据集,当数据集非常大时,程序无法运行
  • 无论是ID3还是C4.5最好在小数据集上使用,当特征取值很多时最好使用C4.5算法。

5、决策树剪枝

 5.1 为何要进行树的剪枝?

决策树是充分考虑了所有的数据点而生成的复杂树,有可能出现过拟合的情况,决策树越复杂,过拟合的程度会越高。

考虑极端的情况:如果我们令所有的叶子节点都只含有一个数据点,那么我们能够保证所有的训练数据都能准确分类,但是很有可能得到高的预测误差,原因是将训练数据中所有的噪声数据都”准确划分”了,强化了噪声数据的作用。

而剪枝修剪分裂前后分类误差相差不大的子树,能够降低决策树的复杂度,降低过拟合出现的概率。

5.2 剪枝的方法

5.2.1 先剪枝

先剪枝是对决策树停止标准的修改。

在ID3算法中,节点的分割一直到节点中的实例属于同一类别的时候才停止。对于包含较少实例的节点,很有可能被分割为单一实例的节点。为了避免这种情况,我们给出一个阈值,当一个节点分割导致的最大的不纯度下降小于a时,就把该节点看作是叶子结点。该方法选择的阈值对决策树的构建有很大的影响。

(1)当阈值a选择的过大的时候,节点的不纯度依然很高就停止了分裂。此时的树由于生长不足,导致决策树过小,分类的错误率过高。因此需要调整a参数的合理范围之内的值。

(2)当阈值a选择的过小的时候,比如a接近0,节点的分割过程近似于原始的分割过程。

5.2.2 后剪枝

后剪枝是从一个充分生长的树中,按照自低向上的方式修剪掉多余的分支,有两种方法:

(1)用新的叶子结点替换子树,该叶子结点的类标号由子树记录中的多数类决定。

(2)用子树中最常用的分支替代子树。

通常计算前后预期分类错误率,如果修剪导致预期分类错误率变大,则放弃修剪,保留相应的各个分支,否则就将相应的节点分支修剪删除。

通常采用后剪枝技术是最小的错误剪枝(MEP)技术,即在产生一系列的经过修剪后的决策树候选之后,利用一个独立的测试数据集,对这些经过修剪之后的决策树的分类准确性进行评价,保留下预期分类错误率最小的(修剪后)决策树。

除了最小错误剪枝技术外,还有悲观错误剪枝(MEP)和代价复杂度剪枝(CCP)

6、决策树算法的优缺点

1) 决策树的优点:

直观,便于理解,小规模数据集有效

执行效率高,执行只需要一次构建,可反复使用

(2)决策树的缺点:

处理连续变量不好,较难预测连续字段

类别较多时,错误增加的比较快

对于时间序列数据需要做很多的预处理

可规模性一般

实际分类的时候只能根据一个字段进行

7、构建决策树包括三个步骤:

特征选择:选取有较强分类能力的特征。

决策树生成:典型的算法有ID3和C4.5,它们生成决策树过程相似,ID3是采用信息增益作为特征选择度量,而C4.5采用信息增益比率。

决策树剪枝:剪枝原因是决策树生成算法生成的树对训练数据的预测很准确,但是对于未知数据分类很差,这就产生了过拟合的现象。

8、基尼指数和CART算法

8.1 基尼指数

 8.2 CART算法

 9、决策树经典案例

  9.1Scikit-Learn库实现相亲约会的例子

import pandas as pd
from sklearn.tree import DecisionTreeClassifier# 加载数据集
df = pd.read_csv('data/Sklearntest.csv')
df# 划分数据集
train,test = df.query('is_date!=-1'),df.query('is_date==-1')
# 获取特征值目标值
x_train,y_train = train.drop(['is_date'],axis=1),train['is_date']
x_test = test.drop(['is_date'],axis=1)# 机器学习 参数可选Gini或Entropy
model = DecisionTreeClassifier(criterion='gini')
# 模型训练
model.fit(x_train,y_train)# 预测x_test类别
model.predict(x_test)# 决策树模型可视化
from sklearn.tree import export_graphviz 
from sklearn.externals.six import StringIO
from IPython.display import Image
import pydotplus 
import os# windows 系统添加此行代码,Graphviz路径
# os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'with open("dt.dot", "w") as f:export_graphviz(model, out_file=f)
dot_data = StringIO()
export_graphviz(model, out_file=dot_data,feature_names=x_train.columns,class_names=["is_date:no","is_date:yes"],filled=True, rounded=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) 
Image(graph.create_png())

9.2 决策树解决泰坦尼克号问题

#1.1导入数据
import  pandas as pd
#1.2.利用pandas的read.csv模块从互联网中收集泰坦尼克号数据集
titanic=pd.read_csv("data/titanic.csv")#2.1首先观察数据的基本特征
titanic.head()#2.2使用pandas的info属性查看数据的统计特征
titanic.info()o
#注:数据共有1313条乘客信息,有些特征是完整的,有一些是不完整的,如name和pclass是完整的,age是不完整的。
#由于数据比较久远,难免会丢失掉一些数据造成数据的不完整,也有数据是没有量化的。
#在决策树模型之前,需要对数据做一些预处理和分析的工作。#2.3特征选择,这里根据对泰坦尼克号的了解,sex,age,pclass作为判断生还的三个主要因素。
X=titanic[['pclass','age','sex']]
y=titanic['survived']
#对当前选择的特征进行探查
X.info()#2.4根据上面的输出,设计几个数据处理的任务
#1)age这个数据列,只有633个,需要补全完整
#2)sex和pclass两个数据列都是类别型的值,需要转化为数值,比如one-hot编码。
#使用平均数或者中位数来填充,对模型偏离程度造成的影响比较小
X['age'].fillna(X['age'].mean(),inplace=True)
X.info()# 数据集的划分
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33)# 数据集特征转化
from sklearn.feature_extraction import DictVectorizer
vec=DictVectorizer(sparse=False)
#转换特征后,我们发现凡是类别型的值的特征都单独剥离出来了,独成一列特征,数据型不改变其值。
X_train=vec.fit_transform(X_train.to_dict(orient='records'))X_train
vec.feature_names_X_test=vec.transform(X_test.to_dict(orient='records'))# 使用决策树模型预测
from sklearn.tree import DecisionTreeClassifier
#使用默认的配置初始化决策树模型
dtc=DecisionTreeClassifier()
#使用分割的数据进行模型的学习
dtc.fit(X_train,y_train)
#用训练好的模型来对测试数据集进行预测
y_predict=dtc.predict(X_test)# 决策树算法评估
from sklearn.metrics import classification_report
#输出预测准确率
dtc.score(X_test,y_test)  #0.8340807174887892
#输出更加详细的分类性能
print(classification_report(y_predict,y_test,target_names=['died','survived']))


http://chatgpt.dhexx.cn/article/EMKDxbXd.shtml

相关文章

机器学习:决策树算法

文章目录 一、什么是决策树?二、决策树算法基本步骤三、算法实例1.数据集描述2.计算数据集香农熵3.数据集划分4.选择最好的数据集划分方式5.递归构建决策树6.创建树7.构造注解树8.使用决策树执行分类9.决策树的保存 三、运行结果 一、什么是决策树? 决策…

决策树算法:ID3

决策树是最经常使用的数据挖掘算法,其核心是一个贪心算法,它采用自顶向下的递归方法构建决策树,下面是一个典型的决策树:   目前常用的决策树算法有ID3算法、改进的C4.5,C5.0算法和CART算法 ID3算法的核心是在决策树…

什么是决策树算法

1.1、什么是决策树 咱们直接切入正题。所谓决策树,顾名思义,是一种树,一种依托于策略抉择而建立起来的树。 机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象…

【机器学习】决策树算法解读

【机器学习】决策树算法解读 文章目录 【机器学习】决策树算法解读1. 介绍1.1 优缺点1.2 结构1.3 学习过程1.4 决策树与条件概率分布 2. 决策树学习过程2.1 训练策略2.2 特征选择2.2.1 信息增益和条件熵 2.3 决策树的生成2.3.1 ID32.3.2 C4.52.3.3 CART2.3.4 小结 2.4 决策树的…

详解决策树算法

决策树 1.1 决策树定义 何为决策树,顾名思义,就像树枝状的决策算法,通过各个节点的“决策”,实现对任务的精准分类或回归,决策树常用来处理分类问题,即使你以前没接触过决策树,你也可以通过下…

决策树算法及其实现

决策树算法及其实现 1 什么是决策树 决策树(Decision Tree)是一种基本的分类与回归方法,本文主要讨论分类决策树。决策树模型呈树形结构,在分类问题中,表示基于特征对数据进行分类的过程。它可以认为是if-then规则的…

决策树算法 (CART分类树)

决策树算法 (ID3,C4.5) CART回归树 决策树的后剪枝 在决策树算法原理(ID3,C4.5)中,提到C4.5的不足,比如模型是用较为复杂的熵来度量,使用了相对较为复杂的多叉树,只能处理分类不能处理回归。对这些问题&a…

决策树算法总结

决策树算法常用于解决分类问题,该方法的优势在于其数据形式非常容易理解。 概述 决策树(decision tree)是一类常见的机器学习方法.以二分类任务为例,我们希望从给定训练数据集学得一个模型用以对新示例进行分类&…

决策树算法原理简介

1,决策树概念简介 不同的算法模型适合于不同类型的数据。 首先,在了解树模型之前,自然想到树模型和线性模型有什么区别呢?其中最重要的是,树形模型是一个一个特征进行处理,之前线性模型是所有特征给予权重相加得到一个…

机器学习——决策树算法

文章目录 一、决策树介绍二、利用信息增益选择最优划分属性三、ID3代码实现1.jupyter下python实现2. 使用sklearn实现ID3 四、C4.5算法实现五、CART算法实现六、总结参考文献 一、决策树介绍 决策树是一种基于树结构来进行决策的分类算法,我们希望从给定的训练数据集…

机器学习算法:决策树算法

1.基本定义 决策树(Decision Tree)是一种基本的分类和回归算法。该算法模型呈树形结构,主要由结点和有向边组成。结点又分为两种类型:内部结点和叶子结点。内部结点表示在一个属性或特征上的测试,每一个结点分枝代表一个测试输出,…

决策树算法应用及结果解读

作者:林骥 来源:林骥 引言 本文是我写的人工智能系列的第 8 篇文章,文末有前面 7 篇文章的链接,推荐你阅读、分享和交流。 1. 决策树算法简介 决策树是一种应用非常广泛的算法,比如语音识别、人脸识别、医疗诊断、模式…

机器学习算法(3)之决策树算法

前言:首先,在了解树模型之前,自然想到树模型和线性模型有什么区别呢?其中最重要的是,树形模型是一个一个特征进行处理,之前线性模型是所有特征给予权重相加得到一个新的值。决策树与逻辑回归的分类区别也在…

机器学习基础 决策树算法

文章目录 一、决策树算法简介二、决策树分类原理1. 熵1.1 概念1.2 案例 2. 决策树的划分依据一----信息增益2.1 概念2.2 案例 3. 决策树的划分依据二----信息增益率3.1 概念3.2 案例3.2.1 案例一3.2.2 案例二 3.3 为什么使用C4.5要好 4. 决策树的划分依据三 ----基尼值和基尼指…

【机器学习常见算法】决策树算法(含示例代码)

决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规 则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适用各种数据,在解决各 种问题时…

【决策树】深入浅出讲解决策树算法(原理、构建)

本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!​个人主页:有梦想的程序星空​个人介绍:小编是人工智能领域硕士,全栈工程…

协方差矩阵推导

协方差定义:,其中分别为向量的均值。 设已知矩阵 则 样本自由度m-1,设,,则

协方差矩阵到底有什么用?

我们知道,线性代数,可以完成空间上的线性变换——旋转,缩放。对于协方差,我们隐约可以想到,它能解释一个随机变量,它在各个维度的变化程度。但是,这种认识其实还是处于比较浅层次的。数学嘛&…

22协方差矩阵 matlab,协方差协方差矩阵【matlab实例】

[今天看论文的时候又看到了协方差矩阵这个破东西,以前看模式分类的时候就特困扰,没想到现在还是搞不清楚,索性开始查协方差矩阵的资料,恶补之后决定马上记录下来,嘿嘿~ 协方差矩阵 协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计…

透彻理解协方差矩阵

2018-12-30 11:27:05 协方差及协方差矩阵有着特别广泛的应用,在多元高斯分布、高斯过程、卡尔曼滤波等算法中多有用到,本文从协方差、协方差矩阵讲起,并重点讲解协方差矩阵在高斯分布中的用法及意义,也是讲解高斯过程、贝叶斯优化…