03.有监督算法——决策树

1.决策树算法

决策树算法可以做分类,也可以做回归

决策树的训练与测试:

训练阶段:从给定的训练集构造出一棵树(从根节点开始选择特征,如何进行特征切分)

测试阶段:根据构造出来的树模型从上到下走一遍

一旦决策树构建好了,那么分类或预测任务就变得简单。难点在于如何构造出一颗树。或者说难点在于如何对数据特征进行重要程度的排序。

建立决策树的关键在于在当前状态下选择哪个属性作为分类依据。根据不同的目标函数,建立决策树主要有以下三种算法:

1.1. ID3(Iterative Dichotomiser)

熵:表示随机变量不确定性的度量,可以理解成物体内部的混乱程度。

信息熵:
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ⁡ 2 ∣ C k ∣ ∣ D ∣ {\rm{H(D) = - }}\sum\limits_{{\rm{k}} = 1}^K {{{|{C_{_k}}|} \over {|D|}}{{\log }2}} {{|{C{_k}}|} \over {|D|}} H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣

其中,K是类别,D是数数据集,C~k~是类别K下的数据集。

信息增益:表示特征X使得类Y的不确定性减小的程度(表示分类后的专一性,希望分类后的结果是同类在一起)

条件熵
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) {\rm{H(D|A) = }}\sum\limits_{{\rm{i}} = 1}^n {{{|{D_i}|} \over {|D|}}H({D_i})} H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)

其中,A是特征,i是特征取值。

信息增益构造决策树的步骤

1.根据不同分类特征,求出信息增益,并找出信息增益最大的特征作为当前的决策结点

2.更新子集,在自己中选取新的特征,求信息增益的最大的特征

3.若划分的子集只包含单一特征,则为分支的叶子结点

缺点

  • ID3没有剪枝策略,容易过拟合;
  • 信息增益准则对可取值数目较多的特征有所偏好,类似"编号"的特征其信息增益接近于1;
  • 只能用于处理离散分布的特征;
  • 没有考虑缺失值。

这么多缺点,那么有没有改进呢------C4.5

1.2. C4.5

C4.5是ID3算法的改进 。相比ID3 选择属性用的是子树的信息增益,C4.5用的是信息增益率

此外,C4.5还有以下用途

  • 在决策树构造过程中,进行剪枝
  • 对非离散数据也能进行处理
  • 还能处理不完整数据

信息增益: g ( D , A ) = H ( D ) − H ( D ∣ A ) g({\rm{D,A}}){\rm{ = H(D) - H(D|A)}} g(D,A)=H(D)−H(D∣A)

信息增益率: g R ( D , A ) = g ( D , A ) H A ( D ) {g_R}({\rm{D,A}}){\rm{ = }}{{g(D,A)} \over {{H_A}(D)}} gR(D,A)=HA(D)g(D,A)

其中,公式 H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ⁡ 2 ∣ C k ∣ ∣ D ∣ {\rm{H(D) = - }}\sum\limits_{{\rm{k}} = 1}^K {{{|{C_{_k}}|} \over {|D|}}{{\log }2}} {{|{C{_k}}|} \over {|D|}} H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣,n是特征A的取值个数

注意:决策树 过拟合风险很大,理论上可以将数据完全分开。所以为了防止过拟合,就要进行剪枝操作:

  • 预剪枝:边建立决策树边进行剪枝的操作
  • 后剪枝:当建立完决策树 后进行剪枝操作

后剪枝:通过一定的衡量标准,具体来说:C4.5采用的悲观剪枝方法,用递归的方式从低往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这课子树是否有益。如果剪枝后与剪枝前相比其错误率是保持或者下降,则这棵子树就可以被替换掉。

后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树

1.3. CART(Classification And Regression Tree)

Classification And Regression Tree(CART)是决策树中的一种。

这种决策树用基尼指数来选择属性(分类),或者用均方差来选择属性(回归)。

基尼指数:

G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) {\rm{G}}ini(p) = \sum\limits_{k = 1}^K {{p_k}} (1 - {p_k}) Gini(p)=k=1∑Kpk(1−pk)

如果目标变量是离散的,称为分类树。最后取叶子结点的众数做分类结果。

如果目标变量是连续的,称为回归树。连续性目标没有类别概念,因此不能用熵进行计算,但是我们可以考虑另一种衡量物体内部混乱程度的指标:方差

对于任意划分特征A,对应的任意划分点s两边划分成数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小所对应的特征和特征值划分点。表达式为:

min ⁡ a , s [ min ⁡ c 1 ∑ x i ∈ D 1 n ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ D 2 n ( y i − c 2 ) 2 ] {\min {a,s}}[{\min {{c_1}}}\sum\limits{{x_i} \in {D_1}}^n {{{({y_i} - {c_1})}^2} + {{\min }{c2}}\sum\limits_{{x_i} \in {D_2}}^n {{{({y_i} - {c_2})}^2}} } ] a,smin[c1minxi∈D1∑n(yi−c1)2+minc2xi∈D2∑n(yi−c2)2]

其中, c 1 {{c_1}} c1为 D 1 {{D_1}} D1数据集的样本输出均值, c 2 {{c_2}} c2为 D 2 {{D_2}} D2数据集的样本输出均值

相关推荐
songroom11 分钟前
Rust: offset祼指针操作
开发语言·算法·rust
chenziang12 小时前
leetcode hot100 环形链表2
算法·leetcode·链表
Captain823Jack4 小时前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
Captain823Jack4 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
是小胡嘛5 小时前
数据结构之旅:红黑树如何驱动 Set 和 Map
数据结构·算法
itwangyang5205 小时前
AIDD - 从机器学习到深度学习:蛋白质-配体对接评分函数的进展
人工智能·深度学习·机器学习
jerry2011085 小时前
机器学习常用术语
人工智能·机器学习
m0_748255025 小时前
前端常用算法集合
前端·算法
IT古董5 小时前
【机器学习】机器学习的基本分类-强化学习-Actor-Critic 方法
人工智能·机器学习·分类
呆呆的猫5 小时前
【LeetCode】227、基本计算器 II
算法·leetcode·职场和发展