遇到同時有連續型及類別型變數的情況會如何做資料前處理?若要使用年齡來比較變數重要性,利用類別編碼進行轉換,適合randomforestclassifier去做分析嗎
助教您好:
在閱讀講義pdf後,想知道若是要做監督式學習,擁有結構化資料,以隨機森林做分析為例子,資料的變數同時有實數及類別變數。
(1)一般而言遇到同時有連續型及類別型變數的情況會如何做資料前處理
(2)若是要同時比較變數重要性,如果將實數變數做recode的動作,像是年齡16~25重新定義成code1、年齡26~30重新定義成code2...,再統一用randomforestclassifier去做分析,是合適的方法嗎
回答列表
-
2020/03/02 上午 10:38張維元 (WeiYuan)贊同數:4不贊同數:0留言數:0
嗨, lee2nd116 你好,以下簡單回覆你的問題:
(1) 一般而言遇到同時有連續型及類別型變數的情況會如何做資料前處理
=> 通常會先進行編碼(encoding),也就是把「非數值」資料轉成「數值」,原因是大部分的模型都是基於數學模型所建構出來的。常見的編碼方式有:Label Encoding 、One Hot Encoding (Dummies) 等等,都在後面的課程會提及。
(2) 若是要同時比較變數重要性,如果將實數變數做recode的動作,像是年齡16~25重新定義成code1、年齡26~30重新定義成code2...,再統一用randomforestclassifier去做分析,是合適的方法嗎
=> 這個動作稱為 編碼(encoding) 而非 recode,而你講的這種轉換稱為 類別編碼(Label Encoding)並不適用於所有非數值的欄位。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的 GITHUB 帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃
-
2020/03/02 上午 10:43張維元 (WeiYuan)贊同數:5不贊同數:0留言數:0
接下來,補充一下關於編碼的使用情境:
先說結論:
- 原始資料是有序離散值的話 => Label Encoding
- 原始資料是無序離散值的話 => One Hot Encoding (Dummies)
- Note. 實際上還有更多比較進階的編碼方式,這裡就先不討論。
以下分為兩點說明:
為什麼要將離散轉數值?
=> 因為大部分的模型都是基於數學運算,所以字串資料是無法運算的
為什麼要將無序轉 One-Hot?
=> 所謂數學運算一般泛指用距離代表相似(幾何觀點),意思是會用轉換後的兩個值的差距作為其相似程度。
舉個例子:
* 如果將性別欄位的男/女轉換成 0, 1 ,二元的沒問題。
* 如果講水果這個無序欄位中的頻果、香蕉、西瓜,Label 成 0, 1, 2 會隱含著「香蕉跟蘋果」比「西瓜跟蘋果」還要相似的意義,但這樣是錯誤的,通常會採用 One-Hot 的方式轉成多個欄位來避免距離的誤解。
* 如果是年齡這個有序欄位的老年、中年、少年,是可以直接 Label 成 0, 1, 2 的(本來就存在大小關係,用距離表示大小),硬轉成 One-Hot 反而將這個差距關係給拿掉。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃