# 機器學習入門知識 ###### 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 這張圖: ![](https://i.imgur.com/mOaJ7ld.png) 或是 ML Studio 這張圖: ![](https://i.imgur.com/CaxMsxM.png) 都是分析各種情況適用的模型,可以從 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。