人智导(十一):有指导学习(Ⅰ)
有指导学习
- AI本质上,如何发现算法:
问题示例(作为输入)/目标示例(作为输出) ⇒ \Rightarrow ⇒学习系统 ⇒ \Rightarrow ⇒(构建模型)自动生成算法或程序 ⇒ \Rightarrow ⇒(模型应用)实际问题 - 还可以用于分类任务
训练数据样本 ⇒ \Rightarrow ⇒训练器 ⇒ \Rightarrow ⇒分类模型 - 学习算法的种类(根据学习模型的表示)
- 树结构表示:决策树方法
- 规则表示:基于规则的方法
- 函数表示:线性非线性回归方法
- 概率形式表示:贝叶斯方法
- 网络结构表示:神经网络方法
决策树归纳方法
一个例子
给定数据(Cheat为类标记),生成相应的决策树
基于同样的训练数据,可以生成不同的决策树
决策树归纳算法
- ID3算法
- 对样例表中特征属性值离散化(连续值转换为离散值)
- 根据贪心策略,初始选择最重要的特征属性作为根节点,基于其值来分割样例表
- 一个迭代的过程,同样策略扩展树的后继节点
- 满足一定约束条件即通知继续分割样例表(叶节点)
- 所有的样例都属于同一类别或不再进行属性选择继续分割(多数表决来决定属于哪类)
- 算法的关键:如何度量特征属性的重要性(信息增益方法)
决策树模型的构建
以购买计算机的训练集为例
- 信息增益法:选择最重要(相关)的属性
- 有两个类:P(买计算机)N(不买计算机)
- 训练集 D = ( p , n ) D=(p,n) D=(p,n)中14个顾客 p = 9 , n = 5 p=9, n=5 p=9,n=5(分别为买与不买)
- 这14个顾客分类提供的信息量(信息熵)计算: E ( D = ( p , n ) ) = − p p + n l o g 2 p p + n − n p + n l o g 2 n p + n = 0.94 E(D=(p,n))=-\frac{p}{p+n}log_2\frac{p}{p+n}-\frac{n}{p+n}log_2\frac{n}{p+n}=0.94 E(D=(p,n))=−p+nplog2p+np−p+nnlog2p+nn=0.94
- 信息量一般形式: I ( x ) = − l o g 2 p ( x ) , x ∈ X I(x)=-log_2p(x), x\in X I(x)=−log2p(x),x∈X x x x事件发生越不确定,信息量就越大
- 信息熵(entropy): E ( X ) = − Σ x ∈ X p ( x ) l o g 2 p ( x ) E(X)=-\Sigma_{x\in X}p(x)log_2p(x) E(X)=−Σx∈Xp(x)log2p(x) x x x事件越不可预测,熵值越大
- 例如抛硬币,
p
(
X
=
h
e
a
d
)
=
p
(
X
=
t
a
i
l
)
=
1
2
,
E
(
X
)
=
−
1
2
l
o
g
2
1
2
−
1
2
l
o
g
2
1
2
=
1
p(X=head)=p(X=tail)=\frac{1}{2},~E(X)=-\frac{1}{2}log_2\frac{1}{2}-\frac{1}{2}log_2\frac{1}{2}=1
p(X=head)=p(X=tail)=21, E(X)=−21log221−21log221=1
比如在购买计算机的数据集中,计算年龄的信息增益:
age | p i p_i pi | n i n_i ni | E ( p i , n i ) E(p_i, n_i) E(pi,ni) |
---|---|---|---|
≤ 30 \le 30 ≤30 | 2 | 3 | 0.971 |
30 … 40 30\dots 40 30…40 | 4 | 0 | 0 |
> 40 >40 >40 | 3 | 2 | 0.971 |
E
(
D
=
(
p
,
n
)
∣
A
)
=
Σ
i
=
1
v
p
i
+
n
i
p
+
n
E
(
D
i
=
(
p
i
,
n
i
)
)
E(D=(p,n)|A)=\Sigma^v_{i=1}\frac{p_i+n_i}{p+n}E(D_i=(p_i,n_i))
E(D=(p,n)∣A)=Σi=1vp+npi+niE(Di=(pi,ni))
E
(
D
∣
a
g
e
)
=
5
14
E
(
2
,
3
)
+
4
14
E
(
4
,
0
)
+
5
14
E
(
3
,
2
)
=
0.694
E(D|age)=\frac{5}{14}E(2,3)+\frac{4}{14}E(4,0)+\frac{5}{14}E(3,2)=0.694
E(D∣age)=145E(2,3)+144E(4,0)+145E(3,2)=0.694
属性信息增益(Gain)为
G
a
i
n
(
A
)
=
E
(
D
)
−
E
(
D
∣
A
)
Gain(A)=E(D)-E(D|A)
Gain(A)=E(D)−E(D∣A)
信息增益越大,属性就越重要(相关)
attr | Gain |
---|---|
age | 0.246 |
income | 0.029 |
student | 0.151 |
credit_rating | 0.048 |
构建后的决策树如下图:
转化为规则集:
- I F a g e = " ≤ 30 " A N D s t u d e n t = " n o " T H E N b u y s _ c o m p u t e r = " n o " IF~age="\le 30"~AND~student="no"~THEN~buys\_computer="no" IF age="≤30" AND student="no" THEN buys_computer="no"
- I F a g e = " ≤ 30 " A N D s t u d e n t = " y e s " T H E N b u y s _ c o m p u t e r = " y e s " IF~age="\le 30"~AND~student="yes"~THEN~buys\_computer="yes" IF age="≤30" AND student="yes" THEN buys_computer="yes"
- I F a g e = " 31 … 40 " T H E N b u y s _ c o m p u t e r = " y e s " IF~age="31\dots 40"~THEN~buys\_computer="yes" IF age="31…40" THEN buys_computer="yes"
- I F a g e = " > 40 " A N D c r e d i t _ r a t i n g = " e x c e l l e n t " T H E N b u y s _ c o m p u t e r = " y e s " IF~age=">40"~AND~credit\_rating="excellent"~THEN~buys\_computer="yes" IF age=">40" AND credit_rating="excellent" THEN buys_computer="yes"
- I F a g e = " > 40 " A N D c r e d i t _ r a t i n g = " f a i r " T H E N b u y s _ c o m p u t e r = " n o " IF~age=">40"~AND~credit\_rating="fair"~THEN~buys\_computer="no" IF age=">40" AND credit_rating="fair" THEN buys_computer="no"
决策树的生成
- 贪心策略+分治策略
- 树生成过程中的典型问题
- 迭代分割过程中样例数据趋少,导致生成的决策树过于拟合训练样例
- 过拟合:低偏差,高方差
- 树剪枝:避免过拟合,提高泛化能力
泛化误差与剪枝
- 剪枝:树构建过程中裁剪分支
- 异常阈值(exception threshold):样例数目小于阈值,返回类分布
- 分类阈值:当属于某一类的样例所占比例超过给定阈值,划分即停止
- 计算泛化误差进行剪枝
- 训练误差:训练集产生的偏差 e ( t ) e(t) e(t)
- 泛化误差:测试集产生的偏差 e ′ ( t ) e'(t) e′(t)
- 泛化误差评估方法:
e
′
(
t
)
=
e
(
t
)
+
N
×
0.5
e'(t)=e(t)+N\times 0.5
e′(t)=e(t)+N×0.5 N:叶节点数目
- 对于一个决策树,有30个叶节点且在训练集中1000个样例中有10个错误的分类,则
- 训练误差: 10 1000 = 1 % \frac{10}{1000}=1\% 100010=1%
- 泛化误差: ( 10 + 30 × 0.5 ) / 1000 = 2.5 % (10+30\times 0.5)/1000=2.5\% (10+30×0.5)/1000=2.5%
决策树归纳算法的变体
- 允许处理连续值的属性、处理遗失属性值的情况
- 特征属性组合、重构
- 特征选择的其它度量方法
- 增益率(Gain Ratio),基尼系数(Gini Index)等等
- 变体版本:
- ID3, C4.5, C5.0
- Hunt’s Algorithm, CART
- SLIQ, SPRINT
集成学习方法
集成学习方法(Ensemble Approach)
- 通过训练数据构建一组模型
- 通过构建的多个模型(基分类器),组合为未分类的数据进行分类
- 改善预测效果的通用性技术(提高准确度,降低方差)
- 两种类型方法:Bagging 和 Boosting
Bagging方法
并行构建基分类器(如下图)
- 带回放采样
- 通过采样得到的不同的自助样本集(bootstrap),构建各自对应的模型
- 算法描述:
Let k be the number of bootstrap samples set
For i=1 to k do
Create a bootstrap sample Di of size N;
Train a (base) classifier Ci on Di;
End for C*
- 其中 C ∗ = a r g m a x y Σ i I ( C i = y ) C*=arg~max_y\Sigma_iI(C_i=y) C∗=arg maxyΣiI(Ci=y)
- Bagging:构建一组基分类器-弱分类器,组合进行分类预测
- 随机森林(random forest):一种特殊的Bagging,采用决策树构建基分类器(small tree);避免基分类模型的高相关性,每次随机选择p个属性中的m个属性构建决策树( m ≈ p m\approx \sqrt{p} m≈p或 l o g 2 p log_2p log2p等)
Boosting方法
- 通过迭代的方法自主变化训练样本数据的分布,更多地集中在之前分类错误的数据
- 每一个训练样例都被分配一个权重
- 每一轮boosting后训练样例的权重都可以发生变化:分类错的样例权重增加,分类对的样例权重则降低
如上图,“4”较难被正确分类,其权重被增加,使其在后续boosting轮选样能再次被选中
boosting过程示意图如下,注意是迭代地生成一组基分类模型(串行过程)
AdaBoosting算法:
(
x
j
,
y
j
)
(x_j,y_j)
(xj,yj)表示:一个包含
N
N
N个训练样例的数据集
(
j
=
1
,
…
,
N
)
(j=1, \dots ,N)
(j=1,…,N)
一个生成的基分类模型
C
i
C_i
Ci,其错误率:
ϵ
i
=
1
N
[
Σ
j
=
1
N
w
j
I
(
C
i
(
x
j
)
≠
y
i
)
]
\epsilon_i=\frac{1}{N}[\Sigma^N_{j=1}w_jI(C_i(x_j)\ne y_i)]
ϵi=N1[Σj=1NwjI(Ci(xj)=yi)]
其中如果
p
p
p为真,则
I
(
p
)
=
1
I(p)=1
I(p)=1;否则
I
(
p
)
=
0
I(p)=0
I(p)=0
一个生成的基分类模型
C
i
C_i
Ci其重要程度:
α
i
=
1
2
[
l
n
(
1
−
ϵ
i
ϵ
i
)
]
\alpha_i = \frac{1}{2}[ln(\frac{1-\epsilon_i}{\epsilon_i})]
αi=21[ln(ϵi1−ϵi)]
w
i
(
j
)
w^{(j)}_i
wi(j):表示样例
(
x
i
,
y
i
)
(x_i, y_i)
(xi,yi)在第
j
j
j轮的权重
样例的权重以如下方式进行修改
w
i
(
j
+
1
)
=
W
i
(
j
)
Z
j
×
e
−
a
j
i
f
C
j
(
x
i
)
=
y
i
w^{(j+1)}_i=\frac{W^{(j)}_i}{Z_j}\times e^{-a_j}~if~C_j(x_i)=y_i
wi(j+1)=ZjWi(j)×e−aj if Cj(xi)=yi
w
i
(
j
+
1
)
=
W
i
(
j
)
X
j
×
e
a
j
i
f
C
j
(
x
i
)
≠
y
i
w^{(j+1)}_i=\frac{W^{(j)}_i}{X_j}\times e^{a_j}~if~C_j(x_i)\ne y_i
wi(j+1)=XjWi(j)×eaj if Cj(xi)=yi
其中
Z
j
Z_j
Zj是规范化因子:
Σ
i
w
i
(
j
+
1
)
=
1
\Sigma_iw^{(j+1)}_i=1
Σiwi(j+1)=1
算法描述:
Initialize the weights for all N examples as equation1
Let k be the number of boosting rounds, D is the set of all examples
For i=1 to k do
Cretae training set Di by sampling from D according to W
Train a base classifier Ci on Di
Apply Ci to all examples in the original set D
Update the weight of each example
End for C*
C ∗ ( x ) = a r g m a x y Σ j = 1 K α j I ( C j ( x ) = y ) C*(x)=arg~max_y\Sigma^K_{j=1}\alpha_jI(C_j(x)=y) C∗(x)=arg maxyΣj=1KαjI(Cj(x)=y)