预备知识
1、什么是凸函数?
对区间
[
a
,
b
]
[a, b]
[a,b]上定义的函数
f
f
f,若它对区间中任意两点
x
1
x_1
x1,
x
2
x_2
x2均有
f
(
x
1
+
x
2
2
)
≤
f
(
x
1
)
+
f
(
x
2
)
2
f(\frac{x_1 + x_2}{2} )\le \frac{f(x_1)+f(x_2)}{2}
f(2x1+x2)≤2f(x1)+f(x2),则称
f
f
f 为区间
[
a
,
b
]
[a, b]
[a,b]上的凸函数。
2、先验概率:事件
X
X
X的先验概率是统计得到的,即
p
(
X
)
p(X)
p(X)
后验概率:事件
X
X
X的后验概率为在观察到事件
Y
Y
Y发生后得到的概率,即
p
(
X
∣
Y
)
p(X|Y)
p(X∣Y)
绪论
分类:如果模型预测的是离散值,例如"好瓜",“坏瓜”,此类学习任务称为分类。
回归:如果模型预测的是连续值,例如甜度"0.75",“0.63”,此类学习任务称为回归。
分类和回归是监督学习的代表,聚类则是无监督学习的代表。
模型的评估与选择
1、错误率:分类错误的样本数占样本总数的比例称为错误率。
正确率acc:分类正确的样本数占样本总数的比例称为正确率。
2、误差error:把学习器在训练集上的误差称为“训练误差”或者“经验误差”(empirical error),在新样本上的误差称为“泛化误差”。很多情况下,我们想要得到一个经验误差最小化,在训练集上表现很好的学习器。
3、欠拟合怎么办:可以在训练神经网络的时候增加训练轮数。
过拟合怎么办:过拟合是无法彻底避免的
4、评估学习器的泛化误差的方法有
(1)留出法(hold-out):将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即
D
=
S
∪
T
,
S
∩
T
=
∅
D = S\cup T, S\cap T = \emptyset
D=S∪T,S∩T=∅。留出法一般要采用若干次随机划分,重复进行实验评估后取平均值作为留出法的评估结果。
(2)交叉验证法(cross validation):先将数据集D划分为
k
k
k个大小相似的互斥子集,即
D
=
D
1
∪
D
2
∪
D
3
.
.
.
.
∪
D
k
,
D
i
∩
D
j
=
∅
(
i
≠
j
)
D = D_1\cup D_2 \cup D_3....\cup D_k, D_i \cap D_j = \emptyset(i \neq j)
D=D1∪D2∪D3....∪Dk,Di∩Dj=∅(i=j)…
(3)自助法(bootstrpping)
自助法在数据集较小,难以有效划分训练/测试集时很有用。此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据足够时,留出法和交叉验证法更常用一些。
查准率、查全率、F1分数、PR曲线
真实情况 | 预测结果 | |
正例 | 反例 | |
正例 | TP(真正例) | FN(假反例) |
反例 | FP(假正例) | TN(真反例) |
- 查准率precision:查准率是相对预测结果为正例的样本来说的,就是说预测结果为正例的样本中有多少是真正的正例。
P = T P T P + F P P = \frac{TP}{TP + FP} P=TP+FPTP - 查全率recall: 查全率是针对真实情况来说的,就是说真实为正例的样本正有多少被预测出来了。
R = T P T P + F N R = \frac{TP}{TP+ FN} R=TP+FNTP
查准率(precision)和查全率是一对矛盾的度量。一般来说,查准率高的时候,查全率往往偏低;而查全率高时,查准率往往偏低。
- F1分数(F1-Score),又称为平衡 F 分数(BalancedScore),它被定义为精确率和召回率的调和平均数。
F 1 = 2 × p r e c i s i o n × r e c a l l p r e c i s i o n + r e c a l l F_1 = 2 \times \frac{precision\times recall}{precision + recall} F1=2×precision+recallprecision×recall
更一般的,我们定义 F β F_\beta Fβ分数为:
F β = ( 1 + β 2 ) ⋅ p r e c i s i o n ⋅ r e c a l l β 2 ⋅ p r e c i s i o n + r e c a l l F_\beta = (1+\beta^2)\cdot \frac{precision \cdot recall}{\beta^2 \cdot precision + recall} Fβ=(1+β2)⋅β2⋅precision+recallprecision⋅recall
除了F1分数之外,F0.5分数和F2分数,在统计学中也得到了大量应用,其中,F2分数中,召回率的权重高于精确率,而F0.5分数中,精确率的权重高于召回率。 - Macro-F1和Micro-F1
(1)Macro-F1和Micro-F1是相对于多标签分类而言的。
(2)Micro-F1,计算出所有类别总的Precision和Recall,然后计算F1。
(3)Macro-F1,计算出每一个类的Precison和Recall后计算F1,最后将F1平均。
医学数据挖掘中的灵敏度sensitivity、特异性specificity、阳性预测值PPV、阴性预测值NPV
s
e
n
s
i
t
i
v
i
t
y
=
r
e
c
a
l
l
=
T
P
T
P
+
F
N
sensitivity = recall=\frac{TP}{TP + FN}
sensitivity=recall=TP+FNTP
s
p
e
c
i
f
i
c
i
t
y
=
(
p
o
s
i
t
i
v
e
)
r
e
c
a
l
l
=
T
N
F
P
+
T
N
specificity=(positive)recall = \frac{TN}{FP+TN}
specificity=(positive)recall=FP+TNTN
灵敏度高,说明漏诊率低,特异性高,说明误诊率低。recall
是针对真实情况而言的。
P
P
V
=
p
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
PPV=precision=\frac{TP}{TP+FP}
PPV=precision=TP+FPTP
N
P
V
=
(
n
e
g
a
t
i
v
e
)
p
r
e
c
i
s
i
o
n
=
T
N
F
N
+
T
N
NPV=(negative)precision=\frac{TN}{FN+TN}
NPV=(negative)precision=FN+TNTN
阳性/阴性预测值是针对预测结果而言的。
ROC 和 AUC
ROC 叫受试者特征曲线,
AUC 是ROC曲线与坐标轴围起来的面积
ROC曲线的两个坐标轴都是查全率,一个是正例的查全率(真正例率),一个是假正例率(即 1 - 负例的查全率)
真
正
例
率
T
P
R
=
T
P
T
P
+
F
N
真正例率TPR=\frac{TP}{TP + FN}
真正例率TPR=TP+FNTP
假
正
例
率
F
P
R
=
F
P
T
N
+
F
P
假正例率FPR=\frac{FP}{TN + FP}
假正例率FPR=TN+FPFP
偏差、方差的分解
一个算法的期望泛化误差可以通过偏差-方差的分解得到:
E
(
f
;
D
)
=
E
D
[
(
f
(
x
;
D
)
−
f
ˉ
(
x
)
)
2
]
+
(
f
ˉ
(
x
)
−
y
)
2
+
E
D
[
(
y
D
−
y
)
2
]
E(f; D)=\mathbb{E} _D[(f(\bf{x}; D)-\bar{f}(\bf{x}))^2]+(\bar{f}(\bf{x})-y)^2+\mathbb{E} _D[(y_D-y)^2]
E(f;D)=ED[(f(x;D)−fˉ(x))2]+(fˉ(x)−y)2+ED[(yD−y)2]
也就是说,泛化误差可分解为偏差、方差和噪声之和。
- 偏差bias:度量了学习算法的期望预测和真实结果的偏离程度,即刻画了学习算法本身的拟合能力
- 方差variance:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响
- 噪声noise:表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界(也就是说误差再怎么也会大于这个值),即刻画了学习问题本身的难度
偏差、方差的分解说明,泛化性能是由学习算法的能力,数据的充分性以及学习任务本身的难度所共同决定的。
第三章 线性模型
线性模型和非线性模型的区别
按照周志华西瓜书的回答:线性模型试图学的一个通过属性的线性组合来进行预测的函数,即 f ( x ) = w 1 x 1 + w 2 x 2 + . . . + w d x d + b f(x)=w_1x_1+w_2x_2+...+w_dx_d+b f(x)=w1x1+w2x2+...+wdxd+b的函数,这个函数中的 x i x_i xi 代表的就是属性,说明线性模型并不是说模型的函数代表的是一条直线,同理,非线性模型也不是说模型函数代表的是一条曲线。如果模型的函数是属性的非线性组合的话,比如 f ( x ) = w 1 x 1 + w 2 x 1 x 2 + . . . + w d x d + b f(x)=w_1x_1+ \bm{w_2x_1x_2}+...+w_dx_d+b f(x)=w1x1+w2x1x2+...+wdxd+b中存在 w 2 x 1 x 2 \bm{w_2x_1x_2} w2x1x2项,这是属性的非线性组合。所以这个函数代表的模型是非线性模型。
同理,按照西瓜书的定义,线性回归是试图学得一个线性模型以尽可能准确地预测实值输出标记。说明线性回归是试图学的一个线性模型,说明线性这个词的理解也是指属性的线性组合。
那么非线性模型是什么呢,我的理解是线性模型的堆叠就可以构成非线性模型。比如多层感知机、深度神经网络等都满足上面的非线性模型的定义。当然还有一个易混的点是:线性模型是能够反应非线性关系的,这个非线性关系就是指的直线和曲线的区别了,比如加激活函数就可以让原本的线性关系变成非线性关系,或者增强原本的非线性关系。
线性回归、逻辑回归
(1)线性回归
用一条直线去划分离散点可以看成是一元线性回归,拟合一个多项式就是多元线性回归
一般的线性回归模型可以写成如下形式:
y
=
w
T
x
+
b
y = \bf{w}^T\bf{x}+b
y=wTx+b
(2)对数几率回归和广义线性回归
也就是令模型的预测值逼近
y
y
y 的衍生物,比如我们可以认为实例所对应的输出标记是在指数尺度上变化,那就可将输出标记的对数作为线性模型逼近的目标,即:
ln
y
=
w
T
x
+
b
\ln_{}{y} = \bf{w}^T\bf{x}+b
lny=wTx+b
上式从形式上仍然是线性回归,但是实质上已经是求取输入空间到输出空间的非线性函数映射。对于一个单调可微函数
g
(
⋅
)
g(\cdot)
g(⋅),由此可以推导出广义线性模型为:
y
=
g
−
1
(
w
T
x
+
b
)
y = g^{-1}( \bf{w}^T\bf{x}+b)
y=g−1(wTx+b)
(3)逻辑回归
逻辑回归其实就是分类,只要找一个单调可微的函数将广义线性回归模型中的
g
(
⋅
)
g(\cdot)
g(⋅)替换即可。
(4)线性判别分析LDA
LDA 是一种经典的降维方法,它是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”,即”类内数据扰动最小,类间数据扰动最大“,也即是要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
决策树(分类)
常见的决策树算法
1、ID3
使用信息增益准则选取特征
2、C4.5
使用增益率准则来选取特征
3、CART
使用基尼系数来选取特征
4、卡方决策树
4、GBDT(Gradient Boosting Decision Tree) 梯度提升决策树
GBDT
决策树的剪枝pruning
剪枝是为了防止过拟合
1、预剪枝
预剪枝采用贪心算法,它的分支更小,而且不需要预先训练处一棵完整的决策树。但是带来了欠拟合的风险。
2、后剪枝
支持向量机 SVM
SVM
1、什么是 SVM ?
2、 支持向量
3、对偶问题?
4、KKT条件
5、二次规划问题
6、核方法
核函数是一种避免在高维空间里进行繁琐计算的便捷算法(只是一个trick),不要以为是核函数使得低维空间的点映射到高维空间后实现了线性可分
前面的推论都是在假设训练样本是线性可分的,即存在一个划分超平面能将训练样本正确分类。然而现实任务中,原始样本空间内也许并不能存在一个能正确划分两类样本的超平面。对这样的问题,可将样本
x
i
x_i
xi从原始空间映射到一个更高维度的特征空间
ϕ
(
x
i
)
\phi (x_i)
ϕ(xi),使得样本在这个特征空间内线性可分。如下图所示:
如想要将红点和蓝点变成线性可分的,那么就将映射
y
=
x
y = x
y=x 变成映射
y
=
x
2
y = x^2
y=x2, 这样就线性可分了。
如何利用非线性映射将原始数据转化到高维空间中去?
有一个 3 维输入向量:
X
=
(
x
1
,
x
2
,
x
3
)
X = ( x_1 , x_2 , x_3 )
X=(x1,x2,x3) ,将其转化到 6 维空间
Z
Z
Z 中去:
ϕ
1
(
X
)
=
x
1
,
ϕ
2
(
X
)
=
x
2
,
ϕ
3
(
X
)
=
x
3
,
ϕ
4
(
X
)
=
x
4
,
ϕ
5
(
X
)
=
x
5
,
ϕ
6
(
X
)
=
x
6
\phi_1 (X)=x_1, \phi_2 (X)=x_2, \phi_3 (X)=x_3, \phi_4 (X)=x_4, \phi_5 (X)=x_5, \phi_6 (X)=x_6
ϕ1(X)=x1,ϕ2(X)=x2,ϕ3(X)=x3,ϕ4(X)=x4,ϕ5(X)=x5,ϕ6(X)=x6
新的决策超平面:
d
(
Z
)
=
W
Z
+
b
d (Z) = WZ + b
d(Z)=WZ+b,其中
W
W
W 和
Z
Z
Z 是向量,这个超平面是线性的。解出
W
W
W 和
b
b
b 之后,并且带入回原方程:
d
(
Z
)
=
w
1
x
1
+
w
2
x
2
+
w
3
x
3
+
w
4
(
x
1
)
2
+
w
5
x
1
x
2
+
w
6
x
1
x
3
+
b
=
w
1
z
1
+
w
2
z
2
+
w
3
z
3
+
w
4
z
4
+
w
5
z
5
+
w
6
z
6
+
b
d(Z)=w_1x_1 + w_2x_2 + w_3x_3 + w_4(x_1)^2+w_5x_1x_2+w_6x_1x_3+b =w_1z_1 + w_2z_2 + w_3z_3 + w_4z_4 + w_5z_5 + w_6z_6 + b
d(Z)=w1x1+w2x2+w3x3+w4(x1)2+w5x1x2+w6x1x3+b=w1z1+w2z2+w3z3+w4z4+w5z5+w6z6+b
使用核方法的动机
在线性 SVM 中转化为最优化问题时求解的公式计算都是以内积(dot product)形式出现的(西瓜书P126 式 6.21),其中
ϕ
(
X
)
\phi ( X )
ϕ(X) 是把训练集中的向量点转化到高维的非线性映射函数,因为内积的算法复杂度非常大,所以利用核函数来取代计算非线性映射函数的内积。以下核函数和非线性映射函数的内积等同,但核函数
κ
(
⋅
,
⋅
)
\kappa(\cdot, \cdot)
κ(⋅,⋅) 的运算量要远少于求内积:
K
(
X
i
,
X
j
)
=
ϕ
(
X
i
)
⋅
ϕ
(
X
j
)
K(X_i, X_j)=\phi(X_i)\cdot \phi(X_j)
K(Xi,Xj)=ϕ(Xi)⋅ϕ(Xj)
核函数减少计算量举例
假设定义两个向量:
x
=
(
x
1
,
x
2
,
x
3
)
x = ( x _1 , x_2 , x_3 )
x=(x1,x2,x3),
y
=
(
y
1
,
y
2
,
y
3
)
y = (y_1, y_2,y_3)
y=(y1,y2,y3), 定义升维方程:
ϕ
(
x
)
=
(
x
1
x
1
,
x
1
x
2
,
x
1
x
3
,
x
2
x
1
,
x
2
x
2
,
x
2
x
3
,
x
3
x
1
,
x
3
x
2
,
x
3
x
3
)
\phi(x) = (x_1x_1, x_1x_2, x_1x_3, x_2x_1, x_2x_2, x_2x_3, x_3x_1, x_3x_2, x_3x_3)
ϕ(x)=(x1x1,x1x2,x1x3,x2x1,x2x2,x2x3,x3x1,x3x2,x3x3)
定义核函数为:
κ
(
x
,
y
)
=
(
<
x
,
y
>
)
2
,
<
x
,
y
>
表
示
内
积
\kappa(x, y)=(<x, y>)^2, <x, y>表示内积
κ(x,y)=(<x,y>)2,<x,y>表示内积
假设:
x
=
(
1
,
2
,
3
)
x = ( 1 , 2 , 3 )
x=(1,2,3),
y
=
(
4
,
5
,
6
)
y = ( 4 , 5 , 6 )
y=(4,5,6),
不用核函数,直接求内积:
ϕ
(
x
)
=
(
1
,
2
,
3
,
2
,
4
,
6
,
3
,
6
,
9
)
\phi( x ) = (1 , 2 , 3 , 2 , 4 , 6 , 3 , 6 , 9)
ϕ(x)=(1,2,3,2,4,6,3,6,9)
ϕ
(
y
)
=
(
16
,
20
,
24
,
20
,
25
,
36
,
24
,
30
,
36
)
\phi( y) = (16,20,24,20,25,36,24,30,36)
ϕ(y)=(16,20,24,20,25,36,24,30,36)
<
ϕ
(
x
)
,
ϕ
(
y
)
>
=
16
+
40
+
72
+
40
+
100
+
180
+
72
+
180
+
324
=
1024
<\phi( x ),\phi( y)> = 16+40+72+40+100+180+72+180+324=1024
<ϕ(x),ϕ(y)>=16+40+72+40+100+180+72+180+324=1024
使用核函数(采用多项式核)核是需要认为设定的:
κ
(
x
,
y
)
=
(
x
i
T
y
i
)
d
=
(
4
+
10
+
18
)
2
=
3
2
2
=
1024
\kappa(x, y)=(x_i^Ty_i)^d = (4+10+18)^2=32^2=1024
κ(x,y)=(xiTyi)d=(4+10+18)2=322=1024
所以核函数只是一个trick,用较少的运算达到了和复杂计算相同的结果,所以核函数的重点就是使用如何的核函数得到和在原始维度上计算内积相同的结果。同样的结果,使用 kernel 方法计算容易很多。而这只是 9 维的情况,如果维度更高,那么直接求内积的方法运算复杂度会非常大。所以使用 kernel 的意义在于:
将向量的维度从低维映射到高维,降低运算复杂度降低运算复杂度
7、软间隔与正则化、松弛变量
在现实任务中往往很难确定合适的核函数,使得训练样本在特征空间中线性可分。缓解这个问题的一个办法是允许支持向量机在一些样本上出错,所以有了软间隔的概念。
支持向量回归
支持向量机既可以做回归,也可以用来做分类。
贝叶斯网络
贝叶斯判定准则
贝叶斯决策论是在概率框架下实施决策的基本方法。对一个分类任务来说,假设有
N
N
N 种可能的类别标记,即
y
=
c
1
,
c
2
,
.
.
.
,
c
N
\mathcal{y}={c_1, c_2, ..., c_N}
y=c1,c2,...,cN,
λ
i
j
\lambda_{ij}
λij 是将一个真实标记为
c
j
c_j
cj的样本误分类为
c
i
c_i
ci所产生的损失。基于后验概率
P
(
c
i
∣
x
)
P(c_i|\bf{x})
P(ci∣x)可获得将样本
x
\textbf{x}
x分类为
c
i
c_i
ci所产生的期望损失,即在样本
x
\textbf{x}
x上的条件风险:
R
(
c
i
∣
x
)
=
∑
j
=
1
N
λ
i
j
P
(
c
j
∣
x
)
R(c_i|x)=\sum_{j=1}^{N}\lambda_{ij}P(c_j|\bf{x})
R(ci∣x)=j=1∑NλijP(cj∣x)
那么我们的任务就是寻找一个判定准则
h
:
X
⟶
Y
h: \mathcal{X} \longrightarrow \mathcal{Y}
h:X⟶Y 以最小化总体风险:
R
(
h
)
=
E
x
[
R
(
h
(
x
)
∣
x
)
]
R(h)=\mathbb{E}_x[R(h(x)|x)]
R(h)=Ex[R(h(x)∣x)]
显然对每个样本
x
\textbf{x}
x ,若
h
h
h 能最小化条件风险
R
(
h
(
x
)
∣
x
R(h(x)|x
R(h(x)∣x,则总体风险
R
(
h
)
R(h)
R(h)也将被最小化,这就是贝叶斯判定准则:为最小化总体风险,只需在每个样本上选择那个能使条件风险
R
(
h
(
x
)
∣
x
R(h(x)|x
R(h(x)∣x 最小的类别标记。
h
∗
(
x
)
=
a
r
g
m
i
n
c
∈
Y
R
(
c
∣
x
)
(1)
h^*(x)= \underset{c\in \mathcal{Y} }{arg min} R(c|x) \tag{1}
h∗(x)=c∈YargminR(c∣x)(1)
此时,
h
∗
h^*
h∗称为贝叶斯最优分类器,与之对应的总体风险
R
(
h
∗
)
R(h^*)
R(h∗)称为贝叶斯风险。
1
−
h
∗
1 - h^*
1−h∗ 反映了分类器所能达到的最好性能。
具体来说,若目标是最小化分类错误率,则误判损失
λ
i
j
\lambda_{ij}
λij可写为:
λ
i
j
=
{
0
;
if i=j
1
;
if otherwise
\lambda _{ij}=\begin{cases} &0;\text{ if i=j }\\ &1;\text{ if otherwise} \end{cases}
λij={0; if i=j 1; if otherwise
此时条件风险为:
R
(
c
∣
x
)
=
1
−
P
(
c
∣
x
)
R(c|\bf{x})=1 - P(c|\bf{x})
R(c∣x)=1−P(c∣x)
于是,最小化分类错误率的贝叶斯最优分类器为:
$$h^*(x)=\underset{c\in \mathcal{Y} }{arg max} P(c|\bf{x}) $$
即对每个样本
x
\bf{x}
x, 选择能使后验概率
P
(
c
∣
x
)
P(c|\bf{x})
P(c∣x)最大的类别。
所以,如果要用贝叶斯判定准则来最小化决策风险,首先要获得后验概率 P ( c ∣ x ) P(c|\bf{x}) P(c∣x) . 然而,在现实任务中这通常难以直接获得。从这个角度来看,机器学习要实现的是基于有限的训练样本集尽可能准确地估计出后验概率 P ( c ∣ x ) P(c|\bf{x}) P(c∣x) 。 大体来说,有两种策略:(1)给定 x \bf{x} x ,可通过直接建模 P ( c ∣ x ) P(c|\bf{x}) P(c∣x) 来预测 c c c(类别), 这样得到的模型是"判别式模型".(2)也可以先对联合概率分布 P ( x , c ) P(\bf{x}, c) P(x,c) 建模,然后在由此获得 P ( c ∣ ( x ) ) P(c|\bf(x)) P(c∣(x)),这样得到的模型是"生成式模型"。
判别式模型和生成式模型
- 判别式模型:给定 x \bf{x} x ,可通过直接建模 P ( c ∣ x ) P(c|\bf{x}) P(c∣x) 来预测 c c c(类别), 这样得到的模型是"判别式模型"。 决策树、BP神经网络、支持向量机等是典型的判别式模型。
- 生成式模型:先对联合概率分布 P ( x , c ) P(\bf{x}, c) P(x,c) 建模,然后在由此获得 P ( c ∣ ( x ) ) P(c|\bf(x)) P(c∣(x)),这样得到的模型是"生成式模型"。贝叶斯分类器 就是典型的生成式模型。
1、对于生成式模型来说,必然考虑:
P
(
c
∣
x
)
=
P
(
x
,
c
)
P
(
x
)
P(c|\bf{x})=\frac{P(\bf{x}, c)}{P(\bf{x})}
P(c∣x)=P(x)P(x,c)
由贝叶斯定理,
P
(
c
∣
x
)
P(c|\bf{x})
P(c∣x) 可写为:
P
(
c
∣
x
)
=
P
(
c
)
P
(
x
∣
c
)
P
(
x
)
P(c|\bf{x})=\frac{P(c)P(\bf{x}|c)}{P(\bf{x})}
P(c∣x)=P(x)P(c)P(x∣c)
其中,
P
(
c
)
P(c)
P(c) 是类的先验概率;
P
(
x
∣
c
)
P(\bf{x}|c)
P(x∣c) 是样本
x
\bf{x}
x 相对于类标记
c
c
c 的类条件概率,或称为"似然(likelihood)",
P
(
x
)
P(\bf{x})
P(x) 是用于归一化的证据因子,对给定样本
x
\bf{x}
x, 证据因子
P
(
x
)
P(\bf{x})
P(x) 与类标记无关, 因此估计
P
(
c
∣
x
)
P(c|\bf{x})
P(c∣x) 的问题就转化为了如何基于训练数据
D
\mathcal{D}
D 来估计先验
P
(
c
)
P(c)
P(c) 和似然
P
(
x
∣
c
)
P(\bf{x}|c)
P(x∣c)。
类先验概率 P ( c ) P(c) P(c) 表达了样本空间中各类样本所占的比例,根据大数定理,当训练集包含充足的独立同分布样本时, P ( c ) P(c) P(c) 可通过各类样本出现的频率来进行估计。
极大似然估计MLE(Maximum Likelihood Estimation)
对类条件概率(也叫似然) P ( x ∣ c ) P(\bf{x}|c) P(x∣c) 来说,由于它涉及关于 x \bf{x} x 所有属性的联合概率,直接根据样本出现的概率来估计将会遇到严重的困难。例如,假设样本的 d d d 个属性都是二值的,则样本空间将有 2 d 2^d 2d 种可能的取值,在现实应用中,这个值往往远大于训练样本数 m m m, 也就是说,很多样本取值在训练集中根本没有出现,直接使用频率来估计 P ( x ∣ c ) P(\bf{x} | c) P(x∣c) 显然不可行,因为"未被观测到" 与 “出现概率为零” 通常是不同的。
估计类条件概率的一种常用的策略是先假定其具有某种确定的概率分布形式,在基于训练样本对概率分布的参数进行估计。具体地,记关于类别 c c c 的类条件概率为 P ( x ∣ c ) P(\bf{x}|c) P(x∣c), 假设 P ( x ∣ c ) P(\bf{x}|c) P(x∣c) 具有确定的形式并且被参数向量 θ c \theta_c θc 唯一确定, 为明确起见,将 P ( x ∣ c ) P(\bf{x}| c) P(x∣c) 记为 P ( x ∣ θ c ) P(\bf{x}| \theta_c) P(x∣θc).
事实上,概率模型的训练过程就是参数估计过程,对于参数估计,统计学界的两个学派分别提供了不同的解决方案:频率主义学派 和 贝叶斯学派。频率主义学派 认为参数虽然未知,但却是客观存在的固定值,因此可通过优化似然函数等准则来确定参数值;频率主义学派 认为参数是未观察到的随机变量,其本身也可有分布,因此,可假定参数服从一个先验分布,然后基于观测到的数据来计算参数的后验分布。极大似然估计源自于频率主义学派的。
令 D c \mathcal{D}_c Dc 表示训练集 D \mathcal{D} D 中第 c c c 类样本组成的集合,假设这些样本是独立同分布的,则参数 θ c \theta_c θc 对于数据集 D c \mathcal{D}_c Dc 的似然是:
P
(
D
c
∣
θ
c
)
=
∏
x
∈
θ
c
P
(
x
∣
θ
c
)
P(\mathcal{D_c}|\theta_c)= \prod_{x\in \theta_c}{P(\bf{x}|\theta_c)}
P(Dc∣θc)=x∈θc∏P(x∣θc)
对
θ
c
\theta_c
θc 进行极大似然估计,就是去寻找能最大化似然
P
(
D
c
∣
θ
c
)
P(\mathcal{D_c}|\theta_c)
P(Dc∣θc) 的参数值
θ
c
^
\hat{\theta_c}
θc^。直观上看,极大似然估计是试图在
θ
c
\theta_c
θc 所有可能的取值中,找到一个能使数据出现的可能性最大的值。
上式中的连乘操作容易造成下溢,通常使用对数似然:
L
L
(
θ
c
)
=
l
o
g
P
(
D
C
∣
θ
c
)
=
∑
x
∈
D
c
l
o
g
P
(
x
∣
θ
c
)
LL(\theta_c)=log P(\mathcal{D_C|\bf{\theta_c}})=\sum_{\bf{x}\in \mathcal{D_c}}log P(\bf{x|\theta_c})
LL(θc)=logP(DC∣θc)=x∈Dc∑logP(x∣θc)
此时,参数
θ
c
\theta_c
θc 的极大似然估计
θ
c
^
\hat{\theta_c}
θc^ 为:
θ
c
^
=
a
r
g
m
a
x
θ
c
L
L
(
θ
c
)
\hat{\theta_c}=\underset{\theta_c}{argmax} LL(\theta _c)
θc^=θcargmaxLL(θc)
例如,在连续属性情形下,假设概率密度函数
p
(
x
∣
c
)
∼
N
(
μ
c
,
σ
c
2
)
p(\bf{x}|c) \sim \mathcal{N}(\mu_c, \sigma_c^2 )
p(x∣c)∼N(μc,σc2), 则参数
μ
c
\mu_c
μc 和
σ
c
2
\sigma_c^2
σc2 的极大似然估计为:
μ
c
^
=
1
∣
D
c
∣
∑
x
∈
D
c
x
\hat{\mu_c}=\frac{1}{|\mathcal{D_c}|}\sum_{\bf{x}\in \mathcal{D}_c}x
μc^=∣Dc∣1x∈Dc∑x
σ
c
2
^
=
1
∣
D
c
∣
∑
x
∈
D
c
(
x
−
μ
c
^
)
(
x
−
μ
c
^
)
T
\hat{\sigma_c^2}=\frac{1}{|\mathcal{D_c}|}\sum_{\bf{x}\in \mathcal{D}_c}(x - \hat{\mu_c})(x - \hat{\mu_c})^T
σc2^=∣Dc∣1x∈Dc∑(x−μc^)(x−μc^)T
也就是说,通过极大似然法得到的正太分布均值就是样本均值,方差就是 ( x − μ c ^ ) ( x − μ c ^ ) T (x - \hat{\mu_c})(x - \hat{\mu_c})^T (x−μc^)(x−μc^)T 的均值,这显然符合直觉。
需要注意的是,这种参数化的方法虽然能使类条件概率(似然)估计变得相对简单,但估计结果的准确性严重依赖于所假设的概率分布形式是否符合潜在的真实数据分布。在现实应用中,欲做出能较好地接近潜在真是分布的假设,往往需要在一定程度上利用关于应用任务本身的经验知识,否则若仅凭 瞎猜 来假设概率分布形式,很可能产生误导性的结果。
朴素贝叶斯分类器
1、基于贝叶斯公式来估计后验概率 P ( c ∣ x ) P(c|\bf{x}) P(c∣x) 的主要困难在于:类条件概率 P ( x ∣ c ) P(\bf{x}|c) P(x∣c) 是所有属性上的联合概率,难以从有限的训练样本直接估计而得,为避开这个障碍,朴素贝叶斯分类器(naive bayes classifier) 采用了属性条件独立性假设(attribute conditional indenpendence assumption): 对已知类别,假设所有属性相互独立。换言之,假设每个属性独立地对分类结果发生影响。
2、基于属性条件独立性假设,贝叶斯公式可以重写为:
P
(
c
∣
x
)
=
P
(
c
)
P
(
x
∣
c
)
P
(
x
)
=
P
(
c
)
P
(
x
)
∏
i
=
1
d
P
(
x
i
∣
c
)
P(c|\bf{x})=\frac{P(c)P(\bf{x}|c)}{P(\bf{x})}=\frac{P(c)}{P(\bf{x})}\prod_{i=1}^{d} P(x_i|c)
P(c∣x)=P(x)P(c)P(x∣c)=P(x)P(c)i=1∏dP(xi∣c)
其中,
d
d
d 为属性数目,
x
i
x_i
xi 为
x
\bf{x}
x 在第
i
i
i 个属性上的取值。
由于对所有类别来说
P
(
x
)
P(\bf{x})
P(x) 相同,因此基于式
1
1
1 的贝叶斯判定准则有:
h
n
b
(
x
)
=
a
r
g
m
a
x
c
∈
Y
P
(
c
)
∏
i
=
1
d
P
(
x
i
∣
c
)
h_{nb}(\bm{x})=\underset{c\in \mathcal{Y}}{arg max}P(c)\prod_{i=1}^{d}P(x_i|c)
hnb(x)=c∈YargmaxP(c)i=1∏dP(xi∣c)
这就是朴素贝叶斯分类器的表达式。
显然,朴素贝叶斯分类器的训练过程就是基于训练集 D \mathcal{D} D 来估计类先验概率 P ( c ) P(c) P(c),并为每个属性估计条件概率 P ( x i ∣ c ) P(x_i | c) P(xi∣c)。
半朴素贝叶斯分类器
为了降低贝叶斯公式中的估计后验概率 P ( c ∣ x ) P(c | \bm{x}) P(c∣x) 的困难,朴素贝叶斯分类器采用了属性条件独立性假设,但在现实任务中这个假设往往很难成立。于是,人们尝试对属性条件独立性假设进行一定程度的放松,由此产生了一类称为 '半朴素贝叶斯分类器 semi-naive bayes classifiers" 的学习方法。
半朴素贝叶斯分类器的基本想法是适当考虑一部分属性间的相互依赖信息,从而及不需进行完全联合概率计算,又不至于彻底忽略了比较强的属性依赖关系。(独依赖关系 one-dependent estimator, ODE)是半朴素贝叶斯分类器最常用的一种策略。所谓 独依赖 就是假设每个属性在类别之外最多仅依赖一个其他属性,即
P
(
c
∣
x
)
∝
P
(
c
)
∏
i
=
1
d
P
(
x
i
∣
c
,
p
a
i
)
P(c|\bm{x}) \propto P(c)\prod_{i=1}^{d} P(x_i|c, pa_i)
P(c∣x)∝P(c)i=1∏dP(xi∣c,pai)
其中,
p
a
i
pa_i
pai 为属性
x
i
x_i
xi 所依赖的属性,称为
x
i
x_i
xi 的父属性。此时,未完待续…
贝叶斯网
EM 算法
集成学习
集成学习基本理论
目前集成学习方法大致分为两大类。
- 个体学习器间存在强依赖关系、必须串行生成得序列化方法(
Boosting
) - 个体学习器间不存在强依赖关系、可同时生成得并行化方法(
Bagging
和随机森林
)
Bagging
Bagging
Bagging 是 bootstrap aggregatiing(引导聚合)的简写。在Bagging
方法中,利用bootstrap
方法从整体数据集中采取有放回抽样得到N
个数据集,在每个数据集上学习出一个模型,最后的预测结果利用N
个模型的输出得到,具体地:分类问题采用N
个模型预测投票的方式,回归问题采用N
个模型预测平均的方式。
RF
随机森林就属于 Bagging。随机森林简单地来说就是用随机的方式建立一个森林,森林由很多的决策树组成,随机森林的每一堁决策树之间是没有关联的。
在学习每一棵决策树的时候就需要用到Bootstrap
方法。在随机森林中,有两个随机采样的过程:对输入数据的行(数据的数量)与列(数据的特征)都进行采样。对于行采样,采用有放回的方式,若有N个数据,则采样出N
个数据(可能有重复),这样在训练的时候每一棵树都不是全部的样本,相对而言不容易出现overfitting
;接着进行列采样从M
个feature中选择出m
个(m<<M)。最近进行决策树的学习。
预测的时候,随机森林中的每一棵树都对输入进行预测,最后进行投票,哪个类别多,输入样本就属于哪个类别。这就相当于前面说的,每一个分类器(每一棵树)都比较弱,但组合到一起(投票)就比较强了。
Boosting
提升方法(Boosting)是一种可以用来减小监督学习中偏差的机器学习算法。主要也是学习一系列弱分类器,并将其组合为一个强分类器。
AdaBoost 算法
Boosting
中有代表性的是AdaBoost(Adaptive boosting)
算法:刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练t
轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。
GBDT
GBDT(Gradient Boost Decision Tree)
也是一种Boosting
的方法,与AdaBoost
不同,GBDT
每一次的计算是为了减少上一次的残差,GBDT
在残差减少(负梯度)的方向上建立一个新的模型。
XGBoost
XGboost 的核心还是GBDT,只是在实现方式上改了一些内容,使得训练效率和模型的准确度和稳定性更高。
LightBGM
LightBGM 核心也还是GBDT,只是改了一些并行训练的方式,使得训练效率和内存消耗更少了,可以说 LightBGM和 XGBoost 只是高效实现 GBDT 的方式。
Bagging与Boosting的差别
Bagging和Boosting采用的都是采样-学习-组合的方式,但在细节上有一些不同,如:
- Bagging中每个训练集互不相关,也就是每个基分类器互不相关,而Boosting中训练集要在上一轮的结果上进行调整,也使得其不能并行计算
- Bagging中预测函数是均匀平等的,但在Boosting中预测函数是加权的
在算法学习的时候,通常在bias和variance之间要有一个权衡。bias与variance的关系如下图,因而模型要想达到最优的效果,必须要兼顾bias和variance,也就是要采取策略使得两者比较平衡
从算法来看,Bagging关注的是多个基模型的投票组合,保证了模型的稳定,因而每一个基模型就要相对复杂一些以降低偏差(比如每一棵决策树都很深);而Boosting采用的策略是在每一次学习中都减少上一轮的偏差,因而在保证了偏差的基础上就要将每一个基分类器简化使得方差更小。
Stacking
Stacking
方法是指训练一个模型用于组合其他各个模型。首先我们先训练多个不同的模型,然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。但在实际中,通常使用logistic回归作为组合策略
聚类
聚类性能度量指标
1、Jaccard
系数:
J
C
=
a
a
+
b
+
c
JC=\frac{a}{a+b+c}
JC=a+b+ca
2、FM
指数(也叫 FMI):
F
M
I
=
a
a
+
b
⋅
a
a
+
c
FMI=\sqrt{\frac{a}{a+b}\cdot \frac{a}{a+c}}
FMI=a+ba⋅a+ca
3、Rand
指数(RI):
R
I
=
2
(
a
+
d
)
m
(
m
−
1
)
RI=\frac{2(a+d)}{m(m-1)}
RI=m(m−1)2(a+d)
4、DB
指数
5、Dunn
指数
各种聚类方法
1、k-均值聚类 K-means
给定样本集
D
=
{
x
1
,
x
2
,
.
.
.
.
.
,
x
m
}
\mathcal{D}=\{{\bm{x}_1, \bm{x}_2,.....,\bm{x}_m}\}
D={x1,x2,.....,xm}, k-means
算法针对聚类所的簇划分
C
=
{
C
1
,
C
2
,
.
.
.
,
C
k
}
\mathcal{C}=\{{C_1, C_2, ..., C_k}\}
C={C1,C2,...,Ck} 最小化平方误差
E
=
∑
i
=
1
k
∑
x
∈
C
i
∣
∣
x
−
μ
i
∣
∣
2
2
E=\sum_{i=1}^{k}\sum_{\bm{x}\in \mathcal{C}_i}||\bm{x}-\bm{\mu_i}||_2^2
E=i=1∑kx∈Ci∑∣∣x−μi∣∣22
其中,
μ
i
=
1
∣
C
i
∣
∑
x
∈
C
i
x
\mu_i=\frac{1}{|\mathcal{C}_i|}\sum_{\bm{x}\in \mathcal{C}_i}\bm{x}
μi=∣Ci∣1∑x∈Cix 是簇
C
i
\mathcal{C}_i
Ci 的均值向量。直观来看,上式在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度,
E
E
E 值越小则簇内样本相似度越高。
2、 高斯混合聚类:用概率模型来表达聚类原型
3、密度聚类:对形状非常不规则的簇具有非常好的效果
4、层次聚类:试图在不同层次对数据集进行划分,从而形成树形的聚类结构,数据集的划分可采用"自底向上"的聚合策略,也可采用"自顶向下"的分拆策略。
降维与度量学习
SVD
k \mathcal{k} k近邻学习(kNN)
k-NN
是一种常用的监督学习方法,其工作机制很简单:给定测试样本,基于某种距离度量找出训练集中于其最靠近的
k
k
k 个训练样本,然后基于这
k
k
k 个邻居的信息来进行预测。通常,在分类任务中可使用"投票法",即选择这
k
k
k 个样本中出现最多的类别标记作为预测结果;在回归任务中可使用"平均法",即将这
k
k
k 个样本的实值输出标记的平均值作为预测结果,还可基于距离远近进行加权平均或加权投票,距离越近的样本权重越大。
k-NN
与其他的学习方法有一个明显的不同之处:它似乎没有显示的训练过程,它是"懒惰学习"的著名代表,此类学习技术在训练阶段仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后在进行处理,相应的,那些在训练阶段就对样本进行学习处理的方法,称为"急切学习"
低维嵌入
主成分分析 PCA
PCA
是最常用的线性降维方法,它的目标是通过某种线性投影,将高的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数据维度,同时保留较多的原始数据点的特性。
度量学习
特征选择与稀疏学习
VC维
现实学习任务所面临的通常是无限假设空间,例如实数域中的所有区间、 D d \mathbb{D}^d Dd 空间中的所有线性超平面。欲对此种情形的可学习性进行研究,需度量假设空间的复杂度。最常见的办法是考虑假设空间的"VC"维度。