机器学习-决策树

机器学习之决策树

概念
  • 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。
决策树的基本术语
  • 决策树属于也只能非参数学习算法、可以用于解决(多)分类问题,回归问题。 回归问题的结果,叶子结点的平均值是回归问题的解。
  • 根决策节点:决策树具有数据结构里面的二叉树、树的全部属性
  • 决策节点 :(决策点) 代表测试的条件,数据的属性的测试
  • 叶子节点 :分类后获得分类标记
  • 分支: 测试的结果
    机器学习-决策树_第1张图片
数学问题-熵-Gini系数
  • 什么是熵:熵的概念源于物理学,用于度量一个热力学系统的无序程度。
  • 信息熵:信息论里面的知识,是度量样本集合纯度最常用的一种指标。在信息论里面,信息熵衡量信息量的大小,也就是对随机变量不确定度的一个衡量。熵越大,不确定性越大。
  • 对于某个单符号无记忆信源,发出符号(xi)的概率是pi,概率越大,符号的信息量就越小,香农公式 I(xi)=−logpiI(xi)=−logpi。信源所含的信息熵就是信息量的期望
  • H(x)=−∑pi∗logpi
  • Gini系数: Gimi§=1−∑Kk=1p2k
  • 信息增益:
    机器学习-决策树_第2张图片
决策树如何构建-(ID3算法为例)
基于信息熵的构造
  • 当选择某个特征作为节点时,我们就希望这个特征的信息熵越小越好,那么不确定性越小

  • njnj: 第j个类别,在样本中出现的频数

  • SS: 样本个数

  • 对于离散属性,直接计算信息熵,连续属性,就需要划分区间,按区间计算信息熵。

    1 .基于某一层的数据集 a. 遍历计算所有属性,遍历相应属性以不同值为分截点的信息熵 b. 选择信息熵最小的作为节点
    2. 如果到达终止条件,返回相应信息,否则,按照分支重复步骤1

ID3算法: 信息增益最大化

机器学习-决策树_第3张图片
这里我就以网上给出的数据为例,给出根据信息熵构成决策树的计算过程。
机器学习-决策树_第4张图片
3.确定特征,统计属性值和分解结果,总共四个特征,四种特征的统计结果如下图:
机器学习-决策树_第5张图片
4.根据历史数据,在不知道任何情况下,计算数据本身的熵为
在这里插入图片描述
5.计算每个特征作为节点的信息熵
机器学习-决策树_第6张图片

信息增益率
  • 如果这里考虑了一列ID,每个ID出现一次,所以算出的信息增益大。
  • H(x)=0,信息增益最大化了,可以引入信息增益率
    在这里插入图片描述
CART:基尼(Gini)系数
  • 对随机变量不确定性的一个衡量,gini越大,不确定性越大
决策树特点
决策树特点:ID3算法
  • ID3是基本的决策树构建算法,作为决策树经典的构建算法,其具有结构简单、清晰易懂的特点。
  • 虽然ID3比较灵活方便,但是有以下几个缺点:
    (1)采用信息增益进行分裂,分裂的精确度可能没有采用信息增益率进行分裂高
    (2)不能处理连续型数据,只能通过离散化将连续性数据转化为离散型数据
    (3)不能处理缺省值
    (4)没有对决策树进行剪枝处理,很可能会出现过拟合的问题
决策树特点:C4.5和CART算法(1)
  • 连续值属性处理
    将属性取值进行排序,按大于t和小于t分为两个子集,划分点t由最大化信息增益来确 定,需要注意的是,对于连续属性,该属性可在决策树中多次使用。

  • 缺省值属性处理
    (1)如果缺省的属性是连续的数值,使用平均数、中位数等进行填充
    (2)对于缺测的数据,分别用该属性的其他数值进行填充,并且给予每一个填充出来的样本不同的权重,权重根据每一个种类的样本数量进行计算(例如:样本颜色未知,已知的颜色分类有红、黄、蓝,三种分类样本数量分别为2、3、5,则填充出来的样本一共有三个,权重分别为2/10,3/10,5/10)

决策树特点:ID3、C4.5和CART算法
  • 三种划分属性选择指标:
    (1) 信息增益Gain(D,a):
    信息增益越大,纯度提升越高,可以用最高信息增益选择属性。
    缺点:属性可取值越多,得到的信息熵越大,用其划分后信息增益越高,故此方法对属性可取值更多的属性有所偏好
    (2) 增益率Gain_ratio(D,a):
    信息增益除以属性的固有值(以属性a做随机变量,由集合中a属性各个取值所占的比例计算的信息熵),a可取数值越多,固定值越大,在一定程度上抑制了上述偏好
    缺点:对可取数值较小的属性有偏好。故实际上,采用先找信息增益高于平均水平的属性,再从中找增益率高的
    (3) 基尼指数Gini(D):
    从集合中随机抽取两个样本,其类别不一致的概率。概率越小,基尼指数越大,数据集纯度越高。
  • 决策树常用算法比较
    机器学习-决策树_第7张图片
决策树的过拟合问题
  • 预防过拟合的方法:剪枝
  1. 预剪枝:结点划分前,若划分不能带来泛化性能提高,就停止划分标为叶结点。性能提高的判断由划分前后验证集的精度决定。
    优点:分支较少,减小过拟合风险,也减少了训练时间开销和测试时间开销
    缺点:带来了欠拟合的风险(当前划分虽不能提升泛化能力,但继续划分呢?)
  2. 后剪枝:生成完整的决策树后自底向上对非叶结点考察,若替换为叶结点能带来泛化性能提升,则替换。
    优点:比预剪枝分支多,欠拟合风险小,泛化性能往往优于预剪枝
    缺点:训练时间开销大得多
集成学习:通过随机森林提高准确率
  • 决策树是建立在已知的历史数据及概率上的,一课决策树的预测可能会不太准确,提高准确率最好的方法是构建随机森林(Random Forest)。
  • 所谓随机森林就是通过随机抽样的方式从历史数据表中生成多张抽样的历史表,对每个抽样的历史表生成一棵决策树。由于每次生成抽样表后数据都会放回到总表中,因此每一棵决策树之间都是独立的没有关联。将多颗决策树组成一个随机森林。当有一条新的数据产生时,让森林里的每一颗决策树分别进行判断,以投票最多的结果作为最终的判断结果。以此来提高正确的概率。
决策树的优缺点
  • 决策树算法的优点:
     1. 简单直观,生成的决策树很直观。
     2. 既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。
     3. 可以处理多维度输出的分类问题。
     4. 相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释
     5. 可以交叉验证的剪枝来选择模型,从而提高泛化能力。
     6. 对于异常点的容错能力好,健壮性高。
  • 决策树算法的缺点:
     1. 决策树算法容易过拟合:通过设置节点最少样本数量、不纯度/熵阈值、限制决策树深度来改进。
     2. 决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变:通过随机森林等算法。
     3. 寻找最优的决策树是一个NP难题,通过启发式方法,容易陷入局部最优:通过随机森林算法等方法改善。
     4. 有些比较复杂的关系,决策树很难学习,一般通过神经网络等方法解决。
     5. 如果某些特征的样本比例过大,生成决策树容易偏向于这些特征:可通过调节样本权重来改善。
决策树算法python调库实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.decomposition import PCA

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取数据集
data = load_breast_cancer()
X = data.data
y = data.target

X -= np.mean(X,axis=0)
X /= np.std(X,axis=0,ddof=1)

# PCA算法进行数据压缩
pca = PCA(n_components=2)
X = pca.fit_transform(X)

# 创建模型
c_tree5 = DecisionTreeClassifier(max_depth=5)
c_tree2 = DecisionTreeClassifier(max_depth=2)

# 训练模型
c_tree5.fit(X,y)
c_tree2.fit(X,y)

# 打印准确率
print('max_depth=5的准确率:',c_tree5.score(X,y))
print('max_depth=2的准确率:',c_tree2.score(X,y))

#画图
plt.scatter(X[y==0,0],X[y==0,1],label='0')
plt.scatter(X[y==1,0],X[y==1,1],label='1')
plt.legend()
plt.show()

#打印结果
max_depth=5的准确率: 0.9806678383128296
max_depth=2的准确率: 0.9244288224956063

图形展示如下:

机器学习-决策树_第8张图片

你可能感兴趣的:(机器学习,决策树,有监督学习,ID3)