今天的內容會很數學......不過我盡量試著用自己的方式講的比較簡單一點了,
裡面附帶一點我自己比較ㄎㄧㄤ的理解方式,但不一定完全正確就是XD,
希望大家能比較舒服的看完比較數學的這部分(?)
我們繼續新課程 Launching into Machine Learning 的第二章~
這幾天的文章會是一系列的,會需要一起看才比較能看懂整個ML模型的輪廓,
然而因為一天能寫的內容量有限,所以我會在前言部分稍微說明我寫到哪。
因為ML模型的訓練階段章節內容會分很多部分,我們要先確認好自己在哪個階段,
以免吸收新內容卻不知道用在內容的什麼地方。
★ML的整個「訓練過程」:這裡以監督式學習(Supervised Learning)為例
階段 | 要做的事情 | 簡介 |
---|---|---|
(訓練前 ) |
決定資料集與分析資料 | 你想要預測的是什麼資料? 這邊需要先知道 example 、label 、features 的概念。介紹可參考:【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】 |
第二章節的課程地圖:(紅字標記為本篇文章中會介紹到的章節)
Supervised Learning
Regression and Classification
課程地圖
★ 均方差(mean squared error) 與 交叉熵(cross-entropy) 的比較
常用的計算誤差方法 | 均方差(mean squared error) | 交叉熵(cross-entropy) |
---|---|---|
使用問題種類 | regression problem (回歸問題) |
classification problem (分類問題) |
訓練目標 | 最小化「均方差」 | 最小化「交叉熵」 |
一維畫線(解)依據 | 只要能使最小距離就好(平方最小) | 線畫下去就是要分好兩類資料,不可以有人跑錯邊(誤差會指數成長) |
我自己的理解方式(不完全正確) | 計算距離,所以不管在線的哪邊沒差,離線平均都近一點就能最小惹 | 分類正確沒事,分類錯誤非常完蛋!!! 只要有分錯邊,誤差瘋狂上升 |
今天我們先討論一下昨天來不及討論的「資料」部分,
我們之前所看到的表格資料我們都可以稱之為「結構化」的資料,
-> 自己的註:也就是「有行有列有數據的表格」都可以算。
「結構化」資料是最常見的ML資料類型。
對比「結構化」資料,自然就有「非結構化」資料,
-> 例如:圖片、音樂、影片...... 都屬於非結構化資料。
稍微想一下應該就會知道... 這些資料應該都沒有直接的「數據」好分析吧(?)
我們來看一下上圖,上圖是一個有關出生率的公開資料(BigQuery中找得到)
我們來思考一個問題:我們能不能預測嬰兒什麼時間會出生?
老樣子,我們還是把該確定的東西確定一下,
label
:嬰兒出生的時間(週)features
:我們這邊可以選擇媽媽的年齡、體重的變化...regression problem
接下來,我們可以很容易的對 BigQuery 下 SQL select 找出你要的資料,
這樣你的ML準備的資料就齊全了。
由「結構化」資料預測事情是非常平常且頻繁的,而且也比較容易完成。
我們再看一個例子,我們可以更清楚「結構化」資料的方便性。
我們當然也可以用這表格來預測其他事情。
例如,如果我們想預測嬰兒的體重呢?
label
:嬰兒的體重features
:除了嬰兒體重之外的資料皆可以作為參考regression problem
這樣的預測可以幫助醫院提早診斷新生兒會不會有體重過輕的可能,
可以提早替嬰兒準備恆溫箱等等相關的準備,因此能夠預測嬰兒的體重十分重要。
Q:對於這個資料集,你覺得他會適合用「linear regression(線性回歸)」還是「linear classification(線性分類)」分析?
答案是,兩個都很適合!
我們來思考一下為什麼,我們仔細觀察這個資料的分布,
如果我們先拿掉資料的顏色與類別(class),沒有任何幫助我們理解數據的線,如下圖
這個資料感覺可以用兩條斜線可以貫穿其中,
而線旁上下的偏移點可以視為雜訊(noise),
只要能這樣判斷,基本上他就是個很適合用linear regression分析的例子。
我們想預測的值是Y,我們替這張圖加了一些不同的顏色與形狀,
使這個數據的結果明顯的呈現兩條線的分佈,
兩條線有不同的斜率與截距、而這兩條線的noise又各自有不同的標準差。
我們將我們所預測的線真的加進圖中,我們可以更明顯感覺到他們的線性關係,即使有些小雜訊(noise),這些線就是能使用linear regression
作為分析的證明。
linear regression
我們先看一維linear regression
的分析結果,我們添加一條綠線,
這條綠線表示我們剛剛所認定的藍線與紅線的linear equation
(線性組合)
也就是 「藍線」與「紅線」 可以組合成 「綠線」。 (經過一些數學運算)
例如: A(ax+b) + B(cx+d) = ex+f 的感覺 <- 我盡力表達線性組合的概念了XD
注意:這條綠線不管是離 class A 或 class B 皆有段距離。
這條綠線,換個角度說,我們也可以說他將整個空間分佈成兩等分。
原因是因為我們經由回歸計算,我們就是在做「最小化均方差」的損失,
假使我們計算正確,兩個類別(class)對於這條線應該會有相等的拉力,
也就是在這時我們可得到均方差(mean squared error)最小值,
大約會使他們的平均值等距。
註:前面的課程有提到linear regression
的學習目標就是在做「最小化均方差」,如果忘記可以回前面章節看
因為每個類別(class)有不同的斜率與截距,比起對整體做linear regression
,
我們對於個別兩個類別(class)做linear regression
效果應該會更好,
也許就是我們這裡所繪製的藍線與紅線。
★ google講到這邊沒有做一個小結,我自己稍微做點小結論:
這邊自己稍微解釋一下,
linear regression
基本上是預測一條線,
使我們能依照「一個」feature
(X)去做結果的預測label
(Y),
(這裡要特別強調「一個feature
」,因為等等二維就不是一個了)
也就是遵照這條線的規則,因此我們能得到預測答案,
目前我們會依照我們所有可參考的東西,依照綠色線的預測說是我們預測的結果。
但很明顯的,如果可以用兩條線(藍線與紅線)來做預測,預測誤差一定會小更多。
2D linear regression
剛剛我們做了一維的線性回歸,現在我們來做看看二維的線性回歸:
二維的線性回歸,也就是說我們不再只依靠一個feature
去預測label
,
也就是不再只靠X去計算出Y,
這裡我們使用兩個feature
,「X」 與 「資料所對應的class」,去預測「Y」
「資料所對應的class」,我們先下個他在圖上的定義:
所以我們就可以畫出下面這張圖:
二維的線性回歸(2D linear regression
)結果,
不會再是一條「線」,而是由線變成了「平面」。
老樣子我們還是確認一下我們現在的資料:
label
:Yfeatures
有兩個,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
能做到更好的預測。
那就是更高維的線性回歸問題了 。
linear classification
我們的思考問題還沒有討論完呢XD,
既然我們都說不管是「linear regression(線性回歸)」還是「linear classification(線性分類)」都很適合分析,那當然我們也要解釋為什麼linear classification
線性分類也適合。
但說到這,相信讀者應該也知道答案了,在剛剛的分析中,我們可以看到「線性回歸」所畫出來的線,
也替我們做了一個非常好的資料分離,所以自然這問題使用linear classification
(線性分類)也很合適。
但我們想討論的是,這條一維的線性回歸最佳解,
會恰好等於我們的linear classification
(線性分類)問題的最佳決策邊界嗎?
自己的註:決策邊界昨天有提過,簡單來說就是可以區分兩類別(class)的決定線。
我們以一維線性分類器所計算出來的結果,劃出圖上的黃線。
-> 注意:我們可以發現黃線非常接近綠線,但不完全等於。
想想看為什麼會這樣呢?
答:因為計算誤差方式的不同,也可以說是最小化誤差的目標不同。
我們直接搬之前我做的表好了XD
問題種類 | regression problem (回歸問題) |
classification problem (分類問題) |
---|---|---|
答案(label)特性 | 預測的答案(label)為「連續」值 | 預測的答案(label)為「非連續」值 |
利用資料的方式 | 我們使用數學函數組合不同的features ,預測出一個「連續函數」作為我們結果的label |
我們用features 創造一個抉擇邊界,這個邊界幫助我們區分(分類)出結果label |
訓練目標 | 最小化「預測的結果」與「實際的結果(label )」的誤差 |
最小化「誤分類(misclassification)」的數量,也就是「預測的分類」與「實際上的分類(label )」的誤差要為最小。 |
常用的計算誤差方法 | 均方差(mean squared error) | 交叉熵(cross-entropy) |
學習類型 | 監督式學習(Supervised Learning) | 監督式學習(Supervised Learning) |
注意到「回歸問題」與「分類問題」學習目標是不同的嗎?
而這兩個計算誤差的差別...先不講太深的數學,
但簡單的來說,均方差(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。
coursera - Launching into Machine Learning 課程
若圖片有版權問題請告知我,我會將圖撤掉