一、前言
由于本文章是对台大李宏毅老师的《机器学习》课程之《Classification》进行的个人总结,因此使用口袋妖怪(Pokeman)来举例说明。
二、线性回归用于分类
假设宝可梦的所有属性共七种,选出其中两种作为宝可梦的特征(也就是空间维度)。分类问题要求根据已知的两种宝可梦的特征训练集,来对新加入的点进行分类。
一个问题:是否可以用回归的思想来解决分类问题呢?
假设有两种类别,可以试着用用最小二乘法拟合出一条直线(曲线),使得所有点到这条线的距离之和最短,测试的点若在直线上方则为一种类别,否则则为另一种类别。
如果对于下面的左图来说,这样的做法貌似没什么问题;但是考虑数据分布如右图所示的情况,当蓝色的类别中数据离散的程度很高时,根据最小二乘法思想,我们拟合的直线会向下“倾倒”以满足所有点到直线距离之和最小,而这样做的代价,就是导致可能有很大一部分本属于蓝色的数据被划分到红色区域,从而导致很差的分类效果,因此线性回归的方法一般是不可取的。
三、朴素贝叶斯(Naive Bayes)分类
贝叶斯规则的概念
《深度学习》中对贝叶斯规则有比较系统的描述:
我们经常会需要在已知 P ( y ∣ x ) P(y|x) P(y∣x) 时计算 P ( x ∣ y ) P(x|y) P(x∣y)。幸运的是,如果还知道 P ( x ) P(x) P(x), 我们可以用贝叶斯规则(Bayes’ rule)来实现这一目的:
P ( x ∣ y ) = P ( x ) P ( y ∣ x ) P ( y ) P(\mathrm{x} | \mathrm{y})=\frac{P(\mathrm{x}) P(\mathrm{y} | \mathrm{x})}{P(\mathrm{y})} P(x∣y)=P(y)P(x)P(y∣x)注意到 P ( y ) P(y) P(y) 出现在上面的公式中,它通常使用 P ( y ) = ∑ x P ( y ∣ x ) P ( x ) P(\mathrm{y})=\sum_{x} P(\mathrm{y} | x) P(x) P(y)=∑xP(y∣x)P(x) 来计算, 所以我们并不需要事先知道 P ( y ) P(y) P(y) 的信息。
其中的
P
(
y
)
=
∑
x
P
(
y
∣
x
)
P
(
x
)
P(\mathrm{y})=\sum_{x} P(\mathrm{y} | x) P(x)
P(y)=∑xP(y∣x)P(x) 其实也就是全概率公式。
将
P
(
y
)
P(y)
P(y)展开:
P
(
y
)
=
P
(
y
,
x
1
)
+
P
(
y
,
x
2
)
+
P
(
y
,
x
3
)
+
⋯
+
P
(
y
,
x
n
)
P(y)=P(y,x_1)+P(y,x_2)+P(y,x_3)+\dots+P(y,x_n)
P(y)=P(y,x1)+P(y,x2)+P(y,x3)+⋯+P(y,xn)其中
∑
i
=
1
n
x
i
=
1
\sum_{i=1}^n{x_i}=1
∑i=1nxi=1.
朴素贝叶斯之所以名为朴素,是因为它是基于对条件概率做出分布独立性的假设,也就是说:
P
(
x
1
,
x
2
,
…
x
n
∣
y
)
=
P
(
x
1
∣
y
)
⋅
P
(
x
2
∣
y
)
…
P
(
x
n
∣
y
)
P(x_1,x_2,\dots x_n|y)=P(x_1|y)·P(x_2|y)\dots P(x_n|y)
P(x1,x2,…xn∣y)=P(x1∣y)⋅P(x2∣y)…P(xn∣y)
朴素贝叶斯被用于分类的原因
对于贝叶斯公式:
P
(
C
1
∣
x
)
=
P
(
x
∣
C
1
)
P
(
C
1
)
∑
i
=
1
n
P
(
x
∣
C
i
)
⋅
P
(
C
i
)
P(\mathrm{C_1} | \mathrm{x})=\frac{ P(\mathrm{x} | \mathrm{C_1})P(\mathrm{C_1})}{\sum_{i=1}^nP(\mathrm{x}|C_i)·P(C_i)}
P(C1∣x)=∑i=1nP(x∣Ci)⋅P(Ci)P(x∣C1)P(C1)
重新考虑“分类”的问题,其实就是求对于给定样本
x
x
x的情况下是Class 1的概率
P
(
C
1
∣
x
)
P(C_1|x)
P(C1∣x),如果概率大于0.5,则证明此数据属于类别一,否则属于类别二。上面的
x
x
x 即测试数据,
C
1
C_1
C1 即代表类别一。
有了朴素贝叶斯公式作为分类的标准,似乎工作已经完成了一大半,那么这里的概率函数应该服从什么分布呢?
多维高斯分布
概率论中均学过高斯分布(Gaussian Distribution,也叫做正态分布)
关于多维高斯分布的概率密度函数长这样:
f
μ
,
Σ
(
x
)
=
1
(
2
π
)
D
/
2
1
∣
Σ
∣
1
/
2
exp
{
−
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
}
f_{\mu, \Sigma}(x)=\frac{1}{(2 \pi)^{D / 2}} \frac{1}{|\Sigma|^{1 / 2}} \exp \left\{-\frac{1}{2}(x-\mu)^{T} \Sigma^{-1}(x-\mu)\right\}
fμ,Σ(x)=(2π)D/21∣Σ∣1/21exp{−21(x−μ)TΣ−1(x−μ)}
推导参考:https://www.cnblogs.com/jermmyhsu/p/8251013.html
图像:
花书提到:
采用正态分布在很多应用中都是一个明智的选择。当我们由于缺乏关于某个实 数上分布的先验知识而不知道该选择怎样的形式时,正态分布是默认的比较好的选择。
因此这里以高斯分布作为一类样本
x
x
x 的概率质量函数。
既然知道了使用高斯分布,剩下的工作就是确定多维高斯分布的
x
x
x的均值
μ
\mu
μ 以及协方差矩阵
Σ
\Sigma
Σ.
我们的目的自然还是选择合适的参数,使得一个样本的分类尽可能准确,那么衡量准确性的标准是什么呢?
——最大似然估计。
最大似然估计
最大似然估计的值可表示为:
L
(
μ
,
Σ
)
=
∏
i
=
1
n
f
μ
,
Σ
(
x
i
)
L(\mu, \Sigma)=\prod_{i=1}^nf_{\mu, \Sigma}\left(x_i\right)
L(μ,Σ)=i=1∏nfμ,Σ(xi)其中
f
μ
,
Σ
(
x
i
)
f_{\mu, \Sigma}\left(x_i\right)
fμ,Σ(xi)表示将第
i
i
i 个训练样本带入高斯概率密度函数得出的概率。
之所以可以直接使用概率密度函数作为概率函数直接计算,是因为
x
i
x_i
xi 为单个点,而高斯分布在单个点的概率就等于其概率密度函数在此点的值。
因此我们便有了目标函数:
L
(
μ
,
Σ
)
=
f
μ
,
Σ
(
x
1
)
f
μ
,
Σ
(
x
2
)
f
μ
,
Σ
(
x
3
)
…
f
μ
,
Σ
(
x
79
)
μ
∗
,
Σ
∗
=
arg
max
μ
,
Σ
L
(
μ
,
Σ
)
\begin{aligned} L(\mu, \Sigma)=& f_{\mu, \Sigma}\left(x^{1}\right) f_{\mu, \Sigma}\left(x^{2}\right) f_{\mu, \Sigma}\left(x^{3}\right) \ldots f_{\mu, \Sigma}\left(x^{79}\right) \\ \mu^{*}, \Sigma^{*}=& \arg \max _{\mu, \Sigma} L(\mu, \Sigma) \end{aligned}
L(μ,Σ)=μ∗,Σ∗=fμ,Σ(x1)fμ,Σ(x2)fμ,Σ(x3)…fμ,Σ(x79)argμ,ΣmaxL(μ,Σ)同样利用求偏微分的方法,可得到使目标函数取最大值的
μ
\mu
μ 与
Σ
\Sigma
Σ :
μ
∗
=
1
n
∑
i
=
1
n
x
i
\mu^{*}=\frac{1}{n} \sum_{i=1}^{n} x_i
μ∗=n1i=1∑nxi
Σ
∗
=
1
n
∑
i
=
1
n
(
x
i
−
μ
∗
)
(
x
i
−
μ
∗
)
T
\Sigma^{*}=\frac{1}{n} \sum_{i=1}^{n}\left(x_{i}-\mu^{*}\right)\left(x_{i}-\mu^{*}\right)^{T}
Σ∗=n1i=1∑n(xi−μ∗)(xi−μ∗)T推导(以
u
u
u为例,
Σ
\Sigma
Σ同理)
有了这两个参数,便可以直接求得样本
x
x
x 属于某一类别的概率了。
对于李宏毅老师给的例子,如果对两个类别使用相同的协方差矩阵
Σ
\Sigma
Σ,而
μ
\mu
μ 不同,效果会更好:
此时的
μ
∗
\mu^{*}
μ∗ 求解的公式不变(只是对不同类别的数据做相应调整),
Σ
\Sigma
Σ则变为两种样本各自
Σ
\Sigma
Σ的加权: