李宏毅机器学习-----分类:概率生成模型

上期回顾,上一期我们把gradient descent详细的说了一遍,如果还是不熟悉的可以重新看一遍,反正我也还没有十拿九稳的拿下它,因为数学基础太差了,要补好数学,才能有更深的理解,放上链接:李宏毅机器学习-----Gradient Descent

分类:概率生成模型

在这里插入图片描述
分类问题的思想与前面所说的回归问题很类似,也是输入x,找到一个function(即model),然后输出这个x属于哪个class n。

上图也有很多例子:
例如信用卡评分,输入是你的收入,储蓄,工作,年龄等等,而输出就是接受或拒绝你的信用卡申请。
例如医疗诊断,输入是你的现在病状,年龄性别,过去的病史,输出是你得了什么病。
例如人脸识别或者手写字识别,输入人脸或者手写字,输出属于哪个人,或哪个字

例子:宝可梦的种类分类

在这里插入图片描述
我们知道宝可梦有18种类型,我们希望输入一个宝可梦的参数,然后能知道它是哪个种类。那我们应该怎么让一只宝可梦成为输入参数呢?
在这里插入图片描述

  • Total :整体数值
  • HP : 血量
  • Attack:攻击力
  • Defense:防御力
  • SP Atk:特殊攻击
  • SP Def:特殊防御
  • Speed : 速度

我们用向量vector来保存这7个数值,作为宝可梦的输入。为了让大家更好理解,老师告诉了我们为什么知道一只宝可梦的属性很重要?哈哈哈,因为属性之间是相克的,对于战斗来说,如果选对了属性,你就已经赢了一半了,而且有时候,你不知道这只宝可梦是什么属性,你也可以通过模型来预测它是什么属性的宝可梦,请看下图的属性相克表:
在这里插入图片描述

怎么做分类呢?

在这里插入图片描述
我们只学过回归,所以首先尝试通过regression来硬解分类问题,用二分类问题来举例,我们可以让Class1的 y ^ \hat y y^就是1,Class2的 y ^ \hat y y^就是-1,然后train出一个model,拿去testing,数值接近1的就是Class1,数值接近-1就是Class2.
在这里插入图片描述
比较两幅图,我们可以发现,数据点的分布会影响绿色那条线,当考虑右下角远大于1的数据点,结果会被影响,因为紫色线希望让远大于1的点的更贴近自己,减少对于这些点的error。所以有个说法就是regression model会惩罚那些太正确的samples。还有一个问题,当这是多类别分类问题,回归模型是假设类别与类别之间是存在一定关系的,但是如果类别之间是相对独立的,那么回归模型不能产生很好的分类结果。
在这里插入图片描述
所以提出了一个比较理想的替代方案,就是funciton f(x)里面有个g(x),如果g(x)大于0,ouput就是类别一,否则是类别二。而Loss function用错误次数来表示,我们希望在训练集上,判断错误的次数越小,Loss就越小。找到最好的funciton的方法有SVM,Perceptron,暂时不涉及。

贝叶斯公式(概率模型实现原理)

在这里插入图片描述
假设有两个盒子box1和box2,里面有蓝色球和绿色球,现在我抽到一个蓝色球,求它从盒子1抽来的机率是多少?

图里可以看到,我们已知箱子里有多少个蓝球和绿球,所以一下子就能求出来 P ( B 1 ) P(B_1) P(B1) P ( B 2 ) P(B_2) P(B2),也能知道在box1和box2中拿到蓝球和绿球的机率 P ( B l u e ∣ B 1 ) , P ( G r e e n ∣ B 1 ) 和 P ( B l u e ∣ B 2 ) , P ( G r e e n ∣ B 2 ) P(Blue|B_1),P(Green|B_1)和P(Blue|B_2),P(Green|B_2) P(BlueB1),P(GreenB1)P(BlueB2),P(GreenB2),然后就可以得到贝叶斯公式 P ( B 1 ∣ B l u e ) P(B_1|Blue) P(B1Blue)知道结果推出条件
在这里插入图片描述
回归到数学层面,假设给你一个x,我们想知道它属于哪个class,就可以通过上述的公式得来,计算一个x来自 C 1 C_1 C1的概率,我们需要知道红色框中的四个概率,才能求出来,这些值我们希望通过training data估测出来,这套思路叫做Generative Model,生成模型
为 什 么 叫 生 成 模 型 呢 ? \color{red}{为什么叫生成模型呢?}
因为有了这个model,我们可以生成一个x,计算x出现的机率,如果你可以计算出每一个x出现的机率,我们就知道x的分布,然后用分布来产生x。

C1和C2出现的机率—先验概率Prior

在这里插入图片描述
我们假设 C 1 C_1 C1是水类, C 2 C_2 C2是普通类,用前400个数据用于训练,剩下的做测试,这个是比较不严谨的方法,如果严谨一点可以用 cross validation。Training data是79只水系,61只一般系,可知 P ( C 1 ) = 0.56 , P ( C 2 ) = 0.44 P(C_1)=0.56,P(C_2)=0.44 P(C1)=0.56,P(C2)=0.44
在这里插入图片描述
从水系中抽取一个宝可梦,是海龟的机率有多大?
我们知道每只宝可梦都会由一个向量组成,代表它的特征,然后我们就把特征都画出来,下图:
在这里插入图片描述
因为有7个特征,我们二维没法画出来,所以先讨论一下防御力和特殊防御这两个特征。每个点都代表一只宝可梦,例如可达鸭和杰尼龟。如果出现一个点(我们没见过的宝可梦海龟),没有出现在training data,我们希望想办法从已知的数据中,估测如果从水系宝可梦中挑一只出来,它是海龟的机率到底有多少?

我们可以假设看作这79个samples是从高斯分布选取出来的,得到了一个分布(红圈的位置),而海龟是处在高斯分布里面的,现在我们要通过79个sample弄出来的分布,求出高斯分布出来。
在这里插入图片描述
在这里插入图片描述
上图可以看到高斯分布的公式,我们不做太多的数学解释,想知道细节可以查询概率论相关的知识。
它的输入是vector x(宝可梦的特征数值),输出是这一只宝可梦x从这一个分布里面被sample出来的概率密度,这个概率的分布是由两个东西决定,一个是平均值 μ \mu μ(这是个vector),另一个是协方差矩阵 Σ \Sigma Σ(实际上高斯分布不等于概率,只是和概率成正比,这里简单说成概率)

图中举例了两个图,相同的 Σ \Sigma Σ,不同的 μ \mu μ,会导致概率分布最高点的地方是不一样的。反之,不同的 Σ \Sigma Σ,相同的 μ \mu μ,最高点是一样的,但是分布散开的程度是不一样的。

在这里插入图片描述
假设我们可以通过这79个点估测出这个高斯分布的 Σ \Sigma Σ μ \mu μ,当来了一个新的点X,因为我们知道了 Σ \Sigma Σ μ \mu μ,就可以把X放进公式里面。如果X越接近中心点 μ \mu μ,那么X被sample出来的机率就比较大。

如何找出 Σ \Sigma Σ μ \mu μ?最大似然估计

在这里插入图片描述
使用的方法叫maximum likelihood,中文叫最大似然估计。
其实任意的 Σ \Sigma Σ μ \mu μ的高斯分布都有可能生成这79个点出来,在整个空间中都可以sample到这些点,只是有些地方机率低有些地方机率高。 比如,右上角的红色圈,可以sample到左下角的蓝色点的机率很低,但是机率还是不等于零。
因此,不同的高斯分布都可以sample出所有的点,但是它们sample出这些点的可能性是不一样的。 图中很明显左下角的红色圈的likelihood比右上角的红色圈高。
L ( μ , Σ ) L(\mu,\Sigma) L(μ,Σ)代表均值是 μ \mu μ,协方差矩阵是 Σ \Sigma Σ的高斯分布的可能性,就是这个高斯分布sample出这79个点的机率的乘积
在这里插入图片描述
简单地说,我们就是要找出 ( μ ∗ , Σ ∗ ) (\mu^*,\Sigma^*) (μ,Σ),使得高斯分布sample这79个点的机率是最大的。即穷举所有的 ( μ , Σ ) (\mu,\Sigma) (μ,Σ),找到可以令 L ( μ , Σ ) L(\mu,\Sigma) L(μ,Σ)最大的 ( μ ∗ , Σ ∗ ) (\mu^*,\Sigma^*) (μ,Σ)
穷举所有的 ( μ , Σ ) (\mu,\Sigma) (μ,Σ),找到最优,如果按照老套路,就是对 ( μ , Σ ) (\mu,\Sigma) (μ,Σ)求微分,不过计算太麻烦了

所以有个比较直接的计算方式, μ ∗ \mu^* μ就是所有的点的求和平均值,而 Σ ∗ \Sigma^* Σ就是每个点减去均值 μ ∗ \mu^* μ乘以每个点减去均值 μ ∗ \mu^* μ的转置的和,然后求平均,这是求协方差的公式。(注:协方差表示的是两个变量的总体的误差

结果:

在这里插入图片描述

分类模型

在这里插入图片描述
我们已知 P ( C 1 ) 和 P ( C 2 ) P(C_1)和P(C_2) P(C1)P(C2),然后刚才又把 P ( x ∣ C 1 ) 和 P ( x ∣ C 2 ) P(x|C_1)和P(x|C_2) P(xC1)P(xC2)的高斯分布的 μ 和 Σ \mu和\Sigma μΣ求出来了,然后就可以把x值带进去,最后得到下图。
在这里插入图片描述
第一张图是结果的分布图,越靠近红色区域就越代表是水系,反之就是普通系,我们把x是水系的概率大于0.5的线画出来,得到右图,好像效果不太好,虽然可以看到比较多蓝色点(水系)处在红色的区域。
放入testing set,得到图3,正确率也不高,47%,因为我们只用了防御力和特殊防御为特征,二维的空间可能表现得不好,我们尝试全部7个特征都使用上, 准确率是54%,效果也挺一般的。

模型优化

在这里插入图片描述
通常来说,不会给每个高斯分布都计算出一套不同的最大似然估计,协方差矩阵是和输入feature大小的平方成正比,所以当feature很大的时候,协方差矩阵是可以增长很快的。此时考虑到model参数过多,容易Overfitting,为了有效减少参数,给描述这两个类别的高斯分布相同的协方差矩阵。
在这里插入图片描述
此时修改似然函数为 L(μ1,μ2,Σ),计算方法和上面相同,μ1,μ2分别各自加起来平均即可;而Σ的计算有所不同,Σ1和Σ2分别乘以权重然后相加。Σ的推导可以参考右上角的reference在这里插入图片描述
如果我们没有共用协方差矩阵,boundary是个曲线;共用之后,是直线的,分类的boundary是线性的,所以也将这种分类叫做 linear model。如果考虑所有的属性,发现正确率提高到了73%。

概率模型(建模三板斧)

在这里插入图片描述
寻找一个概率分布模型,可以最大化产生data的likelihood

为什么用高斯分布?

在这里插入图片描述
其实你可以选择你喜欢的分布,反正要根据实际情况决定使用哪种分布的。

这里有一个假设,每一个维度用概率分布模型产生出来的概率是相互独立的,所以可以将 P(x|C1) 拆解,可以认为每个 P(xk|C1) 产生的概率都符合一维的高斯分布,也就是此时P(x|C1)的高斯分布的协方差是对角型diagonal的(不是对角线的地方值都是0),这样就可以减少参数的量。但是模型太简单了,试过之后发现坏掉了。

当你遇到了二分类问题,使用伯努利分布比较好;
假设所有的feature都是相互独立产生的,这种分类叫做 Naive Bayes Classifier(朴素贝叶斯分类器)

后验概率

在这里插入图片描述
来到这一步,我们想做进一步的转化,第一条式子大家都已经比较熟悉了,我们对它的分母和分子都同时除以 P ( x ∣ C 1 ) P ( C 1 ) \color{red}{P(x|C1)P(C1)} P(xC1)P(C1),然后对 P ( x ∣ C 2 ) P ( C 2 ) P ( x ∣ C 1 ) P ( C 1 ) \frac { P ( x | C _ { 2 } ) P ( C _ { 2 } ) } { P ( x | C_{1} ) P ( C _{1} ) } P(xC1)P(C1)P(xC2)P(C2)取自然对数,得到z,得到一个 σ(z),就是sigmoid函数

数学推导【关于z的运算】

在这里插入图片描述
已知P(C1)和P(C2)就是类别与总类别的比例,也知道P(x|C1)和P(x|C2)是概率分布,这里使用高斯分布
在这里插入图片描述
红色划掉的是与高斯分布没关系的,所以去掉,把绿色框的式子提取出来,ln和exp()是同个东西啦,相乘变相加,相除变相减。
在这里插入图片描述
把式子展开计算,合并,解开式子,把 ln ⁡ N 1 / N 2 \ln N1/N2 lnN1/N2加回去,得到z
在这里插入图片描述
因为通常协方差矩阵是共用的 Σ 1 = Σ 2 = Σ \Sigma1=\Sigma2=\Sigma Σ1=Σ2=Σ,所以可以划掉前面那里,把与x有关的项放在一起,无关项放在后面。

化简z,x的系数记做向量wT,后面3项结果都是标量,所以三个数字加起来记做b。最后 P ( C 1 ∣ x ) = σ ( w ⋅ x + b ) P(C1|x)=σ(w⋅x+b) P(C1x)=σ(wx+b)。从这个式子也可以看出上述当共用协方差矩阵的时候,为什么分界线是线性的

根据上面的式子,直观感受就是估测N1,N2,μ1,μ2,Σ,就可以直接得到结果了

为什么要搞个机率,然后算这么多东西,才得到这个function,有点舍近求远,可以直接找到w和b吗?下一讲就会介绍这个方法:逻辑回归!~

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值