研究背景

本节目的

Classification:Probabilistic Generative Model(直译:分类:概率生成模型)
找到如下函数
hung-yi lee_p10_Classification

本节要使用的例子

输入一个宝可梦,输出宝可梦的类别
hung-yi lee_p10_Classification
如何将输入转化为数值,我们可以提取宝可梦的如下七个属性
hung-yi lee_p10_Classification

研究过程

把分类当成回归来算

首先以二分类为例,用1代表种类1,-1代表种类2。由于回归的输出是一个数值,我们把接近1的值当成是1,把接近-1的值当成-1。
如下图所示
hung-yi lee_p10_Classification
具体实施时,我们希望,当有如下图所示的样例分布时,红色点的(x1,x2)代入y=b+w1x1+w2x2时输出更接近-1,蓝色点更接近1,则中间那条分界线(绿线)就是b+w1x1+w2x2=0(图中标错了),在它左上方的y值是小于0的,右下方是大于0的
hung-yi lee_p10_Classification
但是如果分布是如下图所示呢?在Regression看来,更好的是紫色的那条线,但在Classification看来绿色的那条线才是更适用的。显然用回归的方法来做分类此时已经不合适
hung-yi lee_p10_Classification
这还仅仅是二分类。如果是多分类呢,如果效仿下面的做法,那么Class2与Class3的关系是要比Class1与Class3的关系更近的。但实际未必如此,所以再次印证了用回归来做分类是不合适的。
hung-yi lee_p10_Classification

理想做法

Function(Model):希望f(x)内置一个g(x),具体如下图所示,当然这个g(x)也要能训练出来的
hung-yi lee_p10_Classification
损失函数的定义:统计f(x)与真实结果不相等的次数,delta在预测值与真实值不相等时为1,相等时为0
hung-yi lee_p10_Classification
找到最佳函数的方法:Perceptron SVM(但今天先不讲)

找到最佳函数的方法

首先看下面这个例子,取出一个蓝色球,求它是从盒子1里面取出的概率
hung-yi lee_p10_Classification
把盒子1和盒子2换成类别1和类别2,我们要计算x属于类别1的几率需要知道如下图所示4个数值。希望能从训练集把这4个数值估测出来。
hung-yi lee_p10_Classification

这一整套想法就叫做Generative Model(生成模型)因为它能够生成某个x产生的几率。
hung-yi lee_p10_Classification
首先来计算P(C1)和P(C2)。暂时先考虑water(水系)和normal(一般系)。并且把ID小于400的宝可梦当作是训练集,其余的当作测试集。
统计后发现ID小于400的宝可梦中有79只水系,61只一般系。则易算得P(C1)和P(C2)
hung-yi lee_p10_Classification
接着看另外两个值的求法。从水系的神奇宝贝里面挑一只宝可梦是海龟的几率是多大?(这个海龟的ID不在前四百,即不在那79只当中)
首先明确每一只宝可梦都可以用向量来描述它的属性
hung-yi lee_p10_Classification
把这个向量(vector)叫做特征(feature)
hung-yi lee_p10_Classification
暂时先考虑7个当中的2个,防御力和特殊防御力。得到如下所示的图片,上面的每一个点代表一只宝可梦。
hung-yi lee_p10_Classification
现在对于图中从未出现的点(那个海龟),怎么预测它是水系宝贝的概率?
假设选出的79个点满足Gaussian distribution(高斯分布,即正态分布)
hung-yi lee_p10_Classification
如何理解高斯分布?
输入:向量
输出:该向量从分布当中被选出来的几率
这个函数的形状由mean mu和variance(矩阵) sigma决定的
同样mu和不同的sigma代表几率分布的最高点一样,分布不同
hung-yi lee_p10_Classification
回到之前的问题,如何求一个新的点出现的概率。
hung-yi lee_p10_Classification
假设我们已经得到分布的mean值mu和covariance值sigma。就可以把高斯分布的f(x)写出来,这样新的点的几率就可以求得。
hung-yi lee_p10_Classification
现在问题转化为mean值mu和covariance值sigma怎样找到?
这里用到一个方法——maximum likelihood(极大似然)
注:似然(likelihood)这个词其实和概率(probability)是差不多的意思
但是在统计里面,似然函数和概率函数却是两个不同的概念。对于这个函数:
hung-yi lee_p10_Classification
输入有两个:x表示某一个具体的数据;θ表示模型的参数。
如果θ是已知确定的,x是变量,这个函数叫做概率函数(probability function),它描述对于不同的样本点x,其出现概率是多少。
如果x是已知确定的,θ是变量,这个函数叫做似然函数(likelihood function), 它描述对于不同的模型参数,出现x这个样本点的概率是多少。
最大似然法的核心是:既然一件事情已经发生了,我们就把它当作概率最大的。
具体可以参见知乎回答https://zhuanlan.zhihu.com/p/26614750
我们要用的似然函数如下(L取自likelihood)
hung-yi lee_p10_Classification
其中
hung-yi lee_p10_Classification
然后要做的事情是,穷举所有的mu和sigma,看哪个可以使得上面的式子的值最大,记作mu和sigma
比较直观的求法是
hung-yi lee_p10_Classification
总结一下,最大似然法做的事是,输入一个高斯分布,输出mean值mu和covariance值sigma
hung-yi lee_p10_Classification

研究成果运用

运用过程

现在假设我们已经得到了分类函数,即刚才想要的四个值都找到了。可以用它来求海龟是水系神奇宝贝的概率了(在式中是x属于C1的概率)。如果概率大于0.5,我们就认为这个宝贝是水系的。过程如下所示
hung-yi lee_p10_Classification

结果

如下图所示,右上为训练集,红色区域认为是水系的宝可梦,可以看到蓝点较多,蓝色区域认为是一般系的宝可梦。将其运用到测试集上,如右下所示。准确率为47%。
hung-yi lee_p10_Classification
但是机器学习厉害的地方在于不止可以处理二维数据,对于七维的数据一样可以算,但发现准确率仍然只有54%。
hung-yi lee_p10_Classification

方法改进

比较常见的情况是,不同的类型可以共享同一个covariance矩阵。
作用:减少了模型的参数。
解释:如果每个类别的分布使用不同的sigma值,会造成模型的参数多,variance也就大,也就容易过拟合。
也就是,最大似然函数会改写成如下的形式,mu1和mu2与之前的求法相同,注意共同的sigma的求法使用原先的两个sigma乘权重求和
hung-yi lee_p10_Classification
改进后的分类结果如下
发现分界线由曲转直,故也称这个模型为Linear Model
发现在七维环境下正确率上升到73%
hung-yi lee_p10_Classification

模型总结

hung-yi lee_p10_Classification

讨论

为什么选择正态分布模型?

概率分布的选择未必一定要是高斯分布。选择简单的模型,bias就大,variance就小;反之相反。
如果遇到两个属性组成的特征(二维)情况,可以采用伯努利分布。
如果假设所有维度都是独立的,可以采用朴素贝叶斯分类器。

关于后验概率的求法之化简与改进猜想

之前用来算后验概率的函数其实是z的sigmoid函数
hung-yi lee_p10_Classification
接下来的问题是z应该如何求得
hung-yi lee_p10_Classification
将上式化简
hung-yi lee_p10_Classification
进一步化简和替换
hung-yi lee_p10_Classification
但是注意到covariance的值 sigma是共用的
hung-yi lee_p10_Classification
发现组成z的四项当中只有第一项是含有x的,我们将其记作w^T,后三项之和记作b
hung-yi lee_p10_Classification
因而z的sigmoid函数可以简写为
hung-yi lee_p10_Classification
也就是我们得到w和b的方法是通过N1 N2 mu1 mu2 sigma
hung-yi lee_p10_Classification
为什么要舍近求远呢?为什么不直接求出w和b呢?这就是下一节逻辑回归要讲的内容。

相关文章: