Machine Learning —— Classification

本文介绍了机器学习中的分类问题,强调了如何将输入数值化,并探讨了将分类问题视为回归问题的局限性。通过概率生成模型(Generative Model)来解决分类任务,特别是二元分类问题,利用贝叶斯公式和高斯分布来估计类别概率。通过极大似然估计法确定模型参数,实现对新样本的分类。最后,讨论了朴素贝叶斯分类法及其适用条件,指出模型选择应尽可能减少不必要的参数。

Machine Learning —— Classification: Probabilistic Generative Model

Classification

基本概念

分类问题是找一个function,它的input是一个object,它的输出时这个object属于哪一个class。以宝可梦为例,已知宝可梦有18种属性,现在要解决的分类问题就是做一个宝可梦种类的分类器,我们要找到一个function,这个function的input是某只宝可梦,它的output是这只宝可梦属于哪一个类别。
在这里插入图片描述

输入数值化

对于宝可梦的分类问题,我们需要解决的第一个问题:怎么把某只宝可梦当做input
于是我们将宝可梦利用特性数值化:用一组数字来描述一只宝可梦的特性
以皮卡丘为例,我们可以用七种特性所组成的vector来描述它
在这里插入图片描述

How to classification

Training data for Classification

假设我们把编号400以下的宝可梦当做training data,编号400以上的当做testing data

Classification as Regression?

以binary classification为例,我们在training时让输入class1的输出为1,输入class2的输出为-1,那么在testing的时候,regression的output是一个数值,它接近1则说明它是class1,它接近-1说明是class2
如果这样做,会遇到什么问题
假设现在我们的model是 y = b + w 1 x 1 + w 2 x 2 y=b+w_1x_1+w_2x_2 y=b+w1x1+w2x2,input是两个feature, x 1 x_1 x1 x 2 x_2 x2
有两个class,蓝色的是class1,红色的是class2,假设我们真的找到这个function,如下图左边所示,绿色的线表示 0 = b + w 1 x 1 + w 2 x 2 0=b+w_1x_1+w_2x_2 0=b+w1x1+w2x2,这种情况下,值接近-1的宝可梦都集中在绿线左上方,值接近1的宝可梦都集中在绿线的右下方
但是如果想下图右侧所示,如果要考虑右下角那些点的话,通过regression训练出来的model会是紫色这条分界线,因为相对于绿线,它“减小”了由右下角这些点所带来的error
Regression的output是连续性的数值,而classification要求的output是离散性质的点,很难找到一个Regression的function使大部分样本点的output都集中在某几个离散的点附近
因此Regression定义model的好坏的方式并不适用于classification
在这里插入图片描述
而且如果是多元分类的问题,把class1的target当做1,class2的target当做2,class3的target当做3,这样的做法是错误的,因为当这样做时,就会被Regression认为class1和class2的关系比较接近,class2和class3的关系比较接近,而class1和class3的关系比较疏远,但当这些class之间并没有什么特殊关系时,这样的标签用Regression是没有办法得到好的结果的

Ideal Alternative

Regression的output是一个real number,但在classification时,它的output是discrete
理想的方法是这样:
我们要找的function f(x) 里面会有另外一个function g(x),当我们的input x输入后,如果g(x)>0,那么f(x)的输出就是class1,如果g(x)<0,那么就是class2
在这里插入图片描述

Loss function

我们可以把loss function定义成 L ( f ) = ∑ n δ ( f ( x n ) ≠ y ^ n ) L(f)=\sum_n\delta(f(x^n)\ne\hat{y}^n) L(f)=nδ(f(xn)=y^n),即这个model在所有的training data上predict预测错误的次数,也就是说分类错误的次数越少,这个function表现越好
这个loss function没有办法微分,于是用另一个solution来解决

Solution: Generative model

概率理论解释

假设我们考虑一个二元分类的问题,我们拿到一个input x,想知道这个x属于class1或class2的概率
这实际上是一个贝叶斯公式
在这里插入图片描述
因此我们要知道x属于class1或class2的概率,只需要知道4个值: P ( C 1 ) , P ( x ∣ C 1 ) , P ( C 2 ) , P ( x ∣ C 2 ) P(C_1),P(x|C_1),P(C_2),P(x|C_2) P(C1),P(xC1),P(C2),P(xC2)
我们可以从training data中估计出这四个值
这一整套想法叫做Generative model(生成模型),有这个model的话,就可以拿它来生成x(如果可以计算每一个x出现的概率,就可以用这个distribution分布来生成x和sample x)

Prior

P ( C 1 ) , P ( C 2 ) P(C_1),P(C_2) P(C1),P(C2)这两个概率被称为prior
在training data中,有79只水系宝可梦和61只一般系宝可梦,那么
P ( C 1 ) = 79 / ( 79 + 61 ) = 0.56 P(C_1)=79/(79+61)=0.56 P(C1)=79/(79+61)=0.56
P ( C 1 ) = 61 / ( 79 + 61 ) = 0.44 P(C_1)=61/(79+61)=0.44 P(C1)=61/(79+61)=0.44

问题是 P ( x ∣ C 1 ) , , P ( x ∣ C 2 ) P(x|C_1),,P(x|C_2) P(xC1),,P(xC2)怎么得到

Probability from Class

在这里插入图片描述
其实每一只宝可梦都可用一组特征值组成的向量来表示,在这个vector里一共有七种不同的feature,为了方便可视化,这里先只考虑Defense和SP Defense两种feature
假设图上的海龟的vector是[103 45],虽然这个点在已有的数据中没有出现过,但是不可以认为它出现的概率为0,我们需要用已有的数据去估测海龟出现的可能性
假定水系宝可梦的Defense和SP Defense是从一个Gaussian的distribution里面sample出来的,上图只是采样了79个点之后得到的分布,但是从高斯分布里采样出海龟这个点的几率并不为0
那么如果从这79个已有的点,找到Gaussian distribution函数呢

Gaussian Distribution

高斯分布,里面的 μ \mu μ表示均值, Σ \Sigma Σ表示方差,两者都是矩阵matrix,那么高斯函数的概率密度函数是:
f μ , Σ ( x ) = 1 ( 2 π ) D 2 1 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) f_{\mu,\Sigma}(x)=\frac{1}{(2\pi)^{\frac{D}{2}}}\frac{1}{|\Sigma|^{\frac{1}{2}}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)} fμ,Σ(x)=(2π)2D1Σ211e21(xμ)TΣ1(xμ)
从下图中可以看出,同样的 Σ \Sigma Σ,不同的 μ \mu μ,概率分布最高点的位置时不一样的
在这里插入图片描述
同样的 μ \mu μ,不同的 Σ \Sigma Σ,概率分布最高点的位置的位置一样,但是分布的密集程度不一样
在这里插入图片描述
要找到这个Gaussian,只需要去估测出其均值 μ \mu μ和协方差 Σ \Sigma Σ即可
估计均值 μ \mu μ和协方差 Σ \Sigma Σ的方法就是极大似然估计法(Maximum Likelihood):找出最特殊的那对 μ \mu μ Σ \Sigma Σ,从它们共同决定的高斯函数中再次采样出79个点,使“得到的分布情况与当前已知79个点的分布情况相同”这件事发生的可能性最大
在这里插入图片描述
实际上 μ \mu μ Σ \Sigma Σ对应的高斯函数都有可能sample出和当前分布一致的样本点,就像上图中两个红色圆圈所代表的高斯函数,但肯定存在着发生概率最大的那一个Gaussian

ML: L ( μ , Σ ) = f μ , Σ ( x 1 ) f μ , Σ ( x 2 ) . . . f μ , Σ ( x 7 9 ) L(\mu,\Sigma)=f_{\mu,\Sigma}(x^1)f_{\mu,\Sigma}(x^2)...f_{\mu,\Sigma}(x^79) L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)...fμ,Σ(x79),就是每个点都发生的概率之积,我们只需要将每一个点的data都代进去,分别对 μ \mu μ Σ \Sigma Σ求偏导,解出微分是0的点,即使L最大的那组参数,通过微分得到的高斯函数的 μ \mu μ Σ \Sigma Σ的最优解如下:

μ ∗ , Σ ∗ = a r g m a x μ , Σ L ( μ , Σ ) \mu^*,\Sigma^*=arg\mathop{max}\limits_{\mu,\Sigma}L(\mu,\Sigma) μ,Σ=argμ,ΣmaxL(μ,Σ)
u ∗ = 1 79 ∑ n = 1 79 x n Σ ∗ = 1 79 ∑ n = 1 79 ( x n − u ∗ ) ( x n − u ∗ ) T u^*=\frac{1}{79}\sum_{n=1}^{79}x^n \quad \Sigma^*=\frac{1}{79}\sum_{n=1}^{79}(x^n-u^*)(x^n-u^*)^T u=791n=179xnΣ=791n=179(xnu)(xnu)T

注:数学期望: u = E ( X ) u=E(X) u=E(X),协方差: Σ = c o v ( X , Y ) = E [ ( X − Y ) ( X − Y ) T ] \Sigma=cov(X,Y)=E[(X-Y)(X-Y)^T] Σ=cov(X,Y)=E[(XY)(XY)T]

根据上述的公式和数据,计算出class1的两个参数:
在这里插入图片描述
同理,用极大似然估计法计算出class2的两个参数,得到两个class的结果:
在这里插入图片描述
有了这些之后,我们可以得到 P ( C 1 ) , P ( x ∣ C 1 ) , P ( C 2 ) , P ( x ∣ C 2 ) P(C_1),P(x|C_1),P(C_2),P(x|C_2) P(C1),P(xC1),P(C2),P(xC2),就可以开始做分类的问题了

Do Classification

现有的数据和具体分布
在这里插入图片描述
通过可视化得到的结果如下:
在这里插入图片描述
在左上角的图中,横轴是Defense,纵轴是SP Defense,蓝色的点是水系宝可梦的分布,红色的点是一般系宝可梦的分布,对图中的每一点都计算它是class1的概率 P ( x ∣ C 1 ) P(x|C_1) P(xC1),这个概率用颜色来表示,如果某点在红色区域,表示它是水系宝可梦的概率更大;如果该点在其他颜色的区域,表示它是水系宝可梦的概率比较小

因为我们做的是分类问题,因此令几率>0.5的点类别为1,几率<0.5的点类别为2,分出右上角图中的红色和蓝色两块区域

再把testing data上得到的结果可视化出来,即右下角的图,发现分的不是太好,正确率才是47%

我们之前用的只是Defense和SP Defense这两个参数,在二维空间上得到的效果不太好,也许在六维空间上看它们也许会分得更好,于是我们的 μ \mu μ是一个6-dim的vector, Σ \Sigma Σ则是一个6*6的matrix,发现得到的准确率才64%,是否有办法改进的更好呢?

Modifying Model

之前使用的model并不常见,比较常见的做法是,不同的class可以share同一个covariance matrix
其实variance是跟input的feature size的平方成正比的,所以当feature的数量很大时, Σ \Sigma Σ的增加可以非常快,在这种情况下,给不同的Gaussian以不同的covariance matrix,会造成model的参数太多,而参数多会导致model的variance过大,出现overfitting的现象,因此Udine不同的class使用同一个covariance matrix,可以有效减小参数
在这里插入图片描述
μ 1 \mu_1 μ1 μ 2 \mu_2 μ2 Σ \Sigma Σ合成一个极大似然函数, Σ \Sigma Σ是原先的 Σ 1 \Sigma_1 Σ1 Σ 2 \Sigma_2 Σ2的加权
观察结果可以发现,class1和class2在没有用共同的 Σ \Sigma Σ之前,分界线是一条曲线;在共用covariance matrix后,它们之间的分界线变成一条直线,这样的model,也可以称之为linear model(尽管Gaussian不是linear的,但是它分类的boundary是linear)
在这里插入图片描述
如果考虑所有的feature,并共用covariance的话,原来的54%的正确率会变成73%

Three Steps of Classification

回顾一下classification的三个步骤:

  • Find a function set(model)
    这些required probability P ( C ) P(C) P(C)和probability distribution P ( x ∣ C ) P(x|C) P(xC)就是model的参数,选择不同的probability distribution就会得到不同的function,把这些不同参数的Gaussian distribution集合起来,就是一个model,如果不选择高数函数而选择其他分布函数,就会有新的model
  • Goodness of function
    对于Gaussian distribution这个model来说,我们要评价的是决定这个高斯函数形状的均值 μ \mu μ和协方差 Σ \Sigma Σ两个参数的好坏,而极大似然函数 L ( μ , Σ ) L(\mu,\Sigma) L(μ,Σ)的输出值,可以用来评价参数好坏
  • Find the best function
    找到最好的function,就是使 L ( μ , Σ ) L(\mu,\Sigma) L(μ,Σ)值最大的那组参数,实际上就是所有样本点的均值和协方差

u ∗ = 1 n ∑ i = 1 n x i Σ ∗ = 1 n ∑ n = 1 n ( x i − u ∗ ) ( x i − u ∗ ) T u^*=\frac{1}{n}\sum_{i=1}^{n}x^i \quad \Sigma^*=\frac{1}{n}\sum_{n=1}^{n}(x^i-u^*)(x^i-u^*)^T u=n1i=1nxiΣ=n1n=1n(xiu)(xiu)T

此处上标i表示第i个点,这里x是一个features的vector,用下标表示这个vector中的某个feature
在这里插入图片描述

Probability Distribution

Why Gaussian distribution

为什么使用Gaussian的model,而不选择其他的分布函数,当然也可以选择其他的分布函数,如果选择简单的分布函数(参数较少),那么bias就大,variance就小;如果选择复杂的分布函数,那么bias小,variance就大

Naive Bayes Classification(朴素贝叶斯分类法)

我们可以考虑这样一件事,假设 x = [ x 1 , x 2 , x 3 , . . . , x k , . . . ] x=[x_1,x_2,x_3,...,x_k,...] x=[x1,x2,x3,...,xk,...]中的每一个dimension x k x_k xk的分布都是相互独立的,他们之间covariance都是0,那我们就可以把x产生的几率拆解成 x 1 , x 2 , x 3 , . . . , x k , . . . x_1,x_2,x_3,...,x_k,... x1,x2,x3,...,xk,...产生的几率之积
在这里插入图片描述
这里每一个dimension的分布函数都是一维的Gaussian distribution,如果这样假设的话,原来多维度的Gaussian的covariance matrix变成是diagonal,在不是对角线的地方,都是0,这样就可以更加减少需要的参数量,就可以得到一个简单的model,这种方法称为朴素贝叶斯分类法

如果真的明确了所有feature之间是相互独立的,那么使用朴素贝叶斯分类法是很好的,但是如果feature之间不独立的话,那么bias就会很大

总之,寻找model的原则是尽量减少不必要的参数,但是必要的参数不能少

Analysis Posterior Probability

分析后验概率的表达式:
表达式上下同除以分子,得到 σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+ez1,这个function叫做sigmoid function
在这里插入图片描述
这个S函数是已知逻辑函数,继续推导一下z真正的样子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
虽然推导过程比较复杂,但是得到的结果(当 Σ 1 \Sigma_1 Σ1 Σ 2 \Sigma_2 Σ2加权组合成一个 Σ \Sigma Σ),经过化简相消z就变成了一个linear的function,x的系数是一个vector w
在这里插入图片描述
P ( C 1 ∣ x ) = σ ( w x + b ) P(C_1|x)=\sigma(wx+b) P(C1x)=σ(wx+b)这个式子解释了当class1和class2共用 Σ \Sigma Σ时,它们之间的boundary是linear的

在Generative model中,我们做的事情是,用某些方法找出 N 1 , N 2 , μ 1 , μ 2 , Σ N_1,N_2,\mu_1,\mu_2,\Sigma N1,N2,μ1,μ2,Σ,找到这些参数之后就可以算出w和b,代入到 P ( C 1 ∣ x ) = σ ( w x + b ) P(C_1|x)=\sigma(wx+b) P(C1x)=σ(wx+b)中,就可以计算概率

参考文章

https://github.com/Sakura-gh/ML-notes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值