zoukankan      html  css  js  c++  java
  • 分类——决策树模型(附有决策树生成步骤)

    一、决策树的算法的学习
    决策树学习通常包括特征选择、决策树的生产、决策树的修剪这三个步骤组成。这些决策树学习的思想主要来自于ID3算法、C4.5算法、CART算法,我学习了这三个算法后是觉得难度依次增加,考虑的问题由局部->总体->优化,下面会依次介绍三种算法个人学习心得,不妥之处,敬请指出。
    1、特征选择
    三种算法分别对应三种不同的准则,ID3算法运用了信息增益,C4.5算法运用了信息增益比,CART算法运用了基尼指数(Gini)。(这里只简要介绍三个准则,详细请阅读李航教授的《统计学习方法》)。在介绍之前,先介绍熵的概念,随机变量X(为输入实例的所属类。假如有50个随机变量(假设全部被决策树分类),如果所有的随机变量被分成2类,一类有20的,另一类则有30个,则X的取值为2/5、3/5.)的熵定义为从X1、X2到Xn分别与对应的以2或者e为底,X1、X2到Xn对应的自身的乘积的之和的相反数。
    首先介绍ID3算法的准则信息增益:它定义为:g(D,A)=H(D)-H(D|A),其中H(D)为经验熵,是上述熵的应用,D是训练数据集;H(D|A)为特征A对数据集D的经验条件熵,个人理解是每个数据集都已经成为某类的一个数据,用特征A对数据集进行划分,划分出来的每一部分中的数据可能从属不同的类,H(D|A)即求的是划分的每一部分的H(Di)之和,信息增益g(D,A)就能求出。但是运用信息增益可能在概率上会有偏好,会造成过拟合,因此有了信息增益比。
    C4.5则运用了信息增益比,特征A对训练数据集D的信息增益比gR(D,A)定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵HA(D)之比,即gR(D,A)=g(D,A)/HA(D),其中,
    CART算法可以用于分类或回归中,其标准Gini指数请参考李航教授的《统计学习方法》。

    2、决策树的生成(我重点从实战中记录心得)
    决策树的生成这里使用了sklearn.datasets库中的load_wine数据集,一般的建模从代码层面可以得出模型的准确率、召回率等,但不能生成决策树。而一棵完美的决策树会是建模过程更加的高级,所以有必要学习下。画出对应模型的决策树需要graphviz第三方库(这个库的安装真的有点难度),需要pip进行install,这一点还不够,还需要设置电脑系统环境变量,这是重点。
    首先从graphviz官方安装对应的graphviz工具,我安装的是Win10-64位的,安装过程中需要记得安装地址,后面在设置电脑系统环境变量需要使用,安装成功后便开始进行环境变量的设置了。
    设置环境变量:首先进入控制面板,找到“系统”,点击进入,


    设置用户环境,即输入刚刚安装的地址,以我为例:D:graphvizin
    设置环境变量,在安装地址后+dot.exe,例:D:graphvizindot.exe

    检测环境变量是否生效:
    1.打开dos窗口:win+R
    2.输入命令:dot -version
    3.观察到如下信息,则该设置生效;

    有效之后便是最后一步在Pycharm中安装graphviz库了,成功之后便可以使用(这是正常情况下),如果出现下面的bug,python中运行 仍然出错

    ’ExecutableNotFound: failed to execute ['dot', '-Tpdf', '-O', 'iris'], make sure the Graphviz executables are on your systems' PATH‘
    之后用以下方法查看了环境变量,发现没有,之后追加上。
    import os
    os.environ[ "PATH" ] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'
    现在就可以使用了。

    下面给出决策树实现load_wine数据集的代码及决策树

    from sklearn.datasets import load_wine
    from sklearn import tree
    from sklearn.model_selection import train_test_split as tsplit
    from sklearn.tree import DecisionTreeClassifier, export_graphviz
    import graphviz
    import os
    os.environ[ "PATH" ] += os.pathsep + 'D:/graphviz/bin'
    X,y=load_wine(return_X_y=True)
    x_train,x_test,y_train,y_test=tsplit(X,y,test_size=0.1)
    m=tree.DecisionTreeClassifier()
    m.fit(x_train,y_train)
    

    **添加特征名称(feature_names)、分类结果(class_names)、填充颜色filled=True可以给可视化的决策树添加颜色。因为load_wine数据集有13个特征,所有下面没有添加,有需要请自己添加,格式一样。
    dot_data=export_graphviz(m,out_file=None,
    class_names=['pclass=0','pclass=1st','pclass=2nd'],filled=True)
    graph=graphviz.Source(dot_data)
    graph.render('决策树可视化')

    附加读取excel类型文件的例子

    #模型搭建代码汇总
    from sklearn.tree import export_graphviz
    import graphviz
    import os 
    import pandas as pd
    #1.读取数据与简单预处理
    df = pd.read_excel('员工离职预测模型.xlsx')
    df = df.replace({'工资': {'低': 0, '中': 1, '高': 2}})
    #2.提取特征变量和目标变量
    X = df.drop(columns='离职')
    y = df['离职']
    #3.划分训练集和测试集
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)
    #4.模型训练及搭建
    from sklearn.tree import DecisionTreeClassifier
    model = DecisionTreeClassifier(max_depth=3, random_state=123)
    model.fit(X_train, y_train)
    #以下这两行是手动进行环境变量配置,防止在本机的环境变量部署失败
    os.environ['PATH'] = os.pathsep + 'D:graphvizin'
    dot_data = export_graphviz(model, out_file=None)
    graph = graphviz.Source(dot_data)
    graph.render('决策树可视化')
    

    参考文献:

    [1]李航.统计学习方法[M].清华大学出版社,2019
    [2]徐向武.Python高手修炼之道[M].人民邮电出版社,2020
    [3]https://blog.csdn.net/qq_45832050/article/details/109271806?utm_source=app&app_version=4.7.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

  • 相关阅读:
    在win7 64位上安装VS2015的问题汇总
    关于C#类的深拷贝的问题
    线程、进程
    c#日志 log4net
    C#常识
    Tribon数据抽取的一些心得
    Java Web相关课程学习笔记
    过滤器、监听器、拦截器的区别
    SHH架构中几个配置文件解释 applicationContext.xml web.xml struts.xml
    vue关于动态增加路由页面
  • 原文地址:https://www.cnblogs.com/lgbdbky/p/14747852.html
Copyright © 2011-2022 走看看