信息论基础与决策树基础

本文介绍了信息论的基础概念,包括信息熵和条件熵,并阐述了信息增益在决策树构建中的作用。接着详细讲解了决策树的原理、常用算法如ID3、C4.5和C5.0,以及剪枝策略。同时,提到了sklearn库中决策树的API和过拟合问题。通过泰坦尼克号数据集的实战分析,展示了如何利用决策树进行生存预测,并给出了决策树的可视化过程。最后,提供了Graphviz软件的安装和使用指南,用于生成决策树的图形表示。
摘要由CSDN通过智能技术生成

一、信息论基础

1、信息论

信息论是运用概率论与数理统计的方法研究信息、信息熵、通信系统、数据传输、密码学、数据压缩等问题的应用数学学科。信息系统就是广义的通信系统,泛指某种信息从一处传送到另一处所需的全部设备所构成的系统。信息论是关于信息的理论,应有自己明确的研究对象和适用范围。但从信息论诞生的那时起人们就对它有不同的理解。


2、信息熵

信息熵是一个数学上颇为抽象的概念,在这里不妨把信息熵理解成某种特定信息的出现概率(离散随机事件的出现概率)。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。信息熵也可以说是系统有序化程度的一个度量。 

H的专业术语称之为信息熵,单位为比特。

注:信息熵和消除不确定性是相联系的

信息熵的定义公式:

3、条件熵的计算方法

(1)银行贷款数据案例介绍条件熵公式计算方法

计算年龄的信息增益步骤为:

4、信息增益(决策树的划分依据之一)

信息增益:当得知一个特征条件之后,减少的信息熵的大小。

二、决策树介绍

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。

决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。

分类树(决策树)是一种十分常用的分类方法。他是一种监督学习,所谓监督学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。

1、常见决策树使用的算法

注:基尼系数的划分更加仔细

2、sklearn中关于决策树的API

(1)减枝操作(cart)做法:

 如果决策树考虑了所有的训练数据集,得到的决策树将会过于庞大。虽然这个决策树对于训练数据集的拟合概率为100%,但是由于过分考虑所有的数据,将数据切得太碎太碎了,这样就会使得决策树学习到一些噪音点、错误点,出现过拟合的现象。过拟合的主要原因在于构建决策树时过于复杂。

决策树的剪枝通过极小化决策树整体的损失函数或代价函数来实现。

使用 min_samples_split min_samples_left 两个参数进行判断,走到某一步,若剩下符合条件的项少于X项,则删减掉。

3、决策树的保存

sklearn.tree.export_graphviz() 该函数能够导出 DOT 格式的文件

tree.export_graphviz(estimator,out_file=‘tree.dot’,feature_names=['',‘’])

4、决策树的优缺点以及改进

(1)优点

  • 简单的理解和解释,树木可视化
  • 需要很少的数据准备,其他技术通常需要数据归一化

(2)缺点

  • 决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合

(3)改进

  • 减枝cart算法(决策树API当中已经实现,随机森林参数优化有相关的介绍)
  • 随机森林

注:企业重要决策,由于决策树很好的分析能力,在决策过程中被应用较多。

三、决策树的可视化

1、windows下Graphviz安装及入门教程

windows版本下载地址:http://www.graphviz.org/download/

配置环境变量

将graphviz安装目录下的bin文件夹添加到Path环境变量中:

验证

进入windows命令行界面,输入dot -version,然后按回车,如果显示graphviz的相关版本信息,则安装配置成功。

2、和python交互

graphviz强大而便捷的关系图/流程图绘制方法,很容易让我们联想到机器学习中的Decision Tree的展示方式。幸运的是,scikit-learn提供了生成.dot文件的接口,具体操作如下:

tree.export_graphviz(estimator,out_file=‘tree.dot’,feature_names=["", ""])

(1)在python编辑环境下:

from sklearn.tree import export_graphviz    # 导入的是一个函数
# tree表示已经训练好的模型,即已经调用过DecisionTreeClassifier实例的fit(X_train, y_train)方法
export_graphviz(tree, out_file='tree.dot', 
        feature_names=['petal length', 'petal width'])

(2)进入windows命令行界面,cd 切换到tree.dot所在的路径,执行

dot -Tpng tree.dot -o tree.png

四、泰坦尼克号案例分析

在泰坦尼克号相关数据(titanic2)中,数据描述了泰坦尼克号上乘客的生存状态。分析数据获取乘客的存活情况:

我们提取到的数据集中的特征分别是:票的类别、存活、乘坐班、年龄、登陆、home.dest、房间、票、船和性别。乘坐班是指乘客社会经济阶层(1,2,3)。其中,age数据中存在缺失值

数据来源:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt

from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.model_selection import train_test_split
import pandas as pd


def decision():
    """
    决策树对泰坦尼克号进行预测生死
    :return: None
    """
    #获取数据
    titan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")

    #处理数据,找出特征值和目标值
    x = titan[['pclass', 'age', 'sex']] #特征值
    y = titan['survived'] #目标值
    print(x)

    # 缺失值处理
    x['age'].fillna(x['age'].mean(), inplace=True) #inplace即替换值

    #分割数据集到训练集
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)

    #进行处理(特征工程)特征——>类别——>one-hot编码
    dict = DictVectorizer(sparse=False)
    x_train = dict.fit_transform(x_train.to_dict(orient='records')) #将数据转换成字典格式
    print(dict.get_feature_names())
    x_test = dict.transform(x_test.to_dict(orient='records'))
    print(x_train)

    #使用决策树进行预测
    dec = DecisionTreeClassifier(criterion="gini")
    dec.fit(x_train, y_train)

    #预测准确率
    print("预测的准确率为:", dec.score(x_test, y_test))

    #导出决策树的结构
    export_graphviz(dec, out_file="./tree.dot",
            feature_names=['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=female', 'sex=male'])

    return None

if __name__ == '__main__':
    decision()

决策树展示:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值