当前位置:   article > 正文

决策树分类器(DecisionTreeClassifier)

decisiontreeclassifier

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

决策树学习是以实例为基础的归纳学习

决策树学习采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一棵熵值下降最快的树。到叶子节点的处的熵值为零,此时每个叶结点中的实例都属于同一类。

最近在学习决策树的分类原理(DecisionTreeClassifier),决策树的划分依据之一是信息增益。
决策树的criterion可以选择’gini‘或者是’entropy‘。

基尼系数:
基尼系数:

信息熵:

在这里插入图片描述

决策树实例(entropy):

下表记录小明每一次考试的状态与成绩好坏的关系

复习睡眠质量饱腹状态情绪成绩
开心
开心
伤心
饿伤心
饿开心
无感
无感
import pandas as pd
from sklearn import tree
import numpy as np
import graphviz

df = pd.DataFrame(columns=['复习', '睡眠质量', '饱腹状态', '情绪', '成绩'],
                  data={'复习': ['有', '有', '有', '无', '无', '有', '有'],
                        '睡眠质量': ['好', '差', '差', '差', '好', '好', '差'],
                        '饱腹状态': ['饱', '饱', '饱', '饿', '饿', '饱', '饱', ],
                        '情绪': ['开心', '开心', '伤心', '伤心', '开心', '无感', '无感', ],
                        '成绩': ['好', '差', '好', '差', '好', '好', '差']})
print(df)

for i in ['复习', '睡眠质量', '饱腹状态', '情绪', '成绩']:
    labels = df[i].unique().tolist()  # 处理数据成二三分类
    df[i] = df[i].apply(lambda x: labels.index(x))

print(df)

df1 = df.drop(['成绩'], axis=1)

x_data = np.array(df1)
y_target = np.array(df['成绩'])
print(y_target)

model = tree.DecisionTreeClassifier(criterion='entropy')
model = model.fit(x_data, y_target)

dot_data = tree.export_graphviz(model,
                                feature_names=['Review', 'Sleep quality', 'Full state', 'Mood'],
                                filled=True,
                                rounded=True

                                )
graph = graphviz.Source(dot_data)

graph.view()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

在这里插入图片描述

颜色越深,代表的不纯度指标越低,就是数据越纯

比如第一个节点中values=[4,3],睡眠质量好的有3个,睡眠质量差的有4个,第一个节点的分类依据是Sleep quality

有些数学符号打不出来,我用代码写出来

#第一个entropy
-((4/7)*math.log2(4/7)+(3/7)*math.log2(3/7))=0.9852281360342516
#第二个entropy
-((3/4)*math.log2(3/4)+(1/4)*math.log2(1/4))=0.8112781244591328
#第三个entropy
-((2/3)*math.log2(2/3)+(1/3)*math.log2(1/3))=0.9182958340544896
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

决策树划分依据(entropy):

决策树以信息熵增益最大进行划分,继续以上面的表为例

下面计算第一个节点划分原理(log2用log代替)

H(x)=-[(4/7)*log(4/7)+(3/7)*log(3/7)]=0.9852281360342516
H(睡眠)=-[(3/7)*[(3/3)*log(3/3)+(0/3)*log(0/3)]]=0.4635
H(饱腹)=-[(5/7)*[(3/5)*log(3/5)+(2/5)*log(2/5)]+(2/7)*[(1/2)*[(1/2)*log(1/2)+(1/2)*log(1/2)]]]=-0.9792504246104775
H(复习)=-[(5/7)*[(3/5)*log(3/5)+(2/5)*log(2/5)]+(2/7)*[(1/2)*[(1/2)*log(1/2)+(1/2)*log(1/2)]]]=-0.9792504246104775
H(情绪)=-[(3/7)*[(2/3)*log(2/3)+(1/3)*log(1/3)]+(2/7)*[(1/2)*log(1/2)+(1/2)*log(1/2)]+(2/7)*[(1/2)*log(1/2)+(1/2)*log(1/2)]]=
0.9649839288804954
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

信息增益:
IG (T)=H (X)-H (X|T)
H(x)-H(睡眠)时,信息增益最大,所以第一个节点以睡眠质量划分

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/330946
推荐阅读
相关标签
  

闽ICP备14008679号