零基础入门深度学习四:生成模型

Generative 美 [ˈdʒɛnərətɪv, -əˌre-] : 能生产的,有生产力的; 生殖的;

 Model 美 [ˈmɑdl] : 模型

likelihood [ˈlaɪkliˌhʊd] : 似然函数

Maximum 美 [ˈmæksəməm] : 最大值

features 美 ['fitʃəz] : 特征

vector 美[ˈvɛktɚ] : 向量

matrices 美 [ˈmetrɪˌsiz, ˈmætrɪ-] :矩阵

本文是对李宏毅教授课程的笔记加上自己的理解重新组织,如有错误,感谢指出。视频及 PPT 原教程:https://pan.baidu.com/s/1raoObGo 密码:31cw

前边我们讲的线性回归模型主要做预测,而这里的 Generative Model 则主要用于分类问题。

问题提出

同样我们以神奇宝贝为例,进行分类。

零基础入门深度学习四:生成模型_第1张图片

假如我们有以下的数据

零基础入门深度学习四:生成模型_第2张图片

假如我们有 79 只 Water , 61 只 Normal 。为了问题的简单化,我们假设神奇宝贝的 attackstrongtype 只有两类,一种是 Normal,一种是 Water。我们先选取它的两组属性 Defense 和 SP Defence(图中未显示) 来预测它是属于 Normal 还是 Water。也就是说每一个个体可以由一个向量表示:

我们需要找到一个 f ,把 x 输入即可输出 x 属于哪一类,Class1 ( Water) 还是 Class2 ( Normal )

Model

零基础入门深度学习四:生成模型_第3张图片

P(C1) 代表属于 Class1 的个体占整个样本比例。P(C1 | x) 代表 x 属于 Class1 的概率。

这个公式其实是贝叶斯公式和全概率公式的结合,具体讲解可以看   http://www.ruanyifeng.com/blog/2011/08/bayesianinferencepart_one.html 的推导,非常通俗易懂。

为什么大于 0.5 就是 Class1?否则就是 Class 2。因为这个问题是二元分类,如果 P(C1 | x) 大于 0.5 那么 P(C1 | x) 一定大于 P(C2 | x) ,所以我们判断当前 x 属于 Class1。反之同理。

如果是多元分类该怎么办?把 P(C1 | x)、P(C2 | x)、P(C3 | x)、P(C4 | x)......每个概率都算出来,哪个大就说明它属于哪一类。

观察到公式 P(C1) 和 P(C2) 非常好算,无非是用属于 Class1(Water) 的个体数量处除以总数就是 P(C1),用属于 Class2(Normal) 的个体数量处除以总数就是 P(C2)。如下图:

零基础入门深度学习四:生成模型_第4张图片

真正的问题是 P( x | C1)怎么进行计算?也就是 P(SP Defense, Defense | C1 ) 怎么计算?

第一种解决方案就是假设 SP Defense 和 Defense 是独立的,然后 P (SP Defense , Defense | C1) = P(SP Defense | C1) · P(Defense | C1) ,利用这个公式和所有数据我们就可以把每个数值都算出来了。这就是朴素贝叶斯分类器,具体还是看阮一峰大神 http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html 的博客。

第二种解决方案我们就假设每一类都是一个高斯分布(正态分布)。什么意思呢?

我们先从一维的高斯分布理解。

假设某正态分布的概率密度分布图如下:

零基础入门深度学习四:生成模型_第5张图片

那么变量等于 0 的概率密度是 0.4 ,那它的概率是多少呢?理论上某个点的概率应该是 0 ,但我们可以求 (0 , 0 + △x) 的概率,那么 (0 , 0 + △x) 的概率可以近似于红色矩形的面积,所以 (0. , 0. + △x) 的概率就是 0.4△x。假如 △x 很小,那么我们就可以近似的把 0 处的概率当做 0.4△x 。

同理,我们再看二维的高斯分布。

零基础入门深度学习四:生成模型_第6张图片

它有三个参数。如果 x 是 n 维向量,那么D = n ( 相当于常量 ), $\mu$ 是 n 维向量,  是 n × n 矩阵。

我们看一下 x 是二维的它的概率密度分布图。

零基础入门深度学习四:生成模型_第7张图片

而如果求某一点 x 的概率,则可以类似于一维高斯下,近似表示为  

所以我们的模型就变成了

零基础入门深度学习四:生成模型_第8张图片

然后我们可以把   约掉,就变成了

零基础入门深度学习四:生成模型_第9张图片

所以我们的问题变成了如何选取一个好的  ,   ,  ,   。

Goodness of Function

这一步我们来求解最好的  ,   ,  ,   。我们先分析 Water 类的,即求  ,   。我们把每个样本画到图中。

零基础入门深度学习四:生成模型_第10张图片

我们可以看到  ,  取不同的值,假如一个圆圈代表一个高斯分布,每个点的概率将会不同,而我们的目的是让所有点的尽量符合当前模型。此时,我们可以用一个 likelihood ( 似然函数 ) 来衡量。

我们的目的就是找一个  ,   使得 likelihood 达到最大,也就是最大似然估计。即

零基础入门深度学习四:生成模型_第11张图片

Best Function

根据统计学的知识,我们可以直接求出  和  。

利用公式

零基础入门深度学习四:生成模型_第12张图片

我们最终得到的模型就是

零基础入门深度学习四:生成模型_第13张图片

这样我们就可以愉快的做分类了。

Test & 重新设计模型

经测试,我们的正确率只有 47% 。

难道是我们的维数太低,我们只选取了 SP Defense , Defense 两个 features,如果我们选 hp , att , sp att , de , sp de , speed 6 个 features 呢?此时

零基础入门深度学习四:生成模型_第14张图片

然而准确率依旧没有怎么提高,变为了 64% 。

我们针对高斯再进行一下优化。

之前我们有四个参数, ,   ,  ,   ,我们可不可以把 ,  变为一个,变为  ,   三个参数,简化我们的模型。

零基础入门深度学习四:生成模型_第15张图片

我们计算的公式将变成

零基础入门深度学习四:生成模型_第16张图片

然后我们的模型变成了

零基础入门深度学习四:生成模型_第17张图片

此时,我们的正确率变为了 74% ,有了很大的提高!

类比于线性回归,我们依旧是先提出模型,然后提出计算参数的公式,最后对数据进行测试,继续完善我们的模型。


零基础入门深度学习四:生成模型_第18张图片

你可能感兴趣的:(深度学习)