參加kaggle的都知道,特徵處理比跑模型重要的多,在特徵處理上的時間也更多,這裏總結一下常見的特徵處理方法,在書上或者博客上看見一些比較好的處理特徵的方法,我就總結在這裏,並註明出處,持續更新。。。html
先看看特徵工程的整體,下面這幅圖來自一次kaggle的特徵工程總結,後面的總結不像這幅圖系統,可是我會作到儘可能分類,儘可能系統。
機器學習
若是某一列是離散型特徵,並且這一列有些值出現的次數很是小(常常要對離散型特徵的值統計一下次數,才能判斷多小纔是小),咱們能夠把這些值統一給一個值,例如Rare,在kaggle泰坦尼克號裏面,就能夠這麼對人姓名的title這麼處理。性能
這應該是最簡單的特徵選擇方法了:假設某特徵的特徵值只有0和1,而且在全部輸入樣本中,95%的實例的該特徵取值都是1,那就能夠認爲這個特徵做用不大。若是100%都是1,那這個特徵就沒意義了。當特徵值都是離散型變量的時候這種方法才能用,若是是連續型變量,就須要將連續變量離散化以後才能用,並且實際當中,通常不太會有95%以上都取某個值的特徵存在,因此這種方法雖然簡單可是不太好用。能夠把它做爲特徵選擇的預處理,先去掉那些取值變化小的特徵,而後再從接下來提到的的特徵選擇方法中選擇合適的進行進一步的特徵選擇。摘自乾貨:結合Scikit-learn介紹幾種經常使用的特徵選擇方法學習
參加個人這篇博客Label Encoding vs One Hot Encoding測試
連續型特徵在kaggle裏經常被映射成離散型特徵,具體的分析能夠看個人博客機器學習模型爲何要將特徵離散化。優化
通常來講,連續型特徵經常要作歸一化或者標準化處理,可是假如你把特徵映射成了離散型特徵,那這個歸一化或標準化處理可作可不作(通常可作可不作,就是不作,否則要增長計算量)。.net
用平均數、衆數、K最近鄰平均數等來賦值,要是離散型特徵,能夠直接用pandas的fillna()來填「missing」,而後作Label Encoding或者One Hot Encoding。htm
這裏的特徵選擇僅僅是篩選特徵,不包括降維。blog
按照周志華版的機器學習的第11章,他把特徵選擇的方法總結成了三類:過濾式,包裹式和嵌入式。(注:過濾式和包裹式的處理方式挺少見)ci
過濾式方法先對數據集進行特徵選擇,而後再訓練學習器,特徵選擇過程和後續的學習器無關。選擇過程有前向搜索和後向搜索,評價標準有子集的信息增益,相關統計量(周志華書)和擬合優度斷定係數(ISLR)。
包裹式特徵選擇是把學習器的性能做爲特徵子集的評價標準。通常來講,包裹式特徵選擇比過濾式更好(由於過濾式特徵選擇不考慮後續的學習器的性能),可是計算開銷上卻比過濾式大得多。
嵌入式特徵選擇是將特徵選擇和學習器訓練過程融合一體,二者在同一個優化過程當中完成,常見的有L1正則化和L2正則化,可是L1正則化能更易得到一個稀疏的解。
單變量特徵選擇可以對每個特徵進行測試,衡量該特徵和響應變量之間的關係,根據得分扔掉很差的特徵。對於迴歸和分類問題能夠採用卡方檢驗,皮爾遜相關係數等方式對特徵進行測試。
這種方法比較簡單,易於運行,易於理解,一般對於理解數據有較好的效果(但對特徵優化、提升泛化能力來講不必定有效);這種方法有許多改進的版本、變種。摘自乾貨:結合Scikit-learn介紹幾種經常使用的特徵選擇方法。
通常通過One Hot Encoding後,矩陣的維度可能會變的很大,此時通常須要進行降維的操做,常見的降維方法有PCA,更多的方法能夠看看個人博客機器學習降維方法總結。
泰坦尼克號比賽裏面經常使用的一個構造新特徵的方法是把兄弟姐妹的數量,伴侶的數據,父母子女的數量加起來,構形成一個新的特徵:家庭的大小。
除了上面的直接相加,還有構造多項式特徵(特徵相乘)等。