机器学习——决策树

一、决策树

如何从数据集中构造一颗决策树

决策树构造过程:选择不同属性对决策树进行分裂(生长),让叶子节点中更纯
这里写图片描述

属性分裂-影响
属性类型:
    Norminal(类别型)
    Ordinal(有序型)
    Continiuous(连续型)
分叉数量: 
    二分叉
    多分叉

二、决策树划分依据 –不纯度impurity指标

这里写图片描述

2.1 信息熵

                         1948年香农(Shannon)提出了信息熵(Entropy)的概念。
假如事件A的分类划分是:( A1,A2,...,An A 1 , A 2 , . . . , A n ),那每部分发生的概率是 pi(i=1,2,3...n p i ( i = 1 , 2 , 3... n ),
那信息熵Emtropy(A)定义为公式如下:

Entropy(A)=i=1npilog2pi                                                                 E n t r o p y ( A ) = − ∑ i = 1 n p i l o g 2 p i                                                                                                                                

=(p1log2p1+p2log2p2+...+pnlog2pn) = − ( p 1 l o g 2 p 1 + p 2 l o g 2 p 2 + . . . + p n l o g 2 p n )


2.2.条件熵(Conditional Entropy) 与 信息增益(Information Gain)

                         条件熵 H(Y|X) H ( Y | X ) 表示在已知随机变量 X 的条件下随机变量 Y 的不确定性。
条件熵 的公式:

H(Y|X)=xXp(x)H(Y|X=x)                               H ( Y | X ) = ∑ x ∈ X p ( x ) H ( Y | X = x )                                                            

=xXp(x)xYp(y|x)logp(y|x) = − ∑ x ∈ X p ( x ) ∑ x ∈ Y p ( y | x ) l o g p ( y | x )

=xXxYp(x,y)logp(y|x)         = − ∑ x ∈ X ∑ x ∈ Y p ( x , y ) l o g p ( y | x )                


                      当特征变量X被固定后,给系统带来的增益(或者说为系统减少不确定性)为 :
信息增益(information gain)

=Entroy()Entroy() 信 息 增 益 = E n t r o y ( 前 ) − E n t r o y ( 后 )

Gain=En(D,a)v=1V|Dv||D|Ent(Dv) G a i n = E n ( D , a ) − ∑ v = 1 V | D v | | D | E n t ( D v )

                               信息增益Gain缺点:值越多,分叉越多


增益率(GainRatio) :增益比率度量是用前面的增益度量Gain(S,A)和所分离信息度量SplitInformation(如下面例题中的性别,活跃度等)的比值来共同定义的

GainRatio(SA,A)=Gain(SA,A)SplitInfo(SA,A)        G a i n R a t i o ( S A , A ) = G a i n ( S A , A ) S p l i t I n f o ( S A , A )              

SplitInfo(SA,A)=|SAm||SA|log|SAm||SA| S p l i t I n f o ( S A , A ) = − ∑ | S A m | | S A | l o g | S A m | | S A |

2.3基尼值Gini(D) 与基尼指数Gini_index

                         从数据集D中随机抽取两个样本,起类别标记不一致的概率,故, GiniD G i n i ( D ) 值越小,数据集 D 的纯度越高。
基尼值Gini(D)

GINI(D)=1i=1np(i)2                                      G I N I ( D ) = 1 − ∑ i = 1 n p ( i ) 2                                                                          

基尼指数Gini_index(D)
一般选择使划分后基尼系数最小的属性作为最优化分属性。

Gini_index(D,a)=i=1I|Di||D|GINI(Di)                                      G i n i _ i n d e x ( D , a ) = ∑ i = 1 I | D i | | D | G I N I ( D i )                                                                          

2.4 例题

示例:

这里写图片描述

三 算法优化

3.1 决策树算法(ID3,C4.5,CART)对比
对比项           ID3           C4.5          CART
目标变量类型     类别型         类别型        类别型,连续型
输入变量类型     类别型      类别型,连续型    类别型,连续型
分叉数量         多叉树        多叉树         二叉树
缺失值处理       不支持         支持          支持
防止过拟合       不支持         支持          支持
名称提出时间分支方式是否支持剪枝备注
ID31975信息增益不支持ID3只能对离散属性的数据集构造决策树
CART1984Gini系数支持可以进行分类和回归,可以处理离散属性,也可以处理连续的。
C4.51993信息增益率支持优化后解决了ID3分支过程中总喜欢偏向取值较多的属性
3.2 DecisionTreeClassifier和DecisionTreeRegressor重要参数对比
参数DecisionTreeClassifierDecisionTreeRegressor
特征选择标准criterion“gini”或者”entropy” ,前者代表基尼系 数,后者代表信息增益。一默认”gini” , 即CART算法。“mse”或者”mae” ,前者是均方差, 后者是和均值之差的绝对值之和。 默认”mse”比”mae”更加精确。
特征划分点选择标准splitter“best”或者”random”。前者在特征的所有划分点中找出最优的划分点。后者 是随机的在部分划分点中找局部最优的划分点。 默认的”best”适合样本量不大的,而如果样本数据量非常大,此时决策树构 建推荐”random”。同 DecisionTreeClassifier
划分时考虑的最大特征数 max_features可使用很多种类型的值,默认”None”划分时考虑所有的特征数; “log2”划分 时最多考虑log2N个特征; 如果是”sqrt”或者”auto”意味着划分时最多考虑img个特征。 如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特 征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。 如果样本特征数不多(<50)用默认的”None”。同 DecisionTreeClassifier
3.3 决策树剪枝(防止过拟合)
  • 为什么要剪枝:
    随着树的增长, 在训练样集上的精度是单调上升的, 然而在独立的测试样例上测出的精度先上升后下降。

    原因1:噪声、样本冲突,即错误的样本数据。
    原因2:特征即属性不能完全作为分类标准。(数据中属性不全)
    原因3:巧合的规律性,数据量不够大。
    
  • 预剪枝(Pre-Pruning)

    设置规则避免过度生长:
        信息增益(率)少于阈值,不再分裂
        节点样本少于阈值(例如1%)不再分裂
        如果分裂后的叶子节点样本数少于阈值(0.5%例如)就不能分裂
        树的深度大于阈值(例如8层)就不再分裂
    
  • 后剪枝(Post-Pruning)

    先让决策树生长成一棵大树(过拟合)
    从下往上依次判断:如果剪掉子树,能否让验证集误差下降,若可以就剪
    
    主要有四种:
        (1)REP-错误率降低剪枝
        (2)PEP-悲观剪枝
        (3)CCP-代价复杂度剪枝
        (4)MEP-最小错误剪枝
    

这里写图片描述

四 DecisionTree方法 代码演示

sklearn.tree.DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
DecisionTreeClassifier(
                        criterion = 'gini',
                        splitter = 'best',
                        max_depth = None,
                        mix_samples_split = 2,
                        mix_samples_leaf = 1,
                        min_weight_fraction_leaf = 0.0,
                        max_features = None,
                        random_sample_leaf = 1,
                        max_leaf_nodes = None,
                        min_impurity_split = 1e-07,
                        class_weight = None,
                        presort = False
                        )
    一些重要的参数:
    criterion           --gini,'emtropy'    最佳分类标准
    max_depth           --树深
    min_samples_split   --节点继续往下分裂最小样本要求
    min_samples_leaf    --叶子节点的最小样本数要求
    min_impurity_split  --预剪枝时节点不纯度'impurity',低于此阈值就不在分裂

    #决策树可视化
    sklearn.tree.export_graghviz
    把决策树模型导出为DOT格式,然后可以可视化查看
    from IPython,display import Image
    import pydotplus
    dot_data = tree.export_graghviz(
                                    dtree,
                                    out_file = None,
                                    feature_names = iris.feature_names,
                                    class_names = iris.target_names,
                                    filled = True,rounded = True,
                                    special_characters = True
                                    )
    graph = pydotplus.gragh_from_dot_data(dot_data)
    Image(gragh.crate_png())
决策树算法是一种广泛应用于分类和回归的机器学习算法,它基于树形结构对样本进行分类或预测。决策树算法的主要思想是通过一系列的判断来对样本进行分类或预测。在决策树中,每个节点表示一个属性或特征,每个分支代表该属性或特征的一个取值,而每个叶子节点代表一个分类或预测结果。 决策树算法的训练过程主要包括以下步骤: 1. 特征选择:根据某种指标(如信息增益或基尼系数)选择最优的特征作为当前节点的分裂属性。 2. 决策树生成:根据选择的特征将数据集分成若干个子集,并递归地生成决策树。 3. 剪枝:通过剪枝操作来提高决策树的泛化性能。 决策树算法的优点包括易于理解和解释、计算复杂度较低、对缺失值不敏感等。但是,决策树算法也存在一些缺点,如容易出现过拟合、对离散数据敏感等。 下面是一个决策树算法的案例:假设我们要根据一个人的年龄、性别、教育程度和职业预测其收入水平(高于或低于50K)。首先,我们需要将这些特征进行编码,将其转换为数值型数据。然后,我们可以使用决策树算法对这些数据进行训练,并生成一个决策树模型。最后,我们可以使用该模型对新的数据进行分类或预测。例如,根据一个人的年龄、性别、教育程度和职业,我们可以使用决策树模型预测该人的收入水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SongpingWang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值