Re: [閒聊] 菜鳥上Kaggle: 房價預測

作者: pipidog (如果狗狗飛上天)   2018-03-08 05:42:17
再補充一下昨天那篇文章的第一點,關於特徵選取的一些心得:
如果feature很多,那是如何減少是個大學問. 不然維度詛咒一下來,模型就gg了.
這種如何建構好的特徵的問題,被統稱叫"feature engineering". 各種神技可能
幾天幾夜都說不完. 坦白說我知道的也不多,只能分享一些"我認為"(所以可能錯)
大致上的做法.常用的特徵選取法有三大類: filter, wrapper, embedding.
1). filter:
這是最簡單的也最基本的特徵選取方法,尤其在數據樣本數很大的時候,這是最代價
最低的做法. 基本上就是統計一下哪些feature跟target的correlation高.
然後你人為設個閥值把correlation低的feature通通丟掉.
例如一個極端的情況,如果有一個數據,不管target data是啥,某個feature幾乎都是1,
只有少數,例如2%是0,很明顯的這個feature根本和target沒太大關聯性,這基本上就
可以刪去. 看這篇:
https://tinyurl.com/ycoqh28u
2). wrapper:
wrapper簡單的就是你用一個簡單的模型去測試,用那些feature來訓練出來的模型準
確率最高,差的feature就丟掉. 這作法滿合理的,算是透過實證來找出好的特徵.但這
有兩個大問題. 1.你等於在訓練很多模型,如果資料量很大滿耗時間的. 2.你用A模型
來估計特徵的重要性,並不表示你把選出的特徵用在B模型時表現就會比較好.所以如果
要用這種方法,你要考慮的問題比較多. 用來選特徵的模型跟日後訓練的模型要盡可能
在原理上接近.但如果選得好,那表現應該會比filter好得多.
看這篇:
https://tinyurl.com/ycgbwv5c
3). embedding:
embedding算是第一種跟第二種方法的一種平衡,它既不是透過第一種,單純的從統計
給結果,也不是如第二種挑一個專一性高的模型直接做測試. 它主要是透過一些通用
性的模型來自動挑出特徵權重.最常用的一種就是Lasso了. Lasso,基本上就是在線
性回歸裡面加入L1正規化,盡可能的強迫大多數的線性回歸係數是0,或接近0,所以你
可以透過查看每個特徵在線性回歸下被賦予的權重是多少,以此為依據來挑選重要的
特徵. 這方法的好處是,它是基於一個實測的模型給答案,缺點是,它也就只是個簡單
的模型. 另外tree也是一個常用的手段,它也可以幫你篩出那些特徵比較重要.
用tree來篩特徵最大的好處是,tree對特徵的取值範圍不敏感,所以你不用考慮把特
徵歸一化的問題,甚至也可以對catagorical的特徵來做.對特徵差異性大的問題,這
也是一個好方法.
在sklearn裡面給出了一個用Lasso挑特徵的範例:
https://tinyurl.com/y74er3r5
* 洋洋灑灑提了一些方法,也只是一些膚淺的概述,如何建構好的特徵是一門大學問,
但功力有限,也就只能說到這了. 其他還有很多方法,例如用PCA降維等等,因為用
這種方式做完的特徵意義已經不明,那就是另一個故事了.我想也偏離了這篇的主
題,就不提了. 如果還有好的方法也歡迎分享,相互交流.
作者: b24333666 (比飛笨)   2018-03-08 06:39:00
作者: aaaba (小強)   2018-03-08 13:41:00
你不要那麼專業好不好
作者: bestchiao (呼拉拉)   2018-03-08 16:06:00
感謝分享 不曉得有沒有分享在github的習慣
作者: stoltzman (......)   2018-03-09 15:52:00
推!對初學者給了一些方向!!
作者: smartree (阿路)   2018-03-09 16:46:00
大神有 GIThub 可以 follow 嗎?
作者: wallrose (牆玫瑰)   2018-03-10 03:55:00

Links booklink

Contact Us: admin [ a t ] ucptt.com