机器学习入门之概率分类模型

分类

x -> function -> Class n

分类问题就是要找到一个函数使得给定输入能输出它所属的类别。

又以宝可梦为例,宝可梦有十八种属性:电、火等

在这里插入图片描述

比如输入是皮卡丘输出就是电。

如何分类

首先要收集训练数据

在二元分类模型(只有两个类别)中:

输入x,g(x) > 0 则 class1 否则 class2

那么损失函数可以这样定义:

L ( f ) = n δ ( f ( x n ) y ^ n ) L(f) = \sum_n \delta(f(x^n) ≠ \hat y^n)
也就是它的错误次数,越小说明这个函数越好。

下面通过概率论的知识来解决找到最好的函数问题。

扫描二维码关注公众号,回复: 8919153 查看本文章

在这里插入图片描述

给定两个盒子,从这两个盒子中随机抽一个球出来,它是蓝色的。
那么这蓝色的球从盒子1和盒子2中抽出来的几率分别是多少?

假设从盒子1中抽球的概率 P ( B 1 ) = 2 / 3 P(B_1)= 2/3 ,从盒子2中抽球的概率 P ( B 2 ) = 1 / 3 P(B_2)=1/3

并且盒子1里面蓝球的概率是 P ( B l u e B 1 ) = 4 / 5 P(Blue|B_1)=4/5 ,绿球的概率是 P ( G r e e n B 1 ) = 1 / 5 P(Green|B_1)=1/5
盒子2中蓝球的概率是 P ( B l u e B 2 ) = 2 / 5 P(Blue|B_2)=2/5 ,绿球的概率是 P ( G r e e n B 2 ) = 3 / 5 P(Green|B_2)=3/5

那么根据贝叶斯公式,可以计算出蓝球从盒子1中抽出来的概率是:

P ( B 1 B l u e ) = P ( B l u e B 1 ) P ( B 1 ) P ( B l u e B 1 ) P ( B 1 ) + P ( B l u e B 2 ) P ( B 2 ) P(B_1|Blue) = \frac{P(Blue|B_1)P(B_1)}{P(Blue|B_1)P(B_1)+P(Blue|B_2)P(B_2)}

现在把盒子换成类别的话:

在这里插入图片描述

假设有两个类别Class1和Class2。

给定一个x,那么它属于哪个类别呢?
如果知道从Class1中抽x的概率 P ( C 1 ) P(C_1) 和从Class2中抽x的概率 P ( C 2 ) P(C_2)

从Class1中抽到x的概率 P ( x C 1 ) P(x|C_1) 以及从Class2中抽到x的概率 P ( x C 2 ) P(x|C_2)

那么可以计算x属于Class1的概率有多大:

P ( C 1 x ) = P ( x C 1 ) P ( C 1 ) P ( x C 1 ) P ( C 1 ) + P ( x C 2 ) P ( C 2 ) P(C_1|x) = \frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1)+P(x|C_2)P(C_2)}

这就叫做生成模型(Generative Mode)。顾名思义,有了这个模型,这可以用来生成x。

可以计算某一个x出现的几率 P ( x ) = P ( x C 1 ) P ( C 1 ) + P ( x C 2 ) P ( C 2 ) P(x)=P(x|C_1)P(C_1) +P(x|C_2)P(C_2) ,就可以知道x的分布,然后就可以用这个分布来生成x。

假设我们考虑水系(Water)和一般系(Normal)的神奇宝贝。

在这里插入图片描述

在训练数据中,共有79只水系的,61只一般系的。

那从Class1中取得一只宝可梦的几率是 P ( C 1 ) = 79 / ( 79 + 61 ) = 0.56 P(C_1)=79/(79+61)=0.56
那从Class2中取得一只宝可梦的几率是 P ( C 1 ) = 61 / ( 79 + 61 ) = 0.44 = 1 P ( C 1 ) P(C_1)=61/(79+61)=0.44 = 1 - P(C_1)

在这里插入图片描述

那么从水系的神奇宝贝中挑出一只是海龟的几率( P ( W a t e r ) P(海龟|Water) )有多大?

也就是 P ( x C 1 ) = ? P(x|C_1) = ?

我们知道每个神奇宝贝都是用特征(feature)向量来描述。

我们首先考虑防御力(Defense)和特殊防御力(SP Defense)这两个特征(因为没法画出7个特征的图像出来…)

在这里插入图片描述

每个点都代表一只宝可梦,如果给我们一个不在训练数据中的新的神奇宝贝,比如海龟。

在这里插入图片描述

那么从水系中挑出一只神奇宝贝是海龟的几率是多少? P ( x W a t e r ) = ? P(x|Water) = ?

可以想象这79只神奇宝贝是从某个高斯分布(正态分布)中取样出来,那么找到海龟代表的那个点的几率就不是0。

那给定这79个点,怎么找到这个高斯分布。

高斯分布常见的形式是:

f ( x ; μ , σ ) = 1 2 π σ e x p ( x μ ) 2 2 σ 2 f(x;\mu,\sigma)=\frac{1}{\sqrt{2\pi}\sigma}exp^{-\frac{(x-\mu)^2}{2\sigma^2}}

视频中给出了另一个种形式:

在这里插入图片描述

可以把高斯分布想成一个函数,这个函数的输入就是向量x,代表某只宝可梦的数值;
输出就是这只宝可梦从这个分布中取样出来的几率。

这个几率由均值 μ \mu 和协方差矩阵 Σ \Sigma 组成。

把不同的 μ \mu Σ \Sigma 代入这个函数,就能得到不同的图像,x的几率也不一样。

在这里插入图片描述

同样的 Σ \Sigma 不同的 μ \mu 得出来的图形中几率分布最高点的位置不一样;

在这里插入图片描述

同样的 μ \mu 和不同的 Σ \Sigma 的几率分布最高点位置一样,但是分布发散的程度不一样。

假设有一个高斯分布存在,从这个分布中取样79次后,取出这79个点。

那么这个高斯分布到底是什么样的呢?

假设我们可以根据这个79个点估测出高斯分布的 μ \mu Σ \Sigma

在这里插入图片描述

接着给一个新的点x,它不在我们过去所见过的79个点里面,我们已经知道了 μ \mu Σ \Sigma ,我们就可以写出高斯函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PGlK5jBU-1574262013387)(_v_images/20191119222340393_28360.png)]

然后把x代进去,就可以算出这个x从这个分布出取样出来的几率,如果x越接近中心点,那么取样出来的概率就越大。

那么现在的问题就是如何找到这个 μ \mu Σ \Sigma ,用的方法是极大似然。

极大似然

可以想象这个79个点能从任何 μ \mu Σ \Sigma 的高斯分布中生成出来。

从高斯分布中生成能生成任何一个点,不过几率有高低之别。

在这里插入图片描述

如上图,左下角那个分布生成这个79个点的可能性(Likelihood)比右上角的分布要高。

所以给定 μ \mu Σ \Sigma ,就可以算出生成这些点的可能性 就是取样出每个点的几率之积:

L ( μ , Σ ) = f μ , Σ ( x 1 ) f μ , Σ ( x 2 ) f μ , Σ ( x 3 ) f μ , Σ ( x 79 ) L(\mu,\Sigma) = f_{\mu,\Sigma}(x^1)f_{\mu,\Sigma}(x^2)f_{\mu,\Sigma}(x^3)\cdots f_{\mu,\Sigma}(x^{79})

上面的 L L 不是代表损失函数,而是取Likelihood中的首字母。

所以,接下来要做的事情是找到生成这个79个点可能性最大(maximum likelihood)的高斯分布( ( μ , Σ ) (\mu^*,\Sigma^*) )。

μ , Σ = a r g max μ , Σ L ( μ , Σ ) \mu^*,\Sigma^*=arg\,\max_{\mu,\Sigma}L(\mu,\Sigma)

我们可以穷举所有的 μ \mu Σ \Sigma ,找到使上面式子结果最大。

平均就是 μ \mu^*

μ = 1 79 n = 1 79 x n \mu^* = \frac{1}{79} \sum_{n=1}^{79} x^n
Σ \Sigma^*

Σ = 1 79 n = 1 79 ( x n μ ) ( x n μ ) T \Sigma^* = \frac{1}{79} \sum_{n=1}^{79} (x^n - \mu^*)(x^n - \mu^*)^T

然后根据上面的公式算出来两个类别的 μ \mu Σ \Sigma :

在这里插入图片描述

现在我们就可以进行分类了!
我们只要算出 P ( C 1 x ) P(C_1|x) 的几率,根据下式:

P ( C 1 x ) = P ( x C 1 ) P ( C 1 ) P ( x C 1 ) P ( C 1 ) + P ( x C 2 ) P ( C 2 ) P(C_1|x) = \frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1)+P(x|C_2)P(C_2)}

如果 P ( C 1 x ) > 0.5 P(C_1|x) > 0.5 ,那么x就属于类别1(水系)。

我们已知了 P ( C 1 ) P(C_1) P ( C 2 ) P(C_2) ,然后代入 μ 1 \mu^1 Σ 1 \Sigma^1 得出 P ( x C 1 ) P(x|C_1) 的值,同理可得出 P ( x C 2 ) P(x|C_2) 的值,整个式子的结果就可以计算出来了。

那结果怎样?

在这里插入图片描述

蓝色的点是水系的神奇宝贝的分布,红点时一般系的分布。

在这里插入图片描述

红色区域几率大于0.5是类别1;蓝色区间几率小于0.5,是类别2。

然后把这个模型用于测试数据,发现正确率只有47%,但此时我们只考虑了两个特征。

我们把所有特征都考虑进来(共7个),结果准确率也只有54%。
上面得出的分类结果不太好,我们优化一下模型,让两个类别共用同一个 Σ \Sigma

在这里插入图片描述

假设水系79个神奇宝贝是从 μ 1 , Σ \mu^1,\Sigma 的高斯分布生成出来的,同时另外61只(编号从80开始)神奇宝贝从 μ 2 , Σ \mu^2,\Sigma 的高斯分布生成出来,这两个分布的协方差矩阵是同一个。

那该怎么计算最大似然呢?

L ( μ 1 , μ 2 , Σ ) = f μ 1 , Σ ( x 1 ) f μ 1 , Σ ( x 2 ) f μ 1 , Σ ( x 3 ) f μ 1 , Σ ( x 79 ) × f μ 2 , Σ ( x 80 ) f μ 2 , Σ ( x 81 ) f μ 2 , Σ ( x 82 ) f μ 2 , Σ ( x 140 ) L(\mu^1,\mu^2,\Sigma) = f_{\mu^1,\Sigma}(x^1)f_{\mu^1,\Sigma}(x^2)f_{\mu^1,\Sigma}(x^3)\cdots f_{\mu^1,\Sigma}(x^{79}) \\ \times f_{\mu^2,\Sigma}(x^{80})f_{\mu^2,\Sigma}(x^{81})f_{\mu^2,\Sigma}(x^{82})\cdots f_{\mu^2,\Sigma}(x^{140})

μ 1 , Σ \mu^1,\Sigma 产生 x 1 x^1 x 79 x^{79} ,用 μ 2 , Σ \mu^2,\Sigma 产生 x 80 x^{80} x 140 x^{140}

μ 1 \mu^1 μ 2 \mu^2 的计算方法和前面的相同。

Σ \Sigma 的取值为

Σ = 79 140 Σ 1 + 61 140 Σ 2 \Sigma = \frac{79}{140}\Sigma^1 + \frac{61}{140}\Sigma^2

然后再看一下结果,看有什么改进没

在这里插入图片描述
在考虑了所有特征的情况下,准确率到了73%,右边的模型也称为线性模型。

总结一下上面的步骤

在这里插入图片描述

如果所有特征(维度)都是独立的,那么你可以尝试使用朴素贝叶斯分类器

Sigmoid 函数

P ( C 1 x ) = P ( x C 1 ) P ( C 1 ) P ( x C 1 ) P ( C 1 ) + P ( x C 2 ) P ( C 2 ) P(C_1 | x ) = \frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1) + P(x|C_2)P(C_2)}

我们来整理下这个式子,上下同除分子,得到:

1 1 + P ( x C 2 ) P ( C 2 ) P ( x C 1 ) P ( C 1 ) \frac{1}{1 + \frac{P(x|C_2)P(C_2)}{P(x|C_1)P(C_1)}}
z = l n P ( x C 1 ) P ( C 1 ) P ( x C 2 ) P ( C 2 ) z = ln \frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)}

因为 l n 1 x = l n x 1 = l n x ln \frac{1}{x} = ln x^{-1} = - ln x 以及 e l n x = x e ^ {ln x} = x

所以就有上式等于:

1 1 + e z = σ ( z ) \frac{1}{1 + e ^{-z}} = \sigma (z)

这个函数叫做Sigmoid函数,它的图形为:

在这里插入图片描述

接下来算一下 z z 应该是怎样的 z = l n P ( x C 1 ) P ( C 1 ) P ( x C 2 ) P ( C 2 ) z = ln \frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)}

P ( C 1 x ) = σ ( z ) ,    z = l n P ( x C 1 ) P ( C 1 ) P ( x C 2 ) P ( C 2 ) P(C_1|x)=\sigma(z),\,\,z = ln \frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)} \\
把相乘的部分变成相加得

z = l n P ( x C 1 ) P ( x C 2 ) + l n P ( C 1 ) P ( C 2 ) z = ln \frac{P(x|C_1)}{P(x|C_2)} + ln \frac{P(C_1)}{P(C_2)}

P ( C 1 ) P ( C 2 ) = N 1 N 1 + N 2 N 2 N 1 + N 2 = N 1 N 2 \frac{P(C_1)}{P(C_2)} = \frac{\frac{N_1}{N_1 + N_2}}{\frac{N_2}{N_1 + N_2}} = \frac{N_1}{N_2}

N 1 N_1 代表Class1在训练数据集中出现的次数, N 2 N_2 代表Class2在训练集中出现的次数。

P ( X C 1 ) = 1 ( 2 π ) D / 2 1 Σ 1 1 / 2 e x p { 1 2 ( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) } P(X|C_1) = \frac{1}{(2\pi)^{D/2}} \frac{1}{|\Sigma^1|^{1/2}}exp\{-\frac{1}{2}(x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1)\}

P ( X C 2 ) = 1 ( 2 π ) D / 2 1 Σ 2 1 / 2 e x p { 1 2 ( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) } P(X|C_2) = \frac{1}{(2\pi)^{D/2}} \frac{1}{|\Sigma^2|^{1/2}}exp\{-\frac{1}{2}(x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2)\}

l n P ( x C 1 ) P ( x C 2 ) = l n 1 ( 2 π ) D / 2 1 Σ 1 1 / 2 e x p { 1 2 ( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) } 1 ( 2 π ) D / 2 1 Σ 2 1 / 2 e x p { 1 2 ( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) } = l n Σ 2 1 / 2 Σ 1 1 / 2 e x p { 1 2 [ ( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) ( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) ] } = l n Σ 2 1 / 2 Σ 1 1 / 2 1 2 [ ( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) ( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) ] \begin{aligned} ln \frac{P(x|C_1)}{P(x|C_2)} &= ln \frac{\bcancel{\frac{1}{(2\pi)^{D/2}}} \frac{1}{|\Sigma^1|^{1/2}}exp\{-\frac{1}{2}(x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1)\}} {\bcancel{\frac{1}{(2\pi)^{D/2}}} \frac{1}{|\Sigma^2|^{1/2}}exp\{-\frac{1}{2}(x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2)\}} \\ &= ln \frac{|\Sigma^2|^{1/2}}{|\Sigma^1|^{1/2}} exp\{-\frac{1}{2}[(x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1) - (x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2)]\} \\ &= ln \frac{|\Sigma^2|^{1/2}}{|\Sigma^1|^{1/2}} - \frac{1}{2}[(x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1) - (x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2)] \end{aligned}
接下来把 ( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) (x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1) 展开

( x μ 1 ) T ( Σ 1 ) 1 ( x μ 1 ) = x T ( Σ 1 ) 1 x x T ( Σ 1 ) μ 1 ( μ 1 ) T ( Σ 1 ) 1 x + ( μ 1 ) T ( Σ 1 ) 1 μ 1 = x T ( Σ 1 ) 1 x 2 ( μ 1 ) T ( Σ 1 ) 1 x + ( μ 1 ) T ( Σ 1 ) 1 μ 1 \begin{aligned} (x-\mu^1)^T(\Sigma^1)^{-1}(x-\mu^1) &= x^T(\Sigma^1)^{-1}x - x^T(\Sigma^1)\mu^1 - (\mu^1)^T(\Sigma^1)^{-1}x + (\mu^1)^T(\Sigma^1)^{-1}\mu^1 \\ &= x^T(\Sigma^1)^{-1}x - 2(\mu^1)^T(\Sigma^1)^{-1}x + (\mu^1)^T(\Sigma^1)^{-1}\mu^1 \end{aligned}

( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) (x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2) 展开:

( x μ 2 ) T ( Σ 2 ) 1 ( x μ 2 ) = x T ( Σ 2 ) 1 x 2 ( μ 2 ) T ( Σ 2 ) 1 x + ( μ 2 ) T ( Σ 2 ) 1 μ 2 \begin{aligned} (x-\mu^2)^T(\Sigma^2)^{-1}(x-\mu^2) &= x^T(\Sigma^2)^{-1}x - 2(\mu^2)^T(\Sigma^2)^{-1}x + (\mu^2)^T(\Sigma^2)^{-1}\mu^2 \end{aligned}

所以 z z 可以写成:

z = l n Σ 2 1 / 2 Σ 1 1 / 2 1 2 x T ( Σ 1 ) 1 x + ( μ 1 ) T ( Σ 1 ) 1 x 1 2 ( μ 1 ) T ( Σ 1 ) 1 μ 1 + 1 2 x T ( Σ 2 ) 1 x ( μ 2 ) T ( Σ 2 ) 1 x + 1 2 ( μ 2 ) T ( Σ 2 ) 1 μ 2 + l n N 1 N 2 \begin{aligned} z &= ln \frac{|\Sigma^2|^{1/2}}{|\Sigma^1|^{1/2}} - \frac{1}{2} x^T(\Sigma^1)^{-1}x + (\mu^1)^T(\Sigma^1)^{-1}x - \frac{1}{2} (\mu^1)^T(\Sigma^1)^{-1}\mu^1 \\ &+ \frac{1}{2}x^T(\Sigma^2)^{-1}x -(\mu^2)^T(\Sigma^2)^{-1}x + \frac{1}{2} (\mu^2)^T(\Sigma^2)^{-1}\mu^2 + ln \frac{N_1}{N_2} \end{aligned}

而我们上面说过,如果共用 Σ \Sigma 的话,那么就有 Σ 1 = Σ 2 = Σ \Sigma_1 = \Sigma_2 = \Sigma

那么上式有:

z = l n Σ 2 1 / 2 Σ 1 1 / 2 1 2 x T ( Σ 1 ) 1 x + ( μ 1 ) T ( Σ 1 ) 1 x 1 2 ( μ 1 ) T ( Σ 1 ) 1 μ 1 + 1 2 x T ( Σ 2 ) 1 x ( μ 2 ) T ( Σ 2 ) 1 x + 1 2 ( μ 2 ) T ( Σ 2 ) 1 μ 2 + l n N 1 N 2 = ( μ 1 μ 2 ) T Σ 1 x 1 2 ( μ 1 ) T ( Σ 1 ) 1 + 1 2 ( μ 2 ) T ( Σ 2 ) 1 μ 2 + l n N 1 N 2 \begin{aligned} z &= \bcancel{ln \frac{|\Sigma^2|^{1/2}}{|\Sigma^1|^{1/2}}} - \cancel{\frac{1}{2} x^T(\Sigma^1)^{-1}x} + (\mu^1)^T(\Sigma^1)^{-1}x - \frac{1}{2} (\mu^1)^T(\Sigma^1)^{-1}\mu^1 \\ &+ \cancel{\frac{1}{2}x^T(\Sigma^2)^{-1}x} -(\mu^2)^T(\Sigma^2)^{-1}x + \frac{1}{2} (\mu^2)^T(\Sigma^2)^{-1}\mu^2 + ln \frac{N_1}{N_2} \\ &= (\mu^1-\mu^2)^T\Sigma^{-1}x - \frac{1}{2}(\mu^1)^T(\Sigma^1)^{-1} + \frac{1}{2}(\mu^2)^T(\Sigma^2)^{-1}\mu^2 + ln \frac{N_1}{N_2} \end{aligned}

假设 w T = ( μ 1 μ 2 ) T Σ 1 w^T = (\mu^1-\mu^2)^T\Sigma^{-1} ,后面这一项其实就是一个常数,另 b = 1 2 ( μ 1 ) T ( Σ 1 ) 1 + 1 2 ( μ 2 ) T ( Σ 2 ) 1 μ 2 + l n N 1 N 2 b = - \frac{1}{2}(\mu^1)^T(\Sigma^1)^{-1} + \frac{1}{2}(\mu^2)^T(\Sigma^2)^{-1}\mu^2 + ln \frac{N_1}{N_2}

因为 P ( C 1 x ) = σ ( z ) P(C_1|x) = \sigma(z)

z = w x + b z = w \cdot x + b

也就有 P ( C 1 x ) = σ ( w x + b ) P(C_1|x) = \sigma(w \cdot x + b)

它解释了为什么共用 Σ \Sigma 时界线是线性的。

在生成模型中,我们找出 N 1 , N 2 , μ 1 , μ 2 , Σ N_1,N_2,\mu^1,\mu^2,\Sigma 就可以代入上式,然后就能算出几率

但是为什么要这么麻烦呢?最终要找到一个向量 w w 和一个常量 b b ,如果我们能否直接找出 w w b b 就好了。

发布了131 篇原创文章 · 获赞 38 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/yjw123456/article/details/103173851
今日推荐