【李宏毅机器学习笔记】4、Classification

【李宏毅机器学习笔记】1、回归问题(Regression)

【李宏毅机器学习笔记】2、error产生自哪里?

【李宏毅机器学习笔记】3、gradient descent

【李宏毅机器学习笔记】4、Classification

【李宏毅机器学习笔记】5、Logistic Regression

【李宏毅机器学习笔记】6、简短介绍Deep Learning

------------------------------------------------------------------------------------------------------

【李宏毅深度强化学习】视频地址:https://www.bilibili.com/video/av10590361?p=6

课件地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html

-------------------------------------------------------------------------------------------------------

用regression来解classification可行吗?

 以回归问题的做法来做分类问题,就是,在training data中,class 1有一个目标值为1,class 2 有一个目标值为-1。以这些数据去训练,希望在testing 阶段,能做到输入class 1 就输出接近1的值,输入class 2 就输出接近 -1 的值。

但是,实际上这是不可行的。

缺点1:

将刚才的例子画成图,理想情况就如左图那样,绿色就是分界线。

但是,也有例外,如右图,有一小部分class 1 的样本在比较远的地方(右下角)。虽然我们人眼能直接画出绿线这条分界线,但是机器不会,它直接按回归的方式去解最终会解出紫色这条分界线。因为机器考虑了右下角的点,所以使得原来的绿线发生偏移。

缺点2:

假设现在是多分类问题,class 1 目标值是1,class 2目标值是2,class 3 目标值是 3 。由于数字1和数字2接近,数字1和数字3比较远,就会间接造成class 1和class 2相像,而class 1和class 3 比较不像的误差。

Generative Model

 现在给出一只神奇宝贝 x ,想要通过P(C_1|x)的公式算出 x 属于神奇宝贝的哪一类别的话,需要知道

P(C_1) (抽一个x,属于C1的概率)

P(x|C_1)  (在C1中抽到x的概率)

P(C_2)  (抽一个x,属于C2的概率)

P(x|C_2) (在C2中抽到x的概率)

有了这四个可能性P(这四个值要从training data中估出来),在test阶段,给一只神奇宝贝 x,就可以就计算它属于class 1 或class 2 的概率。 

有了这个模型,就可以生成一个 x。然后计算每个 x 出现的概率,就可以知道了 x 的分布,就可以自己产生 x  。
这就是Generative Model。

Prior

Class 1是水系,Class 2是一般系。

在training data中,从水系抽出神奇宝贝的概率 P(C_1)=0.56 。从一般系抽出神奇宝贝的概率P(C_2)=0.44

 在这里,每一只神奇宝贝用一个vector代替,这个vector里面的各种值就是这只神奇宝贝的feature。

现在我们要计算从水系神奇宝贝抽出 原盖海龟 的几率,但是training data里的水系神奇宝贝没有这只原盖海龟,那怎么计算?

将training data制成图。这里的training data只是水系神奇宝贝的一部分,所以不能说原盖海龟没出现在training data里几率就等于0。

假设这些training data是从高斯分布里sample出来的一部分,所以即便原盖海龟没出现在training data,也不能说它的几率等于0。

所以现在要做的就是通过已有的79只神奇宝贝,生成这个高斯分布,从而知道从这个分布sample出原盖海龟的几率。

高斯分布

 可以把高斯分布看成一个函数,输入  一只神奇宝贝,输出  这只神奇宝贝从这个分布被sample出来的概率。

这个分布的形状由\mu\Sigma 操纵。

  • 同样的\Sigma,不同的\mu,分布的最高点不一样
  • 同样的\mu,不同的\Sigma,分布的分散程度不一样

回到刚才的图,现在我们通过training data计算出 \mu 和 \Sigma ,即便给出一个没出现在training data的水系神奇宝贝 x ,也可以代上面的公式 f_{\mu ,\Sigma }(x) ,算出从水系神奇宝贝sample出 x 的几率。

接下来,讲一下计算 \mu 和 \Sigma 的方法。

我们知道79个点可以从任意一个分布sample出来,只是概率的高低而已。

图中左下角的圆圈这个分布,从这个分布sample出79个点的概率会相对高一点。

图中右上角的圆圈这个分布,从这个分布sample出79个点的概率会相对低一些。

所以,现在要找出一个分布,它sample出79个点的概率是最高。

计算某一个分布sample出79个点的计算方法 如 L(\mu ,\Sigma ) 所示(f_{\mu ,\Sigma }(x^1)代表是从这个分布sample出x^1的几率,以此类推累乘下去,就是sample出79个点的概率)

 从上面高斯分布那部分知识点可以知道,分布的形状由\mu\Sigma 操纵。所以找这个最佳的分布,其实就是找能使L(\mu ,\Sigma )的值最大的\mu^*\Sigma ^*

找到\mu^*\Sigma ^*的方法可以用图中的方法;也可以对L(\mu ,\Sigma )求它对\mu\Sigma各自的偏微分,然后各自找出偏微分等于0的点。

用这个方法,就算出刚才例子的 \mu\Sigma就得到水系神奇宝贝的分布。

现在我们已经把  P(C_1) 、P(x|C_1)P(C_2) 、P(x|C_2) 都算出来,就可以算 P(C_1|x)了,即现在给出一只神奇宝贝 x ,就能算它属于C1类的概率。

如果这个概率大于0.5,就说它属于Class 1。

 左上图是最后做出来的分类结果。红色越深,代表越可能属于C1(水系)类;蓝色越深,代表越可能属于C2(普通系)类。

右上图是左上图做一个简化的效果,含义还是一样。

把这个model用在testing data上,结果如右下角所示。准确度只有47% 。

即便加上更多神奇宝贝的feature,如hp等,加到7维来分类,准确度也就上升到54% 。

怎么办呢?

之前的实验是两个类别分别使用各自的 \mu\Sigma,这样不好。因为\Sigma和input的大小平方成正比(比如上面只有2个参数(SP Defense 和Defense),\Sigma就有4个参数),所以当 input 变大的话,会造成参数变太多,造成variance(方差)太大,就会overfitting。

所以,为了避免这个问题,就让两个class的分布共用一个 \Sigma 的参数(对比原来的话就少了一个\Sigma的参数)。

共用一个 \Sigma 后,刚才的Likelihood function L(\mu ,\Sigma )就要改写为L(\mu^1, \mu^2, \Sigma )

\mu^1的计算方法和之前一样,直接所有 x 相加取平均。\mu^2类似。

\Sigma 则是将原来的各自的 \Sigma^1 ,\Sigma^2 乘上各自一个weight(eg.Class 1 就是\frac{Class_1}{Class_1+Class_2})。

做了上面的改进后,用神奇宝贝的七个维度的feature数据来分类,准确度从54%上升73%。 

总结

其实就是找出 \mu 和 \Sigma ,有了这两个参数能找到一个概率分布,这个分布能最大化 Likelihood 函数。

如果 x 有7个feature,并且都是独立的话,则 P(x|C_1) 可以写成

此时这些拆出来的项(P(x_1|C_1)等等)每一个都是一维的高斯分布,这时 P(x|C_1) 的协方差就是一个对角矩阵(对角线之外的值都为0),这样就可以减少参数量。但在这个例子中不能这么做,因为这个例子中的 x 的feature并不是完全独立的,比如一只CP值高的神奇宝贝,他不可能HP会很低。

如果所有的feature都是相互独立的,这种分类叫做 Naive Bayes Classifier(朴素贝叶斯分类器)

在实验中,需要根据问题来选择生成的分布,比如这个例子就生成高斯分布。而在其他情况下比如二分类问题,就需要改成生成一个伯努利分布。

后验概率(Posterior Probability)

 将 P(C_1|x) 做图中的变换,得到 \sigma (z) ,这个就是Sigmoid function。

当z趋于正无穷时,\sigma (z)趋近于1;当z趋于负无穷时,\sigma (z)趋近于1。

接下来要算z(想了解更详细可以看视频,你也可以直接跳过看结论):

z就等于上图所示,其中 相当于权重w,而后面很长的和 x 无关的一串相当于b。

所以也可以写成

所以现在知道,为什么刚才在神奇宝贝分类的例子中,改进模型时使 \Sigma _1 和 \Sigma _2 相等的时候,边界线会变成是一条直线了。

在generative model中,我们是先算出,然后来得到w和b。

有没有办法直接求出w和b呢?这就是下节课的内容了

发布了23 篇原创文章 · 获赞 36 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/ACL_lihan/article/details/104182752
今日推荐