iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 17
1
Google Developers Machine Learning

Google machine learning 學習筆記系列 第 17

【Day 17】 Google ML - Lesson 3 - 多維度線性回歸解(N-D Regression), 交叉熵(cross-entropy)與均方差(MSE) 作為誤差函數計算所帶來的不同

今天的內容會很數學......不過我盡量試著用自己的方式講的比較簡單一點了,
裡面附帶一點我自己比較ㄎㄧㄤ的理解方式,但不一定完全正確就是XD,
希望大家能比較舒服的看完比較數學的這部分(?)

前言

我們繼續新課程 Launching into Machine Learning 的第二章~

這幾天的文章會是一系列的,會需要一起看才比較能看懂整個ML模型的輪廓,
然而因為一天能寫的內容量有限,所以我會在前言部分稍微說明我寫到哪。

複習一下ML的整個訓練過程

因為ML模型的訓練階段章節內容會分很多部分,我們要先確認好自己在哪個階段,
以免吸收新內容卻不知道用在內容的什麼地方。

★ML的整個「訓練過程」:這裡以監督式學習(Supervised Learning)為例

階段 要做的事情 簡介
(訓練前) 決定資料集與分析資料 你想要預測的是什麼資料? 這邊需要先知道 examplelabelfeatures的概念。介紹可參考:【Day 15】,而我們這次作為範例的訓練資料集介紹在【Day 19】
(訓練前) 決定問題種類 依據資料,會知道是什麼類型的問題。regression problem(回歸問題)? classification problem(分類問題)? 此處可參考:【Day 16】、與進階內容:【Day 17】
(訓練前) 決定ML模型(ML models) 依據問題的種類,會知道需要使用什麼對應的ML模型。回歸模型(Regression model)? 分類模型(Classification model)? 此處可參考:【Day 18】神經網路(neural network)? 簡介於:【Day 25】
(模型裡面的參數) ML模型裡面的參數(parameters)超參數(hyper-parameters) 此處可參考:【Day 18】
(訓練中) 調整模型 評估當前模型好壞 損失函數(Loss Functions):使用損失函數評估目前模型的好與壞。以MSE(Mean Squared Error), RMSE(Root Mean Squared Error), 交叉熵(Cross Entropy)為例。此處可參考:【Day 20】
(訓練中) 調整模型 修正模型參數 梯度下降法 (Gradient Descent)為例:決定模型中參數的修正「方向」與「步長(step size)」此處可參考:【Day 21】
(訓練中) 調整腳步 調整學習腳步 透過學習速率(learning rate)來調整ML模型訓練的步長(step size),調整學習腳步。(此參數在訓練前設定,為hyper-parameter)。此處可參考:【Day 22】
(訓練中) 加快訓練 取樣與分堆 設定batch size,透過batch從訓練目標中取樣,來加快ML模型訓練的速度。(此參數在訓練前設定,為hyper-parameter)。與迭代(iteration),epoch介紹。此處可參考:【Day 23】
(訓練中) 加快訓練 檢查loss的頻率 調整「檢查loss的頻率」,依據時間(Time-based)步驟(Step-based)。此處可參考:【Day 23】
(訓練中) 完成訓練 (loop) -> 完成 重覆過程(評估當前模型好壞 -> 修正模型參數),直到能通過「驗證資料集(Validation)」的驗證即可結束訓練。此處可參考:【Day 27】
(訓練後) 訓練結果可能問題 「不適當的最小loss?」 此處可參考:【Day 28】
(訓練後) 訓練結果可能問題 欠擬合(underfitting)?過度擬合(overfitting)? 此處可參考:【Day 26】
(訓練後) 評估 - 性能指標 性能指標(performance metrics):以混淆矩陣(confusion matrix)分析,包含「Accuracy」、「Precision」、「Recall」三種評估指標。簡介於:【Day 28】、詳細介紹於:【Day 29】
(訓練後) 評估 - 新資料適用性 泛化(Generalization):對於新資料、沒看過的資料的模型適用性。此處可參考:【Day 26】
(訓練後) 評估 - 模型測試 使用「獨立測試資料集(Test)」測試? 使用交叉驗證(cross-validation)(又稱bootstrapping)測試? 此處可參考:【Day 27】
(資料分堆的方式) (訓練前) 依據上方「模型測試」的方法,決定資料分堆的方式:訓練用(Training)、驗證用(Validation)、測試用(Test)。此處可參考:【Day 27】

Course - Launching into Machine Learning

第二章節的課程地圖:(紅字標記為本篇文章中會介紹到的章節)

  • Practical ML
    • Introduction to Practical ML
      • Introduction
    • Supervised Learning
      • Supervised Learning
      • Regression and Classification
    • ML History
      • Short History of ML: Linear Regression
      • Short History of ML: Perceptron
      • Short History of ML: Neural Networks
      • Short History of ML: Decision Trees
      • Short History of ML: Kernel Methods
      • Short History of ML: Random Forests
      • Short History of ML: Modern Neural Networks
      • 討論提示: Modern Neural Networks
    • Module Quiz

Regression and Classification

課程地圖

  • Practical ML
    • Supervised Learning
      • Regression and Classification

0. 一樣也先來個小整理,不過今天還有其他內容哦

★ 均方差(mean squared error) 與 交叉熵(cross-entropy) 的比較

常用的計算誤差方法 均方差(mean squared error) 交叉熵(cross-entropy)
使用問題種類 regression problem(回歸問題) classification problem(分類問題)
訓練目標 最小化「均方差」 最小化「交叉熵」
一維畫線(解)依據 只要能使最小距離就好(平方最小) 線畫下去就是要分好兩類資料,不可以有人跑錯邊(誤差會指數成長)
我自己的理解方式(不完全正確) 計算距離,所以不管在線的哪邊沒差,離線平均都近一點就能最小惹 分類正確沒事,分類錯誤非常完蛋!!! 只要有分錯邊,誤差瘋狂上升

1. 「結構化」資料 與 「非結構化」資料

今天我們先討論一下昨天來不及討論的「資料」部分,
我們之前所看到的表格資料我們都可以稱之為「結構化」的資料,
-> 自己的註:也就是「有行有列有數據的表格」都可以算。

「結構化」資料是最常見的ML資料類型。

對比「結構化」資料,自然就有「非結構化」資料,
-> 例如:圖片、音樂、影片...... 都屬於非結構化資料。

稍微想一下應該就會知道... 這些資料應該都沒有直接的「數據」好分析吧(?)

https://ithelp.ithome.com.tw/upload/images/20190916/20120424i5urxrcRc1.png

我們來看一下上圖,上圖是一個有關出生率的公開資料(BigQuery中找得到)
我們來思考一個問題:我們能不能預測嬰兒什麼時間會出生?
老樣子,我們還是把該確定的東西確定一下,

  • 預測的目標label:嬰兒出生的時間(週)
  • 參考的依據features:我們這邊可以選擇媽媽的年齡、體重的變化...
  • 因為嬰兒出生的時間是連續值,所以這是個regression problem

接下來,我們可以很容易的對 BigQuery 下 SQL select 找出你要的資料,
這樣你的ML準備的資料就齊全了。

由「結構化」資料預測事情是非常平常且頻繁的,而且也比較容易完成。

https://ithelp.ithome.com.tw/upload/images/20190916/20120424wJSMnqkdUD.png

我們再看一個例子,我們可以更清楚「結構化」資料的方便性。

我們當然也可以用這表格來預測其他事情。
例如,如果我們想預測嬰兒的體重呢?

  • 預測的目標label:嬰兒的體重
  • 參考的依據features:除了嬰兒體重之外的資料皆可以作為參考
  • 因為嬰兒的體重是連續值,所以這是個regression problem

這樣的預測可以幫助醫院提早診斷新生兒會不會有體重過輕的可能,
可以提早替嬰兒準備恆溫箱等等相關的準備,因此能夠預測嬰兒的體重十分重要。

2. 思考問題

https://ithelp.ithome.com.tw/upload/images/20190916/20120424AXfI2WAtoM.png

Q:對於這個資料集,你覺得他會適合用「linear regression(線性回歸)」還是「linear classification(線性分類)」分析?

答案是,兩個都很適合!

我們來思考一下為什麼,我們仔細觀察這個資料的分布,
如果我們先拿掉資料的顏色與類別(class),沒有任何幫助我們理解數據的線,如下圖

https://ithelp.ithome.com.tw/upload/images/20190918/20120424FsrSRCev5R.png

這個資料感覺可以用兩條斜線可以貫穿其中,
而線旁上下的偏移點可以視為雜訊(noise),
只要能這樣判斷,基本上他就是個很適合用linear regression分析的例子。

我們想預測的值是Y,我們替這張圖加了一些不同的顏色與形狀,
使這個數據的結果明顯的呈現兩條線的分佈,
兩條線有不同的斜率與截距、而這兩條線的noise又各自有不同的標準差。

https://ithelp.ithome.com.tw/upload/images/20190918/20120424zCm0DwJxbr.png

我們將我們所預測的線真的加進圖中,我們可以更明顯感覺到他們的線性關係,即使有些小雜訊(noise),這些線就是能使用linear regression作為分析的證明。

2.1 一維的線性回歸 linear regression

我們先看一維linear regression的分析結果,我們添加一條綠線,
這條綠線表示我們剛剛所認定的藍線與紅線的linear equation(線性組合)

也就是 「藍線」與「紅線」 可以組合成 「綠線」。 (經過一些數學運算)
例如: A(ax+b) + B(cx+d) = ex+f 的感覺 <- 我盡力表達線性組合的概念了XD

注意:這條綠線不管是離 class A 或 class B 皆有段距離。

https://ithelp.ithome.com.tw/upload/images/20190916/20120424VLIoF76pFP.png

這條綠線,換個角度說,我們也可以說他將整個空間分佈成兩等分。

原因是因為我們經由回歸計算,我們就是在做「最小化均方差」的損失,
假使我們計算正確,兩個類別(class)對於這條線應該會有相等的拉力,
也就是在這時我們可得到均方差(mean squared error)最小值,
大約會使他們的平均值等距。
註:前面的課程有提到linear regression的學習目標就是在做「最小化均方差」,如果忘記可以回前面章節看

因為每個類別(class)有不同的斜率與截距,比起對整體做linear regression
我們對於個別兩個類別(class)做linear regression效果應該會更好,
也許就是我們這裡所繪製的藍線與紅線。

★ google講到這邊沒有做一個小結,我自己稍微做點小結論:

這邊自己稍微解釋一下,linear regression基本上是預測一條線,
使我們能依照「一個」feature(X)去做結果的預測label(Y),
(這裡要特別強調「一個feature」,因為等等二維就不是一個了)
也就是遵照這條線的規則,因此我們能得到預測答案,
目前我們會依照我們所有可參考的東西,依照綠色線的預測說是我們預測的結果。
但很明顯的,如果可以用兩條線(藍線與紅線)來做預測,預測誤差一定會小更多。

2.2 二維的線性回歸 2D linear regression

剛剛我們做了一維的線性回歸,現在我們來做看看二維的線性回歸:

二維的線性回歸,也就是說我們不再只依靠一個feature去預測label
也就是不再只靠X去計算出Y,
這裡我們使用兩個feature,「X」 與 「資料所對應的class」,去預測「Y」

「資料所對應的class」,我們先下個他在圖上的定義:

  • 如果該資料屬於A類別,他的特徵值就是1
  • 如果該資料屬於B類別,他的特徵值就是0

所以我們就可以畫出下面這張圖:

https://ithelp.ithome.com.tw/upload/images/20190916/20120424il5OAX6qWI.png

二維的線性回歸(2D linear regression)結果,
不會再是一條「線」,而是由線變成了「平面」。

老樣子我們還是確認一下我們現在的資料:

  • 我們想預測的目標label:Y
  • 我們作為參考的依據features有兩個,X 和 class

兩組不同的數據之間形成了一個平面
這兩組數據現在因為有多了一個類別(class)的維度而分開,
我們把最適合 A class 與 B class 的線加入圖中(紅藍線),
我們也一併把一維的線性回歸結果線(綠線)也畫進圖中,

注意:這個平面並沒有包含上面所說的任何一條線
因為資料的雜訊(noise)使這些線傾斜於這個平面,
反過來說,如果沒有這些雜訊(noise),這三條線應該會完美的皆在這平面上。

★ google講到這邊沒有做一個小結,我自己稍微做點小結論:

二維的線性回歸(2D linear regression)解從「線」,變成了「平面」,
換句話說,我們提供兩種features(X 和 class),能得到一個預測結果label(Y),
數學上空間中的平面只要給其中兩點,就可以找到剩下一點,所以我們說解是「平面」。
.
這個解答比一維的線性回歸好非常多,還記得我們在一維線性回歸得到的答案「綠線」,
不管怎麼看都與所有的資料點有段距離嗎?
我們甚至還說,如果可以用「藍紅線的兩種線性解」分別表示答案,還能得到比「綠線」更好的預測
.
那為什麼這個二維的線性回歸解答比較好?
因為這個平面找得到的Y,離實際上真實資料點超近啊!(點到平面的直線距離)
你可能會問為什麼?
因為這題目需要參考兩個參數(X 和 class)能有更好的預測結果(Y),
舉例子就是:a+b=c,但我今天只給a,要預測c多少...
不是不能預測(至少我們還掌握一半的關鍵a),只是誤差很多而已嘛.....XD
.
當然很多情況當然可能參考更多的參數,也就是更多的features能做到更好的預測
那就是更高維的線性回歸問題了 。

2.3 線性分類 linear classification

我們的思考問題還沒有討論完呢XD,
既然我們都說不管是「linear regression(線性回歸)」還是「linear classification(線性分類)」都很適合分析,那當然我們也要解釋為什麼linear classification線性分類也適合。

但說到這,相信讀者應該也知道答案了,在剛剛的分析中,我們可以看到「線性回歸」所畫出來的線,
也替我們做了一個非常好的資料分離,所以自然這問題使用linear classification(線性分類)也很合適。

但我們想討論的是,這條一維的線性回歸最佳解,
會恰好等於我們的linear classification(線性分類)問題的最佳決策邊界嗎?

自己的註:決策邊界昨天有提過,簡單來說就是可以區分兩類別(class)的決定線

我們以一維線性分類器所計算出來的結果,劃出圖上的黃線。

https://ithelp.ithome.com.tw/upload/images/20190916/20120424rIbVu2NnRT.png

-> 注意:我們可以發現黃線非常接近綠線,但不完全等於

想想看為什麼會這樣呢?

答:因為計算誤差方式的不同,也可以說是最小化誤差的目標不同。

我們直接搬之前我做的表好了XD

問題種類 regression problem(回歸問題) classification problem(分類問題)
答案(label)特性 預測的答案(label)為「連續」值 預測的答案(label)為「非連續」值
利用資料的方式 我們使用數學函數組合不同的features,預測出一個「連續函數」作為我們結果的label 我們用features創造一個抉擇邊界,這個邊界幫助我們區分(分類)出結果label
訓練目標 最小化「預測的結果」與「實際的結果(label)」的誤差 最小化「誤分類(misclassification)」的數量,也就是「預測的分類」與「實際上的分類(label)」的誤差要為最小。
常用的計算誤差方法 均方差(mean squared error) 交叉熵(cross-entropy)
學習類型 監督式學習(Supervised Learning) 監督式學習(Supervised Learning)

注意到「回歸問題」與「分類問題」學習目標是不同的嗎?

  • 分類問題的訓練目標是「最小化交叉熵(cross-entropy)
  • 而回歸問題的訓練目標是「最小化均方差(mean squared error)

而這兩個計算誤差的差別...先不講太深的數學,
但簡單的來說,均方差(mean squared error)存在兩次處罰(quadratic penalty)的計算,
他在算實際點(label)與我們預測點(prediction)的歐氏距離(euclidean distance),
並試著將這距離最小化

就先簡單理解,他有平方嘛,平方不就誤差被放大(更小)了嗎? <- 至少我先這樣簡單理解XD

分類問題所使用的交叉熵(cross-entropy),

  • 實際分類(label)與我們預測分類(prediction)結果相同,處罰會線性的成長(等於幾乎沒差)
  • 如果實際分類(label)與我們預測分類(prediction)是相反的,處罰會指數性的成長

我是理解成,才這麼簡單分成兩類而已?! 你對了就沒事,你錯了你就超級完蛋!!! <- 至少我是先這樣理解XD

所以我們可以仔細看看剛剛的圖,我們分類問題的決策邊界線感覺更在綠色的上面一點,
為什麼? 因為你看綠色線上有些紅點資料正在上面,
綠線上也有些紅點的雜訊(noise)分佈,甚至有些紅點還越線跑到綠色那邊?!?!
照我們剛剛上面的結論 (或者用我的理解也好XD),

我大分類問題使用交叉熵(cross-entropy),你對沒事,你錯你就超級完蛋!!!!
我怎麼可能允許你在我分界上? 還甚至是越界!!! 不可能!!!

數學一點的講法就是,這個越界造成了非常大的誤差!!!
會違背我們的學習目標「最小化交叉熵(cross-entropy)」

而對於線性回歸(linear regression)來說,雖然誤差是二次方的,
(二次方也表示,你在線的這側或對側,只要距離一樣對我來說意義都一樣(平方嘛)。)

只要「距離盡可能的小」,就可以滿足線性回歸的學習目標「最小化均方差(mean squared error)」

不過最後我們還是要提到,這個資料集,
不論使用linear regression或linear classification來分析皆非常適合,
不同於我們之前所預測的 tips 和 bills 的那個資料集(前面章節提過那個),
這問題反而只適用linear regression,不然就是非線性的分類 non-linear classification。


參考資料


上一篇
【Day 16】 Google ML - Lesson 2 - 監督式學習(Supervised Learning)中兩大問題 - Regression & Classification(回歸與分類)
下一篇
【Day 18】 Google ML - Lesson 4 - 什麼是ML模型?訓練的目標? 回歸模型(Regression model), 分類模型(Classification model)的運算
系列文
Google machine learning 學習筆記30

尚未有邦友留言

立即登入留言