Classification:Probabilistic Generative

What's classification?

首先,Classification是让机器进行一个分类,这个分类需要我们提供一些判断条件,然后机器会输出给我们它的判断结果,这个结果可以是二元的,也可以是N元的。

我们今天学习的是一种分类方法,用的是概率生成模型。

file

An example

今天的例子是根据一个宝可梦的一些数值来对它的系别进行一个分类。

file

假设我们要进行一个二元分类。我们就要找一个Model,然后寻找让Loss最小的参数来完成这个分类。

file

那么该如何进行一个分类呢,首先我们能不能简单的把一个Classification当成一个Regression去硬解。

如果我们找到一个Regression的Model去硬解,然后它的目标接近1,就把它归为Class1,如果它接近-1,就把它归为Class2.

file

进行Regression时,我们希望它会是下面图一的效果,但是实际上会出现图二这种,Regression会照顾那些远大于1的点(因为它希望让那些比较大的点变得没有那么大,更接近这个边界),它会把分界线往那边靠,所以实际分类效果并不会很好。

所以不能简单用Regression来进行一个Classification。
file

那么该如何进行一个分类呢?我们先来看一个概率论中的概率问题。

假设有两个盒子,里面各装有不同数量的蓝球和绿球。然后我们已经拿到了一个蓝球,试问它来自盒1的概率?

其实就是一个贝叶斯公式,也就是执果索因。

file

所以我们可以运用贝叶斯公式来对这个宝可梦进行一个分类。

file

我们发现我们可以轻易得出P(C1)和P(C2),即这两个系别被选中的概率,和他们的数量有关。

file

假设我们得到了一只乌龟,要对这个乌龟进行系别分类,看他它属于水系还是普通系!

所以根据公式,我们要求的就是在这两个系别中选出我们抽出的这个乌龟的概率。

file
我们会发现,在我们手中的数据中,可能没有这只乌龟,是不是在这系别中选出该乌龟的概率为0呢?

答案肯定不是,因为我们的数据只是一部分,要得到在指定系别中摇出乌龟的概率,我们要建立一个高斯分布模型,然后通过它来计算

file

下述就是用高斯分布来确定在某个系别中摇出乌龟的概率。

其中,μ表示的是均值的一个集合(并不是我们拥有数据的一个mean,而是我们估计出来整体的)

Σ是表示方差的一个集合

file

file

我们关注的是:

怎么找出一个最好的μ*,Σ*来让我们计算的这样一个概率更精确。

file

同样可以建议一个函数Likelihood来评判不同μ,Σ的好坏!

file
最终我们通过类似前面确定Loss函数的参数一样求偏微分,得到这样的一个μ*,Σ*。

file

现在我们分别得出在两个系别中摇出乌龟的概率。

file

然后计算出这只乌龟属于第一类即水系的概率,如果这个概率大于0.5就将其归为水系。

file

我们发现当我们只考虑防御和特防的时候,分类的准确率在47%左右。即使我们考虑到宝可梦全部的6项数值时,正确率也只有64%(正确率得到提升是因为特征增加,就会分的更细,整体差距就会进一步明显).

file

能不能改进一下我们的这个Model?

我们可以让不同类的他们的Σ使用同一个Σ,来是这个模型中的参数减少,进而达到优化目的。
file

file

我们发现在改进模型之后我们的预测准确率得到大幅度提升,从54%提升到73%,然后这个分类的边界也变成一个线型分界(后面讲原因),也就是说分界更明确。

file

所以我们小小总结一下,进行一个概率生成分类有以下三步:

file

而且我们在进行概率计算时,可以把不同特征分开来计算,用他们的乘积来代表一个复合的概率,但是实际上对于我们这个例子来说并不好,因为宝可梦不同特属性之间的相互影响还是比较大的,如果面对一个它的各个特征相互独立的案例,我们分别计算单独特征的概率可能比较简单而且结果也比较好,当然这些要看实际情况。

file

补:使用相同方差Vector,分类边界呈线性的原因.

先设一个z来简化这个表达式,然后将表达式令成关于z的函数δ(z).

file

然后经过一系列的化简处理.

file

file

file

发现确实只有一项与特征值x相关,其余是一个常数,所以结果中的分界线会呈一条直线。

file

于是我们不禁思索:

既然我们最终得出了这样一个表达式。我们可不可以直接得出这里的w和b的值,而不去进行上述那些复杂的计算?(之后再讲)