机器学习————决策树

本文详细介绍了决策树(ID3、C4.5/CART)的基本概念、信息增益、信息增益率和Gini系数的选择机制,以及在西瓜数据集上的应用。对比了ID3与CART算法的优缺点,发现CART在处理连续性和类别不平衡数据上更具优势,测试结果显示CART的性能优于ID3。

一、决策树概述

1.1概述

  决策树是一种非参数监督学习方法,通过对训练集数据学习,挖掘一定规则用于对新的数据集进行预测,通俗来说,是if-then决策集合。目的是使样本尽可能属于同一类别,分类更准确,通过递归选择最优特征对数据集进行分割,使每个子集都有一个最优分类过程。通过特征选择,选择最佳特征,将数据集分割成正确分类的子集。
常用的特征选择及对应算法:
信息增益——ID3算法
信息增益率——C4.5算法
基尼系数——CART算法

三种算法比较: 

算法 模型 连续值 缺少值
ID3 分类 不支持 不支持
C4.5 分类 支持 支持
CART 分类回归 支持 支持

1.1.1 ID3算法

基于信息增益为度量指标的分类算法,用到了熵理论,熵越小信息越纯,效果越好,选取熵值小(信息增益大)作为分类节点

一般步骤如下:

假设数据集D,|D|表示样本总个数,数据集有K个分类,记为Ck,特征A有j个不同取值{a1,……,aj}
由A可以把D分为j个子集
Dik为子集D再按k划分而得的子集

已知:

①因此总信息熵

②特征条件下经验条件熵

③特征的信息增益

④进行①-③计算每个点的信息增益选择值最大的进行扩展

⑤重复①-④直到叶子节点唯一即建立决策树

1.1.2 C4.5算法

基于信息增益率作为指标,在ID3基础上能处理连续型数据,也能处理有缺失情况的数据集。
在ID3的①-③步中额外新增两步:

选择最大信息增益率作为分裂节点

1.1.3 CART算法

基于Gini系数分类回归算法选择Gini系数小的作为分裂节点
①计算总Gini系数

②计算每个特征变量的Gini系数(可能因此分为D1、D2两部分)

③选择Gini系数最小的作为分裂节点

连续型
将连续值离散化,将值按序划分,m个值就有m-1种划分方式,分为D1.D2.计算每种划分下的Gini系数,选最小的作为最终结果

离散型(文本):
一个值为D1,另外一个值为D2,计算Gini系数,选最小的结果

1.2 实现

1.2.1 数据集介绍

数据集采用周志华《机器学习》课后习题4.3的西瓜数据集

### 决策树的介绍 决策树(Decision Tree)是一种有监督、非参数、简单、高效的机器学习算法,也是一种基本的分类与回归方法 [^1][^2][^3]。它以其直观易懂和易于实现的特点,成为许多初学者的首选,在数据挖掘和数据分析中是常用工具 [^1][^2]。决策树就像一个树结构,存在根节点及其子节点,子节点表示数据集的特征,可使用叶节点或终端节点进行预测,适用于分类数据集和连续数据集,在对对象进行分类或标记时非常有用 [^4]。 ### 决策树的原理 决策树通过树状结构对数据进行建模,以解决分类和回归问题 [^2]。它充分利用响应变量的信息,能够很好地克服噪声问题,其决策边界为矩形,对于真实决策也为矩形的样本数据集有着很好的预测效果 [^3]。决策树算法的构建通常采用递归贪婪算法,逐步选择最优的特征进行节点划分,以达到对数据的最佳分类或回归效果 [^4]。 ### 决策树的应用 决策树在分类和回归问题中表现出色,能提供易于解释的模型,帮助理解数据中的模式 [^1]。在实际应用中,决策树广泛用于医疗诊断、金融风险评估、市场营销等领域,通过对数据的分析和分类,为决策提供支持 [^1][^2][^3]。 ### 决策树的实现 在Python中可以使用`scikit-learn`库来实现决策树算法,以下是一个简单的示例代码: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 创建决策树分类器 clf = DecisionTreeClassifier() # 训练模型 clf.fit(X_train, y_train) # 进行预测 y_pred = clf.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print(f"模型准确率: {accuracy}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值