classification可以用来信用评估来决定是否借给某一个钱,或者用于医疗诊断,通过他的一系列信息来诊断出患何种疾病等等分类的问题。
我们再来举宝可梦的例子:
比如说宝可梦有很多属性,现在input一个皮卡丘,那么output就是雷。
image.png
那么问题来了,你怎么把皮卡丘当作input呢?因为input的东西需要数值化,你需要用数字来表示宝可梦,才能放到function里面。
比如说一只皮卡丘总评分320点,hp35点,攻击力55点,防御力40点,特殊攻击力50点,特殊防御力50点,速度90点,那么我们就可以用一个vector来表示这只皮卡丘!
How to do classification
如果没有学过classification,那么好像可以用regression来解决这个问题。
我们用class1 代表1,class2代表-1,然后训练model,如果你的model输出接近1,那么你可以想成它是class1,相反是class2。但如果你这样做会遇到一个什么问题呢?
比如说你现在的model是y=b+w1x1+w2x2,我们input两个feature,如果你用regression来想这件事情的话,那么蓝色的点的值我们都希望它越接近1越好,红色的点我们希望越接近-1越好,这件事可能做得到,如果你把这些点丢进去learn,真的找出参数b,w1,w2的话,你会发现此时y就是绿色的这条线。
上面的效果看上去不错,但是假设你今天的class1的分布不是上图这样子,而是下图这样子。
image.png
此时绿色的线有什么问题呢?对于这个分布来说,离绿色线越远的地方,值远远大于1,如果用绿色这个model做regression的话,它的结果是可能远大于1的,但是你用regression的话你会希望蓝色的点都是越接近1越好,太大不行,太小也不行。所以你做regression后结果不会是绿色那条,而是紫色那条线,为了使右下角的蓝色点的值压小,这样的function对regression来说才是一个比较好的结果。但显然,对classification来说,绿色的才是比较好的结果。所以,regression定义对model的好坏的方式不适用于classification!它会惩罚一些太过正确的点(output的值太大的点)。
所以我们应该怎么做呢?理想的选择是这样的。
ideal alternatives
在做regression的时候它的output是一个number,但是在classification的时候它的output是一个class。假如对于一个二元分类的问题的话,我们选择一个function,我就说我们在要找的function里面内建一个function g(x),如果g(x)的输出大于0,就说是class1,否则就是class2。
对于Loss function的定义如下,如果输出的分类是正确的分类,那δ的值就为1,否则为0,然后全部加起来,也就是分类错误的次数。
先用概率的思想举个例子。
例如有两个盒子,分别放着两种颜色的球。我现在抽到了一个蓝色的球,那么这个球来自这两个盒子的概率分别是多少?
盒子1中蓝球占总的2/3,盒子2中蓝球占总的1/3,从盒子1中抽一个蓝球的概率为4/5,从盒子2中抽一个蓝球的概率为2/5,那么,如果我现在抽到一个蓝球,那么这个蓝球来自盒子1的概率就如上图公式所示。
那么这跟分类有什么关系呢?
现在我们把盒子换成分类1和2,把蓝球换成宝可梦。
image.png
要计算P(x|C1),我们就需要知道如上四个值,这几个值怎么来呢?我们就希望从训练集中把这些值估测出来。这一整套办法就叫做Generative Model,为什么叫Generative Model呢?因为有了这个model,你可以用它generate一个x。你可以计算某一个x出现的几率。
现在我们拿宝可梦的水系和一般系来举例。
image.png
那么问题是,如果给我一只宝可梦x,如何判断是C1类的概率?比如我现在给你一只海龟,怎么判断它是来自水系的概率?
image.png
然后我们把宝可梦用特征向量表示出来,这里只考虑防御力和特殊防御力。在二维平面上,每个点就代表了一个宝可梦。但是现在如果给我们一个新的点,比如说海龟,是我们training data里没有的宝可梦,从我们已经有的79只宝可梦中估算出从水系宝可梦中抽一只是海龟的几率到底有多少?你可以把这79只宝可梦当作冰山一角,这79个宝可梦是从水系宝可梦的高斯分布(正态分布)中sample出来的,我们只是挑出了79个点得到的分布是这个样子。 image.png
但是从整个水系的高斯分布中,我们抽到这个海龟的概率是多少(虽然你训练集中没有这个海龟,但是对于整个高斯分布中是可能抽到海龟的?
现在我们要做的是如果给我们这79个点的分布,怎样找到整个水系的高斯分布?
Gaussian Distribution
image.png可以把高斯分布当作一个function,这个function的输入是宝可梦x,输出是宝可梦x来自这个高斯分布的概率。这个概率是由两个参数决定的,一个是平均值 μ ,另一个是协方差矩阵covariance matrix ∑。如果你把不同的μ和∑带入到高斯分布的公式中,那么他就会有不同的形状(以2维举例)。
image.png
接下来的问题是,给我们一个高斯分布,从这个分布中sample79次后,sample出79个点,我们把这79个点的平均值μ和协方差矩阵∑求出来,给我们一个新的点New x,不是这79个点里的,但是我们此时可以把这个高斯分布写出来,然后把新的New x带入高斯分布中求出概率。可以这么想,如果New x越接近红圈中心点,那么它在这个高斯分布中sample出的几率就越大! image.png
那么如何找出这79个点的平均值μ和协方差矩阵∑呢?用到的概念是maximum likelihood。你可以想象其实这79个点可以从任何一个高斯分布中sample出来的,只是有些地方几率很低,有些地方几率很高。虽然每一个高斯分布都有可能sample出这79个点,但每个高斯分布sample出的likelihood/几率是不一样的。所以现在给我们一个已知平均值μ和协方差矩阵∑的高斯分布,我们就可以求出sample出这79个点的几率。这个可能性我们用L(μ,∑)来表示。
image.png
每次sample出一个点的几率是相互独立的,所以sample出这79个点的概率就如上述公式。
所以我们有79只水系宝可梦从某个高斯分布中sample出,接下来我们做的就是找到这个高斯分布。(找一个高斯分布,sample出这79个点的概率最大)。用L(μ,∑)表示maximum likelihood 。所以我们现在的任务就是穷举所有的μ,∑,使得L(μ,∑)最大!
其实都不用解那个公式,最优解μ,∑一看就能看出来。
这79个点的平均值就是最优解μ,协方差矩阵就是最优解∑。(这咋又绕回来了)
结果如下图:
image.png
好了,现在我们可以做分类了。就用贝叶斯公式,求出sample出一个x来自C1的概率。因为我们已经求出了从C1、C2的高斯分布,所以就能求出从C1、C2sample出一个x的概率,带入贝叶斯公式就ok。如果结果大于0.5,那么就认为是class1。
image.png
结果如何?
image.png
事实结果还不如瞎猜,因为只是取了两个特征!取高纬度特征结果会好一点。
Model modify
covariance matrix是跟input的feature size的平方成正比的,所以feature size较大的时候,covariance matrix会增长的很快,那如果不同的高斯分布都给他不同的covariance matrix的话,它的model参数就会很多,variance就大,就容易overfitting!所以我们现在给这两个高斯分布同样的covariance matrix。
image.png
image.png
Review Tree Steps
我们来回顾一下这个几率模型,分为3步。
-
1.Function Set(Model)
首先你有一个model,就是function set,这些function都长成这个样子。 image.png
input一个x,我们有P(C1),P(C2),C1产生x的概率P(x|C1),C2产生x的概率P(x|C2),这些就是model的参数,选择不同的概率分布,你就得到不同的function,就是一个function set。 -
2.Goodness of a function
从这些function里找到好的function,在几率的模型里面,假设使用高斯分布的话,也就是找高斯里面的参数,μ,∑,你用这写参数去定义我们的model产生的几率高低就是这组参数的好坏。 -
3.Find the best function
找到最好的就ok。
为什么选高斯分布?
其实你可以选择任何一个你喜欢的分布。
Posterior Probability
将贝叶斯公式化简,能得到如下结果。
image.png什么!竟然得到了sigmod函数?
z趋于无穷大的时候,sigmod等于1,
z趋于无穷小的时候,signed等于0。接下来我们要做的是算一下z到底长什么样子!
image.png
将两个高斯分布相除再取ln,得到如下结果:
image.png
接下来把上述公式展开,
image.png
最终,z长这个样子。但是一般来说,我们假设两个model的covariance matrix是相同的,所以∑1和∑2是相同的。所以可以消掉一部分。因为只有一部分与x有关,剩下的当作常数,把μ1-μ2当作一个vector,剩下的当作bias。所以我们的公式最终可以写成这个样子。所以你现在明白为什么我们把∑1和∑2设成相同的话最终的model是linear model!我们在generative中的工作就是找出下述式子中的N1,N2,∑,μ1,μ2,找出这些以后你就算出w和b,然后得出几率。显然这个方法有些舍近求远,为什么不能直接把w和b找到?而要通过这么一大堆参数来确定w和b?
image.png
这个就是我们下一章的内容,logistics regression!
网友评论