# 機器學習 周信宏老師機器學習課程 https://www.youtube.com/watch?v=G0Z-zjIEX8k&list=PLQTu1ykb-JioS6Fa3ZRGEZojgurZmWb4D&index=2 ## 機器學習種類 ### 考慮學習過程人類是否有監督 * 監督式學習: 用標記過的資料訓練 * 非監督式學習: 用沒有標記過的資料讓機器自己分類  * 半監督式學習 只有部分分類完的資料,其餘資料根據已分類的進行分群 * 強化式學習 無法事先標記,只能在機器產生反應時告訴機器對或錯,給予獎勵或處罰,從錯誤中學習  ### 考慮能否從傳入的資料進行增量學習 * Batch learing(offline) 訓練時,所有訓練資料要是可用的,只有在訓練完成時model才能用  * Online learing 資料輸入後,立即重新訓練更新model的權重  ## Neuron and Perceptron ### Neuron(神經元) input乘以weight加總後輸入神經元,神經元運算後再輸出  ### Perceptron(感知器) Perceptron是實現神經元的模型  通過資料訓練調整權重 方法:  delta w = learning rate * 輸入 * 正確答案跟計算出來的結果的偏差 ### 神經網路  ## Multi Layer Perceptron(MLP)  同一層神經元彼此獨立 https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-%E5%A4%9A%E5%B1%A4%E6%84%9F%E7%9F%A5%E6%A9%9F-multilayer-perceptron-mlp-%E9%81%8B%E4%BD%9C%E6%96%B9%E5%BC%8F-f0e108e8b9af https://blog.csdn.net/liaomin416100569/article/details/130572559?spm=1001.2014.3001.5506 https://www.youtube.com/watch?v=aircAruvnKk&list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi&index=1 ### 激活函數 (Activate function) 解決非線性問題 https://brickexperts.github.io/2019/09/03/%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0/ * Sigmoid  - 輸出介於0到1之間,適合用於輸出機率的模型 因為機率的值就是介於0到1 - 不適合多層網路模型 * tanh  * Rectified Linear Unit(ReLU)  - 在神經的生理方面,要刺激超過某個強度,才會引發這個神經衝突 ReLU就捕捉了這種生物這個神經元的這個特性 * Softmax  - 輸出介於 0~1 ,加總為1,適合多分類的機率模型 ### 損失函數 (Loss Function) 計算預測值跟實際值的偏差 https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8-%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92-%E5%9F%BA%E7%A4%8E%E4%BB%8B%E7%B4%B9-%E6%90%8D%E5%A4%B1%E5%87%BD%E6%95%B8-loss-function-2dcac5ebb6cb  * 如何選擇: 看計算出來的 error大小,太大用log縮小,太小用平方放大  ### One-hot Encoding  ## 如何調整MLP權重 調整權重讓loss function的值最小 https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-%E5%A4%9A%E5%B1%A4%E6%84%9F%E7%9F%A5%E6%A9%9F-multilayer-perceptron-mlp-%E5%90%AB%E8%A9%B3%E7%B4%B0%E6%8E%A8%E5%B0%8E-ee4f3d5d1b41     **SGD**  一次一筆資料  一次多筆資料  ### Optimizer 使用數值方法在不斷訓練中,更新==權重==和==bias==讓loss function 的誤差能夠最小 https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E5%9F%BA%E7%A4%8E%E6%95%B8%E5%AD%B8-%E4%B8%89-%E6%A2%AF%E5%BA%A6%E6%9C%80%E4%BD%B3%E8%A7%A3%E7%9B%B8%E9%97%9C%E7%AE%97%E6%B3%95-gradient-descent-optimization-algorithms-b61ed1478bd7 * SGD * AdaGrad 自動調整learning rate * RMSprop 解決AdaGrad learning rate 急遽下降的問題 * Adam  ## 輸入輸出 ### Multi-Input Model 多個輸入單個輸出 ex:商品價格預測 input:照片、品牌、用途... output:價格  ### Multi-Output Model ex:物件偵測 input:圖片 output:人的性別、年齡...  ### Multi-Input Model and Multi-Output Model ex:天氣預測 input:衛星雲圖、當前天氣資訊... output:降雨機率、溫度、濕度...  ## Model Evaluation Metrics ### Confusion Matrix  * Accuracy: (TP+TN) / Total TP數量很少、資料不平均Accracy就會造成誤導 ex:罕見疾病 * Pecision: TP / (TP+FP) 預測yes的,裡面有多少是真的yes Covid篩劑出現陽性,真正有中的機率 * Recall(sensitivity): TP / (TP+FN) 真正是yes的,有多少被預測為yes recall高:有病的都有找出來 * Specificity TN / (FP+TN) 沒病的有多少預測真的沒病 * F-measure F1 score 兼顧 precision 和 recall    圍的區域越接近正方形越好  ROC圍的面積 ### Confusion Matrix ``` python import numpy as np # 預測類別 predictions = model.predict(x_test) predicted_classes = np.argmax(predictions, axis=1) print(predicted_classes) import pandas as pd print(pd.crosstab(y_test.reshape(-1),predicted_classes,rownames=['label'],colnames=['predict'])) ```  ## Image convolution 強化影像中的重要特徵,消除不需要的特徵 https://hackmd.io/@allen108108/rkn-oVGA4 Low Pass Filter: 消除高頻雜訊 High Pass Filter: 消除低頻雜訊  Sobel Filter: 用於邊緣偵測  Laplacian Filter:  ## CNN MLP缺點: 圖片太大,需要的權重會很多 CNN會萃取圖片重要的特徵  Zero-padding: 在圖片周圍補0  Stride: 一次要滑幾格  Depth: 用幾個filter  Pooling: 讓圖片變小  ### 超參數 * 圖片必須是2的倍數 * fliter 大小一般用3*3 * Pooling 一般不超過 3*3 ## 經典CNN模型 ### LeNet  ### AlexNet * 使用Relu * 3*3 pooling kernel * Data augmentation, Dropout * mini-batch SGD ### VGGNet * 2*2 pooling kernel  ### ResNet * 首次優於人類的準確率  ## Data Augmentation 讓資料可以更多 不能讓重要特徵不見 ### rotation  ### Shift  ### Zoom  ### Brightness  ## OpenCV 跨平台的電腦視覺的函式庫   * 影像切割  * 色彩轉換  * channel slicing  ## Classic Datasets for Data Analysis ### Iris Dataset 娟尾花的數值資料,不是圖片  ### Boston Housing Dataset 波士頓裡面各個城鎮的資料 多用於房價預測 ### Breast Cancer Wisconsin Dataset 乳癌數據  ## Data Preprocessing ### Feature selection 決定要使用那些資料,把不要的刪掉 ``` python= import pandas df = pd.read_cvs('data.csv') df.drop(['id','name']) ``` ### Dealing with missing data * delete 如果有feature資料缺失太多,直接捨棄 * fill the gaps 類別:補0 數值:平均、中位數、補0 ``` python= data['price']=data['price'].fillna(data['price'].mean()) ``` ### Convert data for non-numeric type * 地址:轉換成經緯度 * 文字:給編號 文字要有可比較性 * 類別:沒有大小關係,用one hot encoding 刪除重複資料 ``` python= data=data.drop_duplicates(keep='first') ``` ### Pick out the outliers  * 處理不平均資料 ex:罕見疾病 1. duplicate the data 2. 刪除部分資料 3. 用 class_weight  ### Standardization 資料範圍有大有小、單位不同 z-score   ### Normalization 把資料壓縮在0到1之間 ### Traning strategy * Regression 直接預測值 ex:股價、房價 * Classification 分類 ## Feature Selection ### RFE 每個round結束後把不重要的feature剔除後,再繼續學習 ### Filter 根據feature發散的程度(變異數)和feature 和 target 間的相關性來對各個feature 進行評分 * 移除變異數低的feature * 單變量特徵選擇 * 評分指標 分類問題:ANOVA F-value regression : f_regression  ## Decision Tree and Random Forest  
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up