作者:hooly
微信公号:一口袋星光
想要判断一个X到底属于哪个分类?我们就判断X从哪个分类生成的可能性最大,这就是generative model的原理。
假设我们的training data共有两个class,分别是C1和C2。
如果P(C1|x)>0.5:那我们认为x属于C1的可能性比较大;
如果反之:那我们认为x属于C2的可能性比较大。
有以下公式成立:
我们要求解P(C1|x)
P(C1)和P(C2)是很容易计算的:P(C1)= C1/C1+C2;P(C2) = C2/C1+C2
难度在于计算P(x|C1)和P(x|C2)
计算P(x|C1):
我们假设C1是由一个Gaussian distribution来sample的。我们的目的是找到最有可能sample出C1的Gaussian Distribution。
我们知道Gaussian Distribution的公式为:
这个公式的核心是找到μ和Σ,使C1中所有的data来自于这个Gaussian Distribution的概率最大:
这就是maximum likelihood:
C1中所有的data来源于这个Gaussian Distribution的概率最大,也就是说C1中每一个data来自于这个Gaussian Distribution的概率的乘积最大。
我们可以求得以下μ和Σ:
也就是说 这个C1最有可能是从我们刚得到的这个μ和Σ构成的Gaussian Distribution中sample来的,我们就用这个Gaussian Distribution来表示C1。
我们把x代入,得到C1中生成x的概率,也就是P(x|C1),依次类推,我们得到P(x|C2)。
然后把我们刚计算得到的P(C1)和P(C2),代入文章最开头的公式:
即可得到P(C1|x)
但是:
我们往往发现这样的效果不太好,testing data准确率不够高。怎么做?
在真正的进行计算中,我们通常不会给class1和class2的这两个Gaussian Distribution赋予两个不同的协方差矩阵Σ。model的参数越多,越容易出现varience,也就是说越容易造成over-fitting。
如果我们要有效的减少参数的话,我们给这两个Gaussian Distribution同样的Σ。将C1sample的数量除以C1+C2中sample的数量作为Σ1的权重,同理作为Σ2的权重,我们得到了一个Σ作为新的同时代表C1和C2的Σ。
根据这个结果,我们可以看到分界线bonudary呈线性的:
神奇的是,我们得到了更高的准确性。
在P(x|C1)中x可以用一个向量来表示,x = [x1,x2,x3,x4,...xk]
这时候,如果你认为所有的维都是independent,那么其实你用的就是朴素贝叶斯分类器(navie Bayes classifier)
作者:hooly
微信公号:一口袋星光
我会在微信公号上持续更新我的文章,你来讨论我很欢迎。