# 機器學習與演算法概論
###### tags: `20200718` `MachineLearning`
葉倚任
國立高雄師範大學數學系助理教授
# 初探
## 機器學習類型與任務
## 集成法
## 特徵選取 => 效果好、模型就要複雜,要確認模型是否有誤(ex 偏差樣本)
## 解釋性AI
### 你眼中的機器學習
>資料分析分成四個大的部分
>>問甚麼問題、定義問題、需求
>>資料擷取、資料清理、資料整合
常發生資料交換不容易,每個公司蒐集資料的政策不同,甚至沒有數據可以用
>>機器學習有限制,需要了解機器學習的流程,才能判斷是否可以做得出來
### 資料科學(Data Science)
>電腦/IT+數學與統計+領域知識
>機器學習可以單純功能面、解決單一的問題
>資料科學是考慮領域知識的總體流程的變動
## 從人類學習到機器學習
人類學習: 從觀察+回饋所得的經驗來學習,就變成"能力"
機器學習: 從蒐集到的資料來學習
>一定要建立資料,除非有open data,但這些資料如果不能在公司中被使用,則需要重新建立,這是一個很耗成本的事情
## 機器學習模型
利用歷史資料找到一個函數 y =f(x)
### What is f?
方程式=> 決策樹、機率函數、線性函數
機器學習就是在學這些方程式
### 機器學習是如何運作的?
資料表達:做資料的處理,讓他可以被模型接受=>這樣才能算
學習演算法:現在已經可以回到原始資料直接去算
模型評估:最耗時的部分,而且聽起來需要領域知識來判斷
---
## Data Representation 資料表達
### What is Data
在機器學習中,最重要的是定義X、Y
feature 用來描述每一筆資料,X
label 用來表達每一筆資料所對應的輸出,Y
> X, Y 需要定義,(有的事情直覺上覺得很容易定義,但在做計算時,就會變得很難)
舉例:Data 是一堆人,任務是分辨男女(Y)。需要取什麼特徵(X)?頭髮長度,頭髮顏色,身高,體重...等。
所以,要依據特定的任務(y)來擷取特徵(x)
>特徵(X)可以是數值、可以是離散的資訊(例如頭髮的顏色、衣服顏色、長褲短褲之類的)
特徵的選取很重要
#### Weather Data Example
過去12小時的天氣資料。
結構式資料比較容易被擷取(ex 是數字)
#### Image Data Example
X要怎麼表達?形狀,顏色,邊緣(edge)。
圖片與影音資料,不容易找出特徵
影像的資料需要透過運算來取出特徵
要把影像上的"特色"抓出來變成"X"
#### Text Data Example
等一下會舉例
## 資料來源很多樣性!
如果可以把資料變成"數值",比較容易計算
### 資料分析的第一步:特徵擷取
以垃圾郵件的決定文字特徵來舉例
#### Text Representation Example ***Bag-of-Words(BoW) Model***
擷取文字去做字典,並寫紀錄單字使用的次數。(Term Frequency)
垃圾文件中使用的文字,特定的文字出現頻率會與一般文章不同
> 把文字變成向量,變成機率分佈
> 把單字變回字根(不過這只在英文適用吧!!)
> 還要除以文章的總字數,換算成標準化的出現頻率
P.S. 不再字典的字,就算了
### 那影像資料呢?
用像素的值變成向量是一個容易將影像資料轉換成向量的方法
#### Using Pixel Values Directly
用像素表達,會受到背景雜訊干擾。
可以用其他的表達方式。
#### Convolution Neural Network (**CNN**)
就是可以自己(CNN)找到Filter。
比較適用於非特徵資料
##### Convolution
把image跟filter相乘,出現新的向量。
找圖片特徵,這樣可以找出來。
##### Filters
把Edge找出來。
找到一個夠好用的Filter,就可以找到救護車的特徵。
> 業務邏輯幫忙比較少的,很適合使用CNN。
---
## What is a Learning Algorithm?
最簡單的分類方法
K-nearest neighbor classifier (kNN) (最近鄰居法)
一個近朱者赤近墨者黑的概念
### 1-Nearest Neighbor classifier
白色的點,當只看1個鄰近點(k=1)時,他是綠色紅色還是藍色?
>所以你需要有座標、顏色,
>座標就可以算距離
>換句話當你的資料無法計算「距離」時,KNN就不能用了
### k-Nearest Neighbor (**kNN**) Classifier
當k=3的時候,白點就被紅色的了。
下一個問題是,K要設多少? => 模型的評估
>每一個k就是一個模型,怎麼去評估哪一個k比較好
>用參數來決定 => 與data有關
>因此需要有一個「機制」來評估
### Use 1-NN to Classify Weather Data
注意預測不會100%準確。
回歸分析可以用的題目,kNN也很適合使用
### Another Example by using k-NN
把圖片上的每一個pixel、換成RGB數字,便可以利用pixel座標與數字來算「距離
就可以用kNN了
### Let's focus on another data: Weather data
離散型的資料可以算KNN嗎?
可以,但是要經過處理
> Naive Bayes 天真貝氏
### Naive Bayes Learning Algorithm
貝氏定理
P(y|x) 看到x時y發生的機率
Naive Bayes 假設每一個事件都是獨立的
#### Naive Bayes
在y=yes時,是sunny的結果 => P(X1|Y)=2/9
然後每個P(X|Y)都可以估出來
> kNN就是找距離,它相信用距離就可以找到分類
### Numeric features in Naive Bayes
> 數值也可以算=>使用機率密度函數
> 通常假設是常態分布
> ***有很多假設在裡面,目的就是要可以實踐。***
### Statistics for weather data
### Remarks for Naive Bayes
單純的問題,假設失誤造成的影響就小。
---
了解數學與演算法,要了解原理、假設,才會知道數學上要調甚麼,計算的結果才會有意義
---
## Evaluation (模型評估)
### Performance Measures
評估之前需要給定一個指標
"分類"
通常使用準確率當作指標
### Evaluation: the key to success
如何 ***客觀*** 評估模型?
把訓練集當作測試集,會變成100%準確。
這是一個極端的例子。
> 未來的場景,未必是看過的資料。
> 拿資料集當測試集,這樣是不客觀的評估。
### Example of Overfitting
在相同的效能下,我們會選擇較簡單的模型
例如綠色的線可以預測已知的資料,所以很準。但對未來的預測可能不好(綠色的線overfitting資料)
當對過去的預測很好,但對未來預測不好,就是overfitting
下一個問題是:那怎麼知道overfitting
### Training Data Versus Testing Data
方法: 把一組資料切成訓練集與測試集
### Holdout estimation
把資料的1/3做測試,剩下2/3作為訓練集
然後作抽樣
為了使抽樣較貼近實際的狀況,會選擇使用分層抽樣
使落差減少
推薦模型?
> 直接線上A-B testing,是比較客觀作法。
### Cross-validation
把資料分成若干等分
### Example: 3-Fold Cross-validation
把每筆資料分堆,分別當作測試集與訓練集
輪流當測試集,最後在平均準確率當作指標。
> 目的就是客觀的評估
### Performance Measures of Imbalanced Problem
不平衡的問題(imbalanced problem)>其實會很常見 (例如瑕疵出現機率,通常都很低,這就是imbalance data)
> 90% 會遇到
> 準確率就不是好的指標
### Confusion Matrix
混淆矩陣
準確率 = TP+TN/(TP+FN+FP+TN)
### Precision and Recall
Precision: TP/(TP+FP) 就是在預測是正確的,結果也是正確的比例
Recall: TP/(TP+FN)

### F1 Score
把Precision跟Recall來做調和平均數
> F1 Score當作指標用來評估Imbalanced Data
但還是沒有解決imbalance的問題
### Strategies to Imbalanced Problem
Down-sampling
> 對數量比較多的做抽樣
Over-sampling
> 對數量比較少的做重複抽樣
---
## 資料表達+學習演算法
### Example: Face Recognotion
任務:分辨人臉
#### How to Represent These Face data
用pixel做資料表達
#### Choose a Classification Model
#### Check the Performance
選1-NN (因為testing data的accurcy比較好)
#### How to Determine K?
多做幾種K去當候選人
---
### Example: Iris Dataset
#### 5-fold Cross Validation
> 硬要選,就選11。
> 11會比較單純簡單。預測能力會較好。

#### Data Analysis Lesson/Experience
### 問題回答:Preciaion and Recall
假設想做行銷模型,需要預測的顧客數目有100人,其中有10會受到推薦而購買產品。
預測這100個人都會受到推薦而購買,100顧客都進行推薦
Precision = 10/100 = 0.1
Recall = 10 / 10 = 1
預測這20個人會受到推薦而購買,只對這20顧客做推薦,其中命中8個
Precision = 8/20 = 0.4
Recall = 8/10 = 0.8
## 企業分享
銀行判斷要不要核貸的案例
Problem Definition
Exploratory Data Analysis => Feature Engineering => Model Training => Model Evaluation
### To Approve, or Not to Approve
> 資料不能出德國。
資料已經被定義好。企業:資產負債表
>但問題的定義都還是要調整,例如一年內沒有還款、二年內沒有還款要怎麼處理?
check data 還是要看一下原始資料的狀況
> imbalanced or not?
### Default Risk of companies (Deutsche)
### Raw Features in Deutsche Bank Dataset
* AD (amortization and depreciation)
* AP (accounts payable)
* AR (account recivable)
* CA
* CASH
* CL
* ...
* SALE
* TA
* TL
* WC
> 沒有分類就開始做,效果不好
> 原因:欄位錯置
### Feature Extraction
不能使用raw data => 資料要經過一定的處理才能變成有用的feature
>利用domain knowledge來產生feature
>從paper裡來
### Data Preprocessing
有一些data的 missing怎麼處理
> 可以用業務邏輯先填 (可以由業務邏輯的直覺處理的_填入零或其他數字)
> 再用演算法填入 missing value
### start to build the model
>K-NN
>Naive Bayes
>Others
難度比較高的是,依據問題選擇模型
### Stretegies of ??
### Performance Measurement
Type I error rate = FN/(FN+TP)X100%
Type II error rate = ...
> 因為是不平衡資料,所以不能只看準確率
### 實驗場景選擇 The Scenario of Experiments
要選用哪一年資料,ex. 預測1998使用1997的資料。
>永遠是用過去來預測未來
>預測的時間,會與你的問題有關
### 結果(看看就好)
> 一定是效果好 (笑)
---
# 機器學習類型
## 監督式學習 Supervised Learning
every x comes with corresponding Y
## 分類與迴歸 Classification and Regression
分類: Y是離散型的
迴歸: Y是數字型的
## Binary Classification
二元分類 (yes or no)
## Multiclass Classification
多元分類(k-NN)
## Regression
線性迴歸可用來預測實數
最小平方法
(大家回想一下)
## A Toy Regression Example
> 拿到資料,要看一下(畫出來)
> 看起來有線性關係,看起來
用KNN可以做
### Linear Regression
長得像線性函數
f(x)=E(y|w)=w0+w1x1+w2x2+....+WpXp
### Least Squares Problem
定義一個損失函數(lost function),當作標準。
平方誤差(損失函數)越小越好。
minRSS(w)=Σ(yi-f(xi))^2
=Σ(yi-W0-ΣWijWj)^2
> F 是一個超複雜的函數
### 頭的大小與腦的重量之資料集
> k-NN 是 非線性
## Performance Measures of Regression
Mean absolute error 平均絕對誤差
Mean Square Error 平均平方誤差
R square 1-(Σ(yi-yihead)/Σ(yi-yiave))^2
> 用平方誤差會 out line there
> 但平方可以微分,所以反而常用
> ### Type of Learning (by output of Y)
> ### Supervised Learning
## 非監督式學習 Unsupervised Learning
每一個x沒有對應的y
## Clustering
給一堆data,變成不同樣態的群
### Unsupervised Learning Example: Clustering
> 案例
> 影像上的分類
>> 選出代表性樣態
representative points
### A Popular Clustering Method: K-means
最簡單的分群演算法
把n筆資料分成k群,每個點到那個群的群中心最短
> 變成一個最佳化問題
### EM-style algorithm
1. 選中心點
2. 找距離中心點最近的距離
3. 重複1-2,直到收斂
部會是最佳解,而是local min
### Initial Centroids Might be Critical
會因為初始值,導致結果會落入區域最佳解。
而不會找到全域最佳解
下一個問題是,要分幾群??
### How to Determine k in K-means
可以計算每個點到群中心的距離的總和
當群越多,這個總數會越小
所以我們通常會找一個「指數下降的彎曲處」作為分群的點
### Applying Clustering to Segmentation
例如,花可以分出花瓣花萼花蕊
沒有給定分類,模型自己找出分類
### Applying Clustering to Select Representative points
1. 先分三個群
2. 在對每個群找三個代表點
3. 本來要計算480個,現在只要計算9個
> 用的比較少一點,比較多還是監督式學習
>
## 異常資料 (Anomaly Data)
> 很少出現才叫異常
### 異常偵側(Anomaly Detection)
> 跟別人不一樣,就叫異常
> 用非監督式學習,可以比較出有異於大部分的數字的資料
### 為何需要異常偵測之方法
機器學習中分類演算法,通常需要大量的標記資料
實務上有標記的異常資料點數數量常是少數,甚至沒有出現過
非監督式的異常偵測演算法主要經過未標記之訓練資料來進行異常偵測
### Anomaly (Outlier) Detection by k-NN
方法假設: 如果資料點在密度很高的地方,那他應該不是異常點
做法:計算 1/最近k個鄰居距離總和
數字越小、就越異常
## Semi-supervised Learning
資料中有的有lable有的沒有
例如:病患的檢測結果,有的有經過醫生判斷、有的沒有
因此,利用這些無lable的資料來避免昂貴的lable
### Example: Active Learning (AL)
資料有些有label,有些沒有。
> 我希望繼續標註label,但成本太貴,該怎麼辦?
> 標哪些資料CP值最高?
### Framework of Active Learning
### A Query Strategy in AL: Uncertainty
利用已知label的點訓練一個模型,然後用這個模型去預測所有數字的uncertainty
要找介於兩者中間的標,因為在邊界,不好分,所以可以提供邊界點的定義。
> ### 你覺得目前工作的領域有哪些問題符合半監督式機器學習?
## Reinforcement Learning (RL-Approach)
增強式學習
上一個步驟(決策)與下一步驟是連動的
> Goal: How agents ought to **take actions** in **an environment** so as to maximize some notion of **cumulative reward**.
Agent:代理人、操作人,會執行一個動作,產生一個狀態
Environment:一個環境,可以產生狀態
Reward:因為一個狀態會得到一個分數
### RL Example: Cart Pole
> 撐著桿子不要掉下來的一個遊戲
## A Simple RL Approach: Q-Learning

Q-table會因為上一個動作產生一個新的Q-table
適合的工作 ex 有好多隻股票,來做資金配置
在RL中,環境的設定是最重要的
> ## 90%是監督式學習的問題
(簡報不能都不一樣啊哭)(難過)
---
# 集成方法 (Ensemble Method)
## Ensemble Method (舊投影片108頁)
三個臭皮匠勝過一個諸葛亮的概念
用幾個比較弱的模型(weak leaner)或varoius leaner可以來做一個比較強大的模式
## Bagging
隨機取樣,就可以產生k個model
### Testing Phase
分類問題,用很多不同的模型去投票(做分類)
## An Example of Bagging in Regression
模型的異質性越高
最後的模型會更好
## A Popular Ensemble Method by Bagging
### Radom Forest
隨機森林很常用,常用decision tree作為weak leaner
### Before Random Forest: Decision Tree
> 喜歡用的原因是有明確的對錯
### Constructing Decision Trees
>只要有好的節點就可以有好的樹
### Which Feature to Select?
要選哪一個當作根節點?
分支下來,如果資料一致性高的,會是最好的選擇!
所以要提供一個指標
在decision tree中 => gain ratio
### Criterion for Feature Selection
### Computing Information
### Illustration of Entropy
定義"亂度"
再亂度的指標中,我們會希望越"不亂"越好
### Information Gain of Outlook Feature
> 分之前與分之後的差距越大越好,代表亂度很亂
### Information Gain of All Feature
Outlook 最大,所以就選他當節點
> 接著繼續分Sunny跟rainy,分到分乾淨為止
### Continue to Split
### Final Decision Tree
樹的深度要注意!!!
>樹越深表示複雜度越高,那就表示模型越複雜
>然後就overfitting了
所以樹的深度在實際上算的時候,要tune一下
## Radom Forest
把很多樹加起來
## Boosting
也是要創造一個分類模型,然後聚集起來
Bagging是分開來算,然後加起來
Boosting會經過一些模型,模型中如果有不準確的部分,會針對那個模型設計權重,然後再重新訓練,換句話說,上一步與下一步是有關連的
Boosting是一個線性的關係,在計算的過程中自己找出現性的關係
### testing phase (測試集)
## weaker learner / various learner
---
# 特徵選取
到底哪些特徵比較重要,然後用解釋性AI來做
## Which Features are Important?
## Strategies of Feature Selection
## Filter Method
選特徵的方式與模型(演算法)無關
設計一些標準或指標,來說哪一個特徵比較重要
例如線性迴歸 就會選擇R^2很高的
(筆記太長 開始Lag了)
## Pearson Correlation(For regression)
要加絕對值,正相關跟負相關都一樣重要
透過相關係數的ranking來找出幫助最大的
## Mutual Information (For classification)
這堆有點複雜,檢查XY相關程度有多高
如果X跟y沒有關係,則mutial information =1
我們會希望mutial information越小越好,因為這樣才有關係
### Example:
X3 相關性最高
## Numeric Features
## Wrapper Method
跟演算法有關
### Forward Selection
一個一個算,然後找出一個正確性比較好的(F4)
接著看F1+F4, F2+F4, +...+, F6+F4
然後找出第二個比較好的
### Backward Selection
每次抽出一個變數,會讓模式比較好
## Embedded Methods
天生帶有Feature比較重要
### Find Important Features with Regression
> 看這個要小心,因為係數跟X有關
### Boston Housing Data
預測房價的
>權重容易失真,因此使用前要做標準化或轉成高斯分布
#### after normalization
把特徵限縮在0~1之間,或是在兩個標準差(常態分布)之間。
不然結果會差很多
## LASSO (Least Absolute Shrinkage and Selection Operator)
### Geometric Interpretation for Shrinkage in LASSO and Ridge Regression
### Shrinkage Demo in Boston Dataset(After normalization)
## How to Apply to Feature Selection
---
# 解釋性AI
## Husky or Wolf?
## Learn a “Husky vs, Wolf” classifier
## Prediction by the Well-trained Classifier
***為什麼*** 是野狼?
就運氣不好啊
不會啊,跟狼很像啊
我怎麼跟說不是狼~~
## Prediction Analysis by Explainable AI
因為被背景雜訊干擾,變成偵測背景的雪了
因為有樣本的偏差,造成預測結果錯了
利用解釋性AI可以告訴我們偏差、然後告訴你那些特徵被誤用了
## Why we need an explainable AI
not only for the customer but also the model reliability
## Linear Model is More Easy to be Interpretable
> The best explainable of a simple model is the model itself
如何解釋一個線性模型,正的係數表示正相關,負的係數表示負相關
重點在於,跟業務經驗不同時,該特徵可以被拿出來被討論或是被排除
## How to Explain a Complicated Model?
Global interpretation
Local interpretation
### Global interpretation (Parial Dependence為例)
#### Parial Dependence Plot (PDP)
都是可以獨立於模型之外
去看特定特徵變化時,預測結果的變化(通常只看一個、其他特徵不動)
#### Example 1
f為預測一天會借出多少腳踏車之random forest模型
假設溫度很重要,所以就只讓溫度變化,來看到借出腳踏車的預測結果的差別
> 不是在看原始資料的長相,而是在看模型的解釋
#### Example 2
在做模型的EDA
### Local interpretation
#### A Popular Strategy: Additive Feature Attribution Method
在局部的區域去做線性的模型,來解釋局部的狀況
#### Interpretable Representation: Image
把圖片任意切割M個
然後去找一個局部的區塊跟他附近很像
然後每個局部都跟他附近很像
最後大家就都很像
#### Local Accuracy
找到一個g跟f是一樣的
局部很像就夠了
#### Local Linear Model
只局部看圖片,來判斷是否有某個物件
解釋性AI可以告訴你,這個特徵是用來解釋模型上可以用來說明哪個
### Do You Trust Your Model
## Some Useful Tools
SHAP: https://github.com/slunderg/shap
LAME: https://github.com/marcotcr/lime
Ai Explantion 360: https://github.com/Trusted-AI/AIX360
# 結論