【Day 11】分类(Classification)(下)

昨天提到了生成模型(Generative Model),要去计算事前机率(Prior Probability),还有从类别取样出 https://chart.googleapis.com/chart?cht=tx&chl=x 的机率(Probability from Class)。今天就会从Probability from Class开始继续介绍。

Probability from Class

高斯分布(Gaussian Distribution)

可以想像成是一个function,输入为一个vector https://chart.googleapis.com/chart?cht=tx&chl=x,输出为 https://chart.googleapis.com/chart?cht=tx&chl=x 从分布里面被取样出来的机率。而机率的分布由 平均值 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu 以及 共变异数矩阵 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma 决定。

  • 不同的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu 代表机率分布最高点不同。

  • 不同的 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma 代表机率分布分散的程度不同。

假设我们从一个Gaussian里面取样出这79个点,并能透过这79个点估测出这个Gaussian的平均值 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu 以及 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma,那我们找一个新的点 https://chart.googleapis.com/chart?cht=tx&chl=x,带入上图中的公式就可以算出 https://chart.googleapis.com/chart?cht=tx&chl=x 从Gaussian里面被取样出来的机率,从下图中也可以看到,如果这个 https://chart.googleapis.com/chart?cht=tx&chl=x 越接近 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu,它被取样出来的机率会比较大。

如何找到 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%2C%20%5CSigma

Maximum Likelihood

每个Gaussian都有可能取样出这79个点,但它们取样出这79个点的可能性(Likelihood)是不同的。从图中可以看到左边的Gaussian可以取样出这79个点的可能性是比较高的,右边的Gaussian的可能性是比较低的。
如果给我们某一个Gaussian的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%2C%20%5CSigma,我们就可以算出那个Gaussian的Likelihood,也就是说给我们一个Gaussian的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%2C%20%5CSigma,我们就可以算这个Gaussian取样出这79个点的机率。
式子可以写成:https://chart.googleapis.com/chart?cht=tx&chl=L(%5Cmu%2C%20%5CSigma)%20%3D%20f_%7B%5Cmu%2C%20%5CSigma%7D(x%5E1)f_%7B%5Cmu%2C%20%5CSigma%7D(x%5E2)f_%7B%5Cmu%2C%20%5CSigma%7D(x%5E3)......f_%7B%5Cmu%2C%20%5CSigma%7D(x%5E%7B79%7D)

我们的目标是要找到一个Gaussian取样出这79个点的Likelihood是最大的,也就是说我们要穷举所有的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%2C%20%5CSigma,看哪个可以让Likelihood最大。

https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E*:找 https://chart.googleapis.com/chart?cht=tx&chl=x 的平均值,或是对 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu 取微分,找微分是 0 的点解出来就是答案。
https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma%5E*:先算出 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E*,再对所有的 https://chart.googleapis.com/chart?cht=tx&chl=x%5En 都算 https://chart.googleapis.com/chart?cht=tx&chl=(x%5En%20-%20%5Cmu%5E*)%20(x%5En%20-%20%5Cmu%5E*)%5ET,或是对 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma 做微分,找微分是 0 的点解出来就是答案。

而有了两个 class 的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%2C%20%5CSigma 我们就可以做分类的问题了。

Classification

  • 计算 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx),如果 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx)%20%3E%200.5https://chart.googleapis.com/chart?cht=tx&chl=x 就属於 class 1,https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx)%20%3C%200.5https://chart.googleapis.com/chart?cht=tx&chl=x 就属於 class 2。

改进

因为共变异数矩阵是跟输入的feature size的平方成正比,所以如果把两个不同的Gaussian都给不同的共变异数矩阵,你的模型的参数可能就会太多,参数多,变异数就大,那就会很容易导致Overfitting的情况发生。
那为了减少参数我们就可以给这两个class的feature分布的Gaussian同样的共变异数矩阵,再去计算Lilelihood,而 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E1%2C%20%5Cmu%5E2 的计算方法跟前面提到的相同,https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma 则是用 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E1%2C%20%5Cmu%5E2 算出来的 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma%5E1%2C%20%5CSigma%5E2 分别去乘上 https://chart.googleapis.com/chart?cht=tx&chl=x 的个数,再除以两个class的个数总和,也就是加权平均。

从图中可以发现,如果共用同一个共变异数矩阵,它的boundary就会是一条直线,这样的模型我们也称之它为线性模型(Linear Model)。

分类三步骤

之前提到机器学习就是三个步骤,那分类的机率模型也是三个步骤。

  1. 定义一个模型(model)

  2. 从模型里挑出好的函式(function)

  3. 经由演算法找出最好的函式

机率分布(Probability Distribution)

  • 如果是binary features的情况,我们可能可以使用伯努利分布(Bernoulli Distribution)。
  • 如果所有的feature都是独立产生的,我们就是在用单纯贝氏分类器(Naive Bayes Classifiers)。

事後机率(Posterior Probability)

将前面 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx) 的式子整理一下之後就会发现,它是一个Sigmoid function。
Sigmoid function在机器学习基本功(三) --- Regression里面有介绍。

前面提到一般我们会假设共变异数矩阵是共用的,因此我们可以将 https://chart.googleapis.com/chart?cht=tx&chl=z 简化如下图所示。
即可将原本的式子写成 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx)%20%3D%20%5Csigma(w%20%5Ccdot%20x%20%2B%20b),从这个式子就可以看出 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma_1%20%3D%20%5CSigma_2 的时候,你的 class 1 跟 class 2 的boundary会是linear。


参考资料

李宏毅老师 - ML Lecture 4


<<:  每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day9

>>:  Day9:终於要进去新手村了-Javascript-运算子

[Day 10] Checkbox 核取方块

在许多的输入中 很重要的核取方块 用於登入的勾选 ,资料的选取等等 利用 checked 判定核取状...

【第八天 - Quick Sort 介绍】

Q1. Quick Sort是什麽 与前天介绍的 bubble sort 一样,是一种计算排序的方法...

[python] TFT Display测试心得碎念(拿st7735的经验拯救ili9341)

使用的python函式库为: sudo pip3 install adafruit-circuitp...

存取令牌(Access Token)

.“断言”( Assertion)是 SAML(安全断言标记语言)中使用的术语,相当於 OIDC(O...

Day11 - 套用 Tag Helper - 复杂型别 object + collection

本篇 Controller、ViewModel 跟 Day08 范例差不多 依照 View 的差异,...