◆ --- 機器學習百日馬拉松 Homework & Note --- ◆
√ D1:資料介紹與評估資料
√ D2:機器學習概論
√ D3:機器學習-流程與步驟
√ D4:EDA (Exploratory Data Analysis)/讀取資料與分析流程
√ D5:如何新建一個Dataframe? 如何讀取其他資料?(非csv的資料)
√ D6:EDA:欄位的資料類型介紹及處理
√ D7:特徵類型
|常見的特徵類型
◆ 數值型特徵, EX: 坪數、年齡
◆ 類別型特徵, EX: 行政區、性別
|交叉驗證(Cross Validatioin)
◇ The Validation Set Approach
◇ LOOCV (Leave-one-out cross-validation)
◇ K-fold Cross Validation
√ D8:EDA資料分佈
√ D9:EDA:離群值(Outliner)及其處理
|檢查異常值的方法
◇ 視覺方法 - boxplot, scatter plot
◇ 統計方法 - zscore, IQR
√ D10 : 數值型特徵 - 去除離群值
√ D11 常用的數值取代:中位數與分位數連續數值標準化
|常用以填補的統計值
常用以填補的統計值 | 方法 |
---|---|
中位數(median) | np.median(value_array) |
分位數(quantiles) | np.quantile(value_array, q = ... ) |
眾數(mode) | dictionary method :較快的方法 |
平均數(mean) | np.mean(value_array) |
√ D12 數值型特徵-補缺失值與標準化
|標準化 / 最小最大化適用場合
model | 例子 |
---|---|
非樹狀模型 | 如線性迴歸, 羅吉斯迴歸, 類神經...等,標準化 / 最小最大化後對預測會有影響 |
樹狀模型 | 如決策樹, 隨機森林, 梯度提升樹...等,標準化 / 最小最大化後對預測不會有影響 |
√ D13 DataFrame operationData frame merge/常用的 DataFrame 操作
√ D14 程式實作 EDA: correlation/相關係數簡介
√ D15 EDA from Correlation
√ D16 EDA: 不同數值範圍間的特徵如何檢視/繪圖與樣式Kernel Density Estimation (KDE)
|繪圖風格
繪圖風格 | 語法 |
---|---|
default | plt.style.use(‘default’) # 不需設定就會使用預設 |
ggplot | plt.style.use('ggplot') |
seaborn | plt.style.use(‘seaborn’) # 或採用 seaborn 套件繪圖 |
|何謂 核密度估計 Kernel Density Estimation (KDE)
https://blog.csdn.net/unixtch/article/details/78556499)
✻ [KDE](https://reurl.cc/R6Dmp9)
✻ [簡單說:把長條圖畫成折線圖!](√ D17 EDA: 把連續型變數離散化
|NOTE
◆ 離散化的目的是讓事情變簡單、減少 outlier 對分析以及訓練模型的影響
◆ 主要的方法是等寬劃分 (對應 pandas 中的 cut) 以及等頻劃分 (對應 pandas 中的 qcut)
◆ 可以依實際需求來自己定義離散化的方式
|延伸閱讀
https://www.zhihu.com/question/31989952)
✻ [連續特徵的離散化 : 在什麼情況下可以獲得更好的效果?](√ D18 程式實作 把連續型變數離散化
√ D19 Subplots
|延伸閱讀
https://matplotlib.org/2.0.2/examples/pylab_examples/subplots_demo.html)
✻ [matplotlib 官方範例](https://jakevdp.github.io/PythonDataScienceHandbook/04.08-multiple-subplots.html)
✻ [Python Data Science Handbook](https://seaborn.pydata.org/generated/seaborn.jointplot.html)
✻ [另類子圖 Seaborn.jointplot](√ D20 Heatmap & Grid-plot
|NOTE
◆ Heatmap 常用於呈現訊息的強弱 (以顏色深淺呈現),也常用於呈現混淆矩陣
◆ pair/gridplot 結合了 scatter plot 與 historgram 的好處來呈現變數間的相關程度
|延伸閱讀
https://matplotlib.org/3.2.2/gallery/images_contours_and_fields/image_annotated_heatmap.html)
✻ [Heatmap](https://towardsdatascience.com/visualizing-data-with-pair-plots-in-python-f228cf529166)
✻ [Pairplot 的更多應用實例](√ D24:類別型特徵 - 基礎處理
|NOTE
◆ 類別型特徵有標籤編碼 (Label Encoding) 與獨熱編碼 (One Hot Encoding) 兩種基礎編碼方式
◆ 兩種編碼中標籤編碼比較常用
◆ 當特徵重要性高,且可能值較少時,才應該考慮獨熱編碼
|延伸閱讀
https://www.twblogs.net/a/5baab6e32b7177781a0e6859?lang=zh-cn)
✻ [數據預處理:獨熱編碼(One-Hot Encoding)和 LabelEncoder標籤編碼](√ D25:類別型特徵 - 均值編碼
|NOTE
◆ 均值編碼 (Mean Encoding) : 使用目標值的平均值,取代原本的類別型特徵
◆ 當類別特徵與目標明顯相關時,該考慮採用均值編碼
◆ 均值編碼最大的問題,在於相當容易 Overfitting
◆ 平滑化 ( Smoothing ) : 如果交易樣本非常少, 且剛好抽到極端值, 平均結果可能會有誤差很大。因此, 均值編碼還需要考慮紀錄筆數, 當作可靠度的參考
◆ 平滑化的方式能修正均值編碼容易 Overfitting 的問題,但效果有限,因此仍須經過檢驗後再決定是否該使用均值編碼
|延伸閱讀
https://zhuanlan.zhihu.com/p/26308272)
✻ [平均數編碼 :針對高基數定性特徵(類別特徵)的數據處理](√ D26:類別型特徵 - 其他進階處理
|NOTE
◆ 計數編碼是計算類別在資料中的出現次數,當⽬標平均值與類別筆數呈正/負相關時,可以考慮使用
◆ 當相異類別數量相當大時,其他編碼方式效果更差,可以考慮雜湊編碼以節省時間
◆ 註 : 雜湊編碼效果也不佳,這類問題更好的解法是嵌入式編碼(Embedding),但是需要深度學習並有其前提
|延伸閱讀
https://blog.csdn.net/laolu1573/article/details/79410187)
✻ [Feature hashing (特徵哈希)](√ D27:時間型特徵
|NOTE
◆ 時間型特徵最常用的是特徵分解 - 拆解成年/月/日/時/分/秒的分類值
◆ 週期循環特徵是將時間"循環"特性改成特徵方式,設計關鍵在於首尾相接, 因此我們需要使用 sin /cos 等週期函數轉換
◆ 常見的週期循環特徵有 - 年週期(季節) / 周周期(例假日) / 日週期(日夜與生活作息), 要注意的是最高與最低點的設置
週期循環特徵 | 計算方法 |
---|---|
年週期 | cos((月/6 + 日/180 )π) |
周週期 | sin((星期幾/3.5 + 小時/84 )π) |
日週期 | sin((小時/12 + 分/720 + 秒/43200 )π) #註 : 此處小時是24小時制 |