IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 决策树的简单原理(简明易懂) -> 正文阅读

[人工智能]决策树的简单原理(简明易懂)

决策树

1.1决策树的种类

决策树算法分为ID3,C4.5,CART以及最基本的决策树算法CLS,前面三种都是CLS的优化和延深。
这里讨论的是python模块包sklearn中的分类决策树,包括ID3,C4.5,CART。
ID3使用信息增益最大值来选择分裂属性,只能实现分类算法,仅仅适用于二分类问题,仅仅能够处理离散属性。
C4.5使用信息增益率最大值选择分裂属性,既可以分类也可以回归。分类选择信息增益率最大的作为最优特征,回归是先将特征取值排序,以连续两个值中间值作为划分标准。计算每一种划分后的信息增益,选择信息增益最大的分裂点作为该属性的分裂点。
CART分类树中使用最小基尼值来选择分裂属性,回归树中使用平方误差最小化准则来选择分裂属性。可以分类可以回归。与ID3,C4.5不同的是CART构成的决策树必须是二叉树。

1.2ID3决策树的生成

在这里插入图片描述

  1. 根据数据集选取信息增益最大的属性作为根结点,属性里的值作为分支
  2. 如果根节点下所有样本属于同一类则生成一个叶子节点,中止算法
  3. 计算每个分支里剩余属性的信息增益,选取 信息增益 最大的属性作为分支节点
  4. 重复一到三步骤,直到没有属性或者剩余属性 信息增益 很小结束决策树的构建

2.1信息增益的解释

信息增益=熵-条件熵
信息增益代表给定一个变量的条件下,原始变量不确定性的减小程度。
信息增益值大小相对于训练数据集而言, 没有绝对的意义。当分类问题困难时,熵就会偏大,导致信息增益偏大,反之偏小

2.2熵

熵定义为信息的期望值,为了计算熵,我们需要计算所有类别所有可能值所包含的信息期望值,计算公式如下
请添加图片描述
Ck代表一种类别的类别个数,D代表全部的样本个数

2.3条件熵

条件熵 H(D|A) 表示在已知随机变量A的条件下随机变量D的不确定性
请添加图片描述
P(A)为事件A的概率,D1代表D中一种类别的概率,P(D1|A)代表A和D1同时发生的概率。

2.4信息增益公式

请添加图片描述

2.5信息增益比公式

请添加图片描述

2.6基尼指数公式

集合D的基尼基尼指数

请添加图片描述
Ck代表样本为Ck的个数D代表样本总个数。

在A的条件下集合D的基尼指数

请添加图片描述
D1,D2为D中的为D1,D2分类的样本数,D为总样本数。

3.1决策树参数说明

class sklearn.tree.DecisionTreeClassifier (criterion=’gini’,splitter=’best’,max_depth=None,max_features=None, max_leaf_nodes=None,random_state=None,min_impurity_split=None )
criterion:默认gini,特征选择标准,gini代表CART算法,entropy代表ID3算法。
splitter:默认best,可选择random,当数据量非常大建议使用random。
max_depth:默认None,树的深度。如果样本数量多,特征多建议使用,常用10-100。
max_features:默认None,样本特征数,当样本特征低于五十建议不做修改。
max_leaf_nodes:默认None,最大叶子数,如果特征较多建议加以限制。算法会建立在最大叶子节点数内最优决策树。
random_state:随机种子,如果数据不做改变保证下次运行和这次结果相同。
min_impurity_split:默认None,最小阈值,当节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值,则该节点不再生成子节点,为叶子节点 。

完整版代码展示

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz  # 保存树模型图片
titan = pd.read_csv("titanic.csv", index_col=0)
titan.dropna(subset=["age"], axis=0, inplace=True)  # 删除年龄为空
X = titan[["pclass", "age", "sex"]].copy()  # 筛选特征和标签
y = titan["survived"]
X["pclass"] = X["pclass"].str[0].astype(int)
X["sex"] = (X["sex"] == 'male').astype(int)  # 男为1  女为0

X_train, X_test, y_train, y_test = train_test_split(   # 拆分数据集
    X,
    y,
    random_state=1,
    test_size=0.2,
    stratify=y
)
dt = DecisionTreeClassifier(max_depth=5)  # 决策树不需要进行数据标准化
dt.fit(X_train, y_train)
acc = dt.score(X_test, y_test)
print("在测试集上的准确率", acc)
print("在训练集上的准确率", dt.score(X_train, y_train))
export_graphviz(dt, 'titanic.dot',  # 将算法模型dt 导出到 dot文件中
                # feature_names=["pclass", "age", "sex"],
                feature_names=["舱位", "年龄", "性别"],
                # max_depth=5,  # 树的深度
                class_names=['死亡', '生存']  # 类别名称
                )

好了,本章的内容到这里就结束了,小伙伴们可以去试试决策树建模了。欢迎小伙伴们指出文章误点,大家相互学习,一起进步。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 12:00:06  更:2021-10-17 12:02:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:38:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码