Day-06 Classification

  • 昨天聊完如果要做资料 Regression(预测)的话,要给予基本的 Model + Data,并且利用 Loss function(损失函数)来检查现在的 function 的糟糕程度,并利用 Gradient Descent 更新 Model 来模拟穷举的概念达到找到最佳函数的效果
  • 那如果是分类问题的话,会有几个疑问
    • 分类问题会在什麽时候出现?
    • 要怎麽做分类?
  • 让我们一个一个看下去

分类问题会在什麽时候出现?

  • 其实我们的生活中一直都在做分类,可以说分类问题是人类每天最常在做的事情,我们今天去上班上学,如何分辨你的同学同事谁是谁,如何决定考卷答案是 A 是 B,这些都是决策分类
  • 所以我们也希望机器的 Classification(分类)可以做什麽,
    • 判断 yes/no 问题
    • 分辨不同的动物
    • 分辨人脸
    • 等等等等
  • 那今天我们就拿天气分类来举例吧~

天气分类问题

  • 假设一天的天气有分成三种,分别是晴天、阴天、雨天,所以相较於 Regression 输出是一个实数(预测结果),Classification 的 Output 就会分别是晴天、阴天、雨天三种结果
  • 那我们回顾一下机器学习的流程,给 Model(function set) -> Goodness of function -> Find the best function
  • 那我们说过 Goodness of function 可以利用 Loss function 来检查当前 function 的错误程度,然後在最後输出 best function,在 Regression loss function 可以直接用 Estimation error(估计误差),然後更新参数用 Gradient Descent,那分类问题呢?

Loss Function

  • 在 Regression 中,我们的 Loss function 会是预期的答案减去我们计算出来的答案的差异量,但是 Classification 这边并没有答案差异这件事情,要怎麽办呢?
  • 其实很简单,我们平常怎麽知道自己的判断力好不好?也就是看我们判断的成功率对吧?
  • 所以我们可以利用不符合的答案数量来当作回答状况的好坏,所以我们可以改写我们的 Loss function 成 https://chart.googleapis.com/chart?cht=tx&chl=%24L(f)%20%3D%20%5Csum%5Climits_%7Bn%7D%20%5Cdelta(f(x%5En)%20%5Cne%20%5Chat%7By%7D%5En)%24

Best function

  • 从上面的 Loss function 我们可以发现我们用判断答错的数量来判断我们 function 的好坏,并且拿到的式子 https://chart.googleapis.com/chart?cht=tx&chl=%24L(f)%20%3D%20%5Csum%5Climits_%7Bn%7D%20%5Cdelta(f(x%5En)%20%5Cne%20%5Chat%7By%7D%5En)%24,那就开始算 Gradient D...
    • 等等等等,笔者你不是说过 Gradient Descent 一定要是可微分式子吗?上面的 loss function 最好可以微分啦!
    • 挖,被你发现了,所以这里当然不会是 Gradient Descent 啦~
  • 想必细心一些的读者都已经发现了,在这边很明显不能用 Gradient Descent 去最佳化我们 Model 的参数,那有没有别的方法可以解决这边最佳化的问题吗?难不成真的要开始穷举了 QQ?
  • 其实是有的,例如 Perceptron Learning Algorithm(PLA), Support Vector Machine(SVM) 等等,那直接说明 PLA 或是 SVM 会很不直观,因此我们换个方式解释

如何做"分类"

  • 回到最一开始的问题,我到底要怎麽分类,不管问题是什麽,我们总得先搞个方式去分类资料,那到底要怎麽去分类他们?我们用个简单的小机率问题分类来让大家理解

基础机率小问题

  • 我们先假设一个情境,今天我们的世界只有晴天 & 雨天两种天气,因此我们的工作就是判断明天是晴天 OR 明天是雨天两种问题
  • 那我们再来假设一下,我们判断两种问题的资料也很简单,就是温度&湿度两个变数,所以如果要把资料画成图

    • 这笔资料的状况是有 30 笔晴天资料 30 笔与天资料去做绘图
  • 我们可以发现有两种资料分布在空间中的状况是有重叠的也有分离的部分,但是我们从肉眼中可以比较好的去判断资料状况
  • 那如果我们想要分开资料,在肉眼辨识下我们大致上会怎麽去切分?应该会依照这样切分

  • 那到底,我们现在理论上应该怎麽判断这些资料谁属於谁?很简单,那就是用机率来看,什麽意思?
  • 我们把红线的左边右边分成两个区块来看,可以变成下面这张图片

  • 我们现在有两个盒子,盒子一跟盒子二,这两个盒子都有红色球球跟绿色球球,今天如果我们拿到了一颗红色的球球,我们只知道这个红色球球是从这两个盒子里面拿到的,请问他是从盒子一拿出来的机率是多少?从盒子二拿出来的机率是多少?
  • 这是一个非常简单的问题,我要算从第一个盒子取出红色球的机率,就会是取第一个盒子的机率乘上第一个盒子里面红色球被拿到的机率去除与两个盒子拿到红色球的机率https://chart.googleapis.com/chart?cht=tx&chl=%24%24P(C_1%7CRed)%20%3D%20%7BP(Red%7CC_1)P(C_1)%20%5Cover%20P(Red%7CC_1)P(C_1)%20%2B%20P(Red%7CC_2)P(C_2)%7D%24%24
  • 那这个跟分类有什麽关系?我们假设今天我们把盒子改成类别,然後给定一个 x,这个 x 是我们要分类的对象,也就是要分成 class1 或是 class2,那我们这时候先来算这个 x 出现在 class1 跟 class2 中的机率是多少,也就是我从这两个 class 中抽取到 x 的机率,那式子会变成怎样?
    • Class1 https://chart.googleapis.com/chart?cht=tx&chl=%24%24P(C_1%7Cx)%20%3D%20%7BP(x%7CC_1)P(C_1)%20%5Cover%20P(x%7CC_1)P(C_1)%20%2B%20P(x%7CC_2)P(C_2)%7D%24%24
    • Class2 https://chart.googleapis.com/chart?cht=tx&chl=%24%24P(C_2%7Cx)%20%3D%20%7BP(x%7CC_2)P(C_2)%20%5Cover%20P(x%7CC_1)P(C_1)%20%2B%20P(x%7CC_2)P(C_2)%7D%24%24
  • 那其实这样就解决问题了,为甚麽,因为我们可以很简单的知道这个天气状况到底比较偏向哪一种形况,他到底是晴天的机率比较大,还是雨天的机率比较大
  • 那这边我们等於需要去取得四个变数,分别就是 https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_2)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_2)%24,我们只要有这四个变数,我们就能够计算出任意一个 x 进来之後,他於两个 cases 机率了,而现在这个做法叫做一个 Generative Model(生成模型),因为我只要能够有这个模型,我就能生成所有资料点的 Distribution(分布),来判断资料状况。
  • 那这个时候会有一个新的问题,如果我今天加上去一笔全新的天气资料,那它发生的机率是多少?总不会是 0 吧?因为虽然他没在训练资料里面,但是怎麽看他都像是一笔实际存在的晴天资料阿

  • 我们原本的资料其实在资料点上面是有呈现一个分布状态的,假设这些资料点是从一个 Gaussian density distribution(高斯密度分布)去标记出来的,那我们现在有一个新的资料点出现时,他在这个分布上出现的机率就不会是 0

高斯分布

  • 我们在这边就不特别解释高斯分布是什麽了,有兴趣的人可以自己查一下资料
  • 反正就是我们会有高斯分布的状况,然後会有一个基於 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24 还有 https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 的公式 https://chart.googleapis.com/chart?cht=tx&chl=%24%24f(x%7C%5Cmu%2C%5CSigma)%3D%7B1%20%5Cover%20(2%5Cpi)%5E%7BD%2F2%7D%7D%20%7B1%20%5Cover%20%7C%5CSigma%7C%5E%7B1%2F2%7D%7D%20%5Cexp%20%5C%7B-%20%7B1%20%5Cover%202%7D(x%20-%20%5Cmu)%5ET%20%5CSigma%5E%7B-1%7D%20(x-%5Cmu)%5C%7D%20%24%24 计算任意 x 於高斯分布中的分布状况
  • 所以我们现在就是要找到好的 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24 跟好的 https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24

赶快帮大家做个小统整

  • 想必看到这里,大家都已经昏了,我们赶快帮大家做个整理
  • 我们重新聚焦一下重点,就是我们现在要想办法把资料做分类
  • 那如何分类,这里我们做的事情是去计算资料点出现的在不同 cases 间的机率,也就是刚刚看到的 https://chart.googleapis.com/chart?cht=tx&chl=%24%24P(C_1%7Cx)%20%3D%20%7BP(x%7CC_1)P(C_1)%20%5Cover%20P(x%7CC_1)P(C_1)%20%2B%20P(x%7CC_2)P(C_2)%7D%24%24 公式,然後我们就可以自己定下例如只要这个机率大於 50% 就属於 case1 之类的规则,但是这边会有四个变数要控制,就是 https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_2)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_2)%24
  • https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_2)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_2)%24 这四个变数要怎麽生成,重点要先把 https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_2)%24 两个机率确认,而这个机率怎麽确认,就是利用高斯分布来确认现在训练的资料组里面,的分布机率状态
  • 所以概念上就是我只要能搞好高斯分布,我就能得到两群出现的机率,就可以间接得到类别中後验机率,然後就能够计算它的机率了
  • 因此到这里,我们会发现如何找到正确的高斯分布,变成了重中之重,我们现在在操作的 Model(机率公式)的好坏(第二步 goodness function) 会因为高斯分布的 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24, https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 而影响了,所以我们现在求的最佳,就是高斯分布的 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24
  • 那怎麽找 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 呢?

likelihood function(概率函数)

  • 我们一样回到刚刚的分布图

  • 图上的两个红圈圈分别代表着两个不同的高斯分布中心,那我们可以很明显知道这两个高斯分布去计算对於晴天的分布状况会很明显地不一样,比较偏中间的那个高斯分布的可能性会比比较偏左下的那个可能性机率低
  • 所以我们其实就可以去算 likelihood 的状况
    • likelihood 越高理论上我们的高斯分布越好,也就是 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 参数较好
    • likelihood 低的则代表分布的位置较不好,也就是 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 参数较不好
  • 所以我们来看一下 likelihood function 长怎样,https://chart.googleapis.com/chart?cht=tx&chl=%24L(%5Cmu%2C%20%5CSigma)%20%3D%20f(x%5E1%7C%5Cmu%2C%5CSigma)%20*%20f(x%5E2%7C%5Cmu%2C%5CSigma)%20*%20f(x%5E3%7C%5Cmu%2C%5CSigma)%20*%20...%20*%20f(x%5En%7C%5Cmu%2C%5CSigma)%24 (请注意这边的 https://chart.googleapis.com/chart?cht=tx&chl=%24L%24 不是 loss function),也就是当下高思对所有点的高斯机率全部相乘,就是现在的高斯的 likelihood

Maximum likelihood

  • 那这边找最佳的 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 其实有概念的话,

    • https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%5E*%20%3D%20%7B1%20%5Cover%2030%7D%20%5Csum%5Climits_%7Bn%20%3D%201%7D%5E%7B30%7Dx%5En%24 也就是所有点平均(也就是资料集中心点)
    • https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%5E*%20%3D%20%7B1%20%5Cover%2030%7D%20%5Csum%5Climits_%7Bn%20%3D%201%7D%5E%7B30%7D(x%5En%20-%20%5Cmu%5E*)(x%5En%20-%20%5Cmu%5E*)%5ET%24
  • 我们这样就可以解决分类问题了

每日小结

  • 分类问题其实并没有跟预测问题不同,概念上都严格遵守先有 Model -> 去检查、验证、更新 function 参数 -> 找到最佳参数
  • 那在分类的问题上,我们可以简化的用出现在哪边的机率来做判断,就肉眼上来判断,我们要分类朋友群,也是把一坨一坨聚在一起的人分类在一起,也就是他们出现在这个区块的机率状况给分析出来,机器也不例外
  • 那为了能够分辨区块,我们会需要利用高斯分布来确保资料分布状况,而高斯分布所影响到的正事我们分类资料算出来的机率,因此取得最佳的分布参数,也就解决了分布问题
  • 今天提到的数学概念如果有任何疑问,都可以参考
  • 那到这里我们也有基本的机器学习概念了,我们明天来看看一个神奇的名字欺骗术,Logistic Regression

<<:  Day 16 储存宝石:S3 储存类别 & 生命周期管理

>>:  [Day21] CH11:刘姥姥逛物件导向的世界——类别与物件

到底是什麽意思?Typescript Partial<Type>

今天在翻旧code的时候,看到了 Partial 的写法,所幸来查查这到底是什麽意思.弄懂了之後看c...

Day#07 新增(2)

前言 接续着前一天没做完的新增功能,今天继续接着做~边做也一边介绍用到的方法与程序码。 Storyb...

【从零开始的Swift开发心路历程-Day22】天气预报App实作Part1

昨天我们完成简易订单系统後,今天要来练习一个新的挑战-串接API! 这次我们透过中央气象局开放资料平...

Day 12 [Python ML、特徵工程] 特徵工程整理

Categorical Encoding Encoding Describe One hot enc...

从零开始的8-bit迷宫探险【Level 7】Swift 基础语法 (五)

今日目标 认识 nil 认识 Optional 认识 if let 及 guard let nil ...