# 機器學習入門知識
###### tags: `Machine Learning`
## 機器的學習方法
:::info
你要先知道:
學習方法沒有絕對的好與壞,端看當下的案例適合哪一種。
:::
1. 監督式學習 Supervised learning
使用人工預先label好的資料訓練模型。
人工成本大於電腦運算成本。
適合以下狀況:
* 需要準確特徵
* 資料量不多
* 成本充足
* 有標準答案
**常見的訓練演算法:**
* 迴歸 Regression
* 分類 Classification
2. 非監督式學習 Unsupervised learning
使用完全沒有label的資料,讓機器自己找出資料的特徵並分群。
電腦運算成本大於人工成本。
適合以下狀況:
* 資料量龐大
* 或不想耗費太多成本
* 可接受不重要的特徵
* 不一定有標準答案
**常見的訓練演算法:**
* 分群 Clustering
* 關聯規則學習 Association Rule Learning
* 降維 Dimension Reduction
3. 強化學習 Reinforcement learning
配合獎勵機制,讓機器自己尋找好的結果並避免壞的結果。
適合以下狀況:
* 有明確正負面獎勵的環境
* 可互動的環境
4. 半監督式學習 Semi-supervised learning
有、無label的資料各佔一部分(通常label過的為少數)。
<font color = "red">通常</font>比非監督式學習的正確率高。
適合以下狀況:
* label過的資料不好取得或成本過高
5. 深度學習 Deep learning
利用神經網路來解決特徵層分佈的一種學習過程。
可以將原始訊號直接作為輸入值,而不需要建立任何特定的輸入特徵。通過**多層**神經元,DNN可以<font color="red">自動</font>在每一層產生適當的特徵,最後提供一個非常好的預測,極大地消除了尋找「特徵工程」的麻煩。
**常見的學習框架:**
* 深度神經網路 Deep neural networks, DNN
* 卷積神經網路 Convolutional neural networks, CNN
* 深度置信網路 Deep belief networks, DBN
* 循環神經網路 Recurrent neural networks, RNN
* 長期短期記憶網路 Long short-term memory, LSTM
* 生成對抗網路 Generative adversarial networks, GAN
6. 遷移學習 Transfer learning
將已經學習到的知識應用在其他層面。
換言之,就是將現有的模型用於他處,降低學習成本。
## 開始實作機器學習的流程
1. 收集資料 Gathering data
2. 準備數據 Preparing that data
3. 選擇模型 Choosing a model
4. 訓練機器 Training
5. 評估分析 Evaluation
6. 調整參數 Hyperparameter tuning
7. 預測推論 Prediction
### 收集資料 Gathering Data
就是收集資料。沒了。
盡量收集根想預測的內容有關的資料以訓練模型。
### 準備數據 Preparing That Data
又稱為「資料預處理」(Data Preprocessing)。
有以下幾點要做:
1. 下載數據集
2. 導入資料庫
3. 導入數據集
4. 缺失數據的處理
5. 分類數據
6. 特徵縮放
7. 將數據分成訓練集與測試集(Train set & Test set)
* 數據集
自變量:已知的部分。
應變量:要預測的部分。
* 缺失數據的處理
根據缺失的類型是**完全隨機缺失**、**隨機缺失**、**非隨機缺失**,可以決定要用何者方式處理。
可以參考[數據缺失值處理](https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/736140/)還有[如何處理缺失值](https://medium.com/jackys-blog/%E5%A6%82%E4%BD%95%E8%99%95%E7%90%86%E7%BC%BA%E5%A4%B1%E5%80%BC-%E4%BD%BF%E7%94%A8python-479e030a43c7),了解更詳細的內容。
1. 刪除
* 適用於「**完全隨機缺失**」
直接把有缺失的資料刪除。
> 單筆資料的某個欄位缺失→刪除該筆資料
> 單一特徵有60%的資料缺失→刪除該特徵
但通常會選擇填補資料!填補永遠比刪除好,因為刪除容易造成結果偏差。
如果缺失的多,刪掉的多,就會大幅影響結果。
2. 填補
* 適用於「**隨機缺失**」、「**非隨機缺失**」
根據不同的資料型態,有各種填補的方式,最簡單的就是利用統計中的眾數、平均數、中位數來填補缺失資料。
常見工具:SimpleInputer。
另外也可以利用「**擬合**」來填補,就是利用其它變量做模型的輸入進行缺失變量的預測,與我們正常建模的方法一樣,只是目標變量變為了缺失值。
* 分類數據 Categorical Data
這裡的分類不是指 classificate,而是「類別」。
顧名思義就是具有分類功用的資料,但通常不是文字,如性別、國別、地區;由於電腦無法判讀這些資料,必須要將其轉換為數字才可以運算。
常見工具:OneHotEncoder、LabelEncoder。
* 特徵縮放
看看[一文詳解特徵縮放](https://www.mdeditor.tw/pl/ptoC/zh-tw)、[資料的正規化與標準化](https://aifreeblog.herokuapp.com/posts/54/data_science_203/)吧。
就像人類社會一樣,評斷一個人並不能只看單一事件,而是要有所謂的「綜合評價」,且每個人著重的點不進相同;機器學習在訓練模型上也是如此,當有多個特徵可供使用時,不一定每個特徵都一樣重要,這時候就要使用特徵縮放來**放大重要的特徵、縮小較不重要的特徵**。
在某些演算法下做特徵縮放,可以幫助加快收斂,減少整體耗費時間;某些演算法本身就是處理差異極大的狀況,因此特徵縮放派不上用場。由此可知,特徵縮放並非非做不可。
特徵縮放的方法:
1. 標準化 Standardisation (Z-Score Normalization)
$x_{stand}=\dfrac{x-mean(x)}{StandardDeviation(x)}$
使資料的平均值變為0、標準差變為1。
2. 最小值最大值正規化 Min-Max Normalization
$x_{norm}=\dfrac{x-min(x)}{max(x)-min(x)}\in[-1,1]$
$\mu$為資料的平均值,則資料將縮放到 [-1, 1] 區間中且平均值 = 0。
3. 平均值正規化 Mean Normalization
$x_{norm}=\dfrac{x-\mu}{max(x)-min(x)}\in[0,1]$
將資料等比例縮放到 [0, 1] 區間中。
4. Unit Vector Normalization / Scaling to Unit Length
:::danger
窩看不懂,先pass
:::
* 分出訓練集與測試集
用訓練的資料去測試的話,準確率就不可參考,因為一定會很高(就像是給你寫過考古再去考一樣的內容,沒辦法確定你是不是真的會),所以要分成訓練集跟測試集,測試集的內容在使用時一定要是第一次看到。
常見工具:train_test_split。
### 選擇模型 Choosing a model
根據資料跟想要預測的結果,決定要用迴歸、分類、分群還是類神經網路。
之後的訓練機器、評估分析、調整參數、預測推論都是從這裡選擇的模型開始衍伸,隨著經驗增長,會更容易找出適合的模型,但是很多參數要怎麼調整還是要多加嘗試,才容易找出相對最佳解。
可以看看 Scikit-Learner 這張圖:

或是 ML Studio 這張圖:

都是分析各種情況適用的模型,可以從 start 開始向下參考。
### 訓練機器 Training
### 評估分析 Evaluation
### 調整參數 Hyperparameter tuning
### 預測推論 Prediction
# 監督式學習 Supervised Learning
## 迴歸 Regression
常見的迴歸演算法有:
1. 線性迴歸
2. 多元線性迴歸
3. 多項式迴歸
[點我](https://hackmd.io/@joanne8826/S1aX5RHI_)了解迴歸的各種演算法。
## 分類 Classification
常見的分類演算法有:
1. 邏輯回歸 Logistic regression
2. 支持向量機 SVM, Support vector machine
3. 核函數支持向量機 Kernel function SVM
4. 樸素貝葉斯 Naive Bayes
5. 決策樹 Dicision tree
6. 隨機森林 Random forest
[點我](https://hackmd.io/@joanne8826/rJb5WNvLO)了解分類的各種演算法。
# 非監督式學習 Unsupervised Learning
## 分群 Clustering
這裡會提到的演算法有:
1. K-Means
2. K-Means ++
[點我](https://hackmd.io/@joanne8826/H1wm1antu)了解分群的各種演算法。
## 關聯規則學習 Association Rule Learning
最常使用的算法為:
1. 先驗算法 Apriori algorithm
[點我](https://hackmd.io/@joanne8826/SJz01TntO)了解關聯規則學習常用的演算法。
## 降維 Dimension Reduction
這裡會提到的演算法有:
1. 主成分分析 Principal component analysis,PCA
2. 核函數主成分分析 Kernel principal component analysis, Kernel PCA
[點我](https://hackmd.io/@joanne8826/HkTmgThKd)了解降維常用的演算法。
# 強化學習 Reinforcement Learning
:::danger
待補
:::
# 深度學習 Deep Learning
雖然在開頭的深度學習介紹中,有提到 6 種不同的深度學習框架,但這裡只會先引入 ANN 的概念後,進一步解釋 CNN。
## 人工神經網路 Artificial Neural Network
包含以下概念:
* 神經元 The neuron
* 激勵函數 Actication function
* 神經網路如何運作
* 神經網路如何訓練
* 梯度下降 Gradient descent
* 隨機梯度下降 Stochastic gradient descent
* 反向傳播 Back propogation
[點我](https://hackmd.io/@joanne8826/B1zgGT2Fd)深入了解 ANN。
## 卷積神經網路 Convolutional Neural Network
包含以下概念:
* 卷積 Convolution
* 線性整流層 ReLU layer
* 最大池化 Max pooling
* 扁平化 Flatting
* 全連接 Full connection
[點我](https://hackmd.io/@joanne8826/Hy7fzT3F_)深入了解 CNN。