機器學習特徵工程

Peng__Ge發表於2018-03-03

2018/3/15更新

結合KAGGLE競賽經驗、演算法面試情況和jasonfreak的總結,個人總結出以下機器學習特徵處理的方法;分享給大家,希望對大家有幫助


特徵使用方案:1、要實現我們目標,需要什麼資料----結合特定業務,具體情況具體分析
              2、資料可用性評估:1、獲取難度
2、覆蓋率
  3、準確率

特徵獲取方案:1、如何獲取特徵(介面呼叫or自己清洗or/github資源下載等)
      2、如何儲存?(/data/csv/txt/array/Dataframe//其他常用分散式)

特徵處理:1、特徵清洗:1.1:通過describe資料描述、matplotlib、snsborn資料視覺化操作,清洗異常樣本
                       1.2:資料不平衡處理:過取樣、欠取樣、Boostrap、Smote、Msote、代價敏感轉化等技術,進行處理;其中過取樣和欠取樣是在資料層面上,通過取樣技術,來降低資料傾斜率;而Smote方法是通過利用最近鄰生成樣本;但是在生成的過程中,由於最近鄰的不穩定行;可能會引進噪聲樣本進入資料集,因此改進的方法MSmote被提出,通過對產生的樣本進一步做異常處理,降低這種可能性,但是無法保證確定性;代價敏感轉化技術是通過對樣本進行加權,然後做一定處理,使得原始的演算法可以由代價不敏感轉為代價敏感,其實就是實現全域性的代價最優,因此可以在訓練如此,將樣本較少的類設定一個較大權重,如果大家對這方面研究有興趣,可以私信或者留言,我可以推薦大家一些優秀的論文,因為我的課題方向就是這個!
          
  2、單個特徵:2.1:歸一化:去除量綱影響
                       2.2:離散化:通過hash編碼實現,進行特徵轉換,注意:直接數字編碼會導致演算法在一堆沒有意                                                 義的大小順序中學習!!!!(Spark高階資料分析-P65),建議還是用one-hot 雜湊編碼;如果僅僅是兩個類,用0-1編碼是不會有太大問題的,但是one-hot編碼存在一個問題就是,如果類別過程,生成的稀疏編碼維度將會過大,甚至造成維度災;因此,有資料推薦使用many-to-many 進行hash分類,從而降低維度;但是many-to-many過程,需要進行分析,如果聚類一組特徵,從而實現較好的效果,具體還要再找找資料,歡迎補充,謝謝!
                       2.3:缺失值處理:如果缺失部分大,可以考慮放棄該條特徵,否則利用平均值、中位數、眾數等進行缺失值
    補充
                       2.4:資料轉換:為了使得資料之間反應出清晰的相關性(解決偏度影響),可以對資料進行log、指數等轉換

          3、特徵降維:3.1:PCA:無監督對映過程,通過數學對映;找出特徵方差大的組合,相應的特徵向量能夠概括總                                                               特徵90%以上資訊(具備數學推導,大家有興趣可以看一下)
                                3.2:LDA:監督對映過程,使得同類點距離越近,類間距離越遠
                                3.3:隨機森林演算法:通過袋外樣本(Out-Of-Bag),對每棵決策樹進行誤差判斷,之後再利用隨機樹變換某一                                                                 維特徵,觀察其誤差的變化,如果誤差變化大,即認為特徵重要

                                3.4:filter:通過數學上方差、資訊熵等操作,觀察每個維度特徵情況,進行降維;

                                3.5:特徵衍生:對資料進行一定的加工,生成重要特徵,進行資訊補充

歡迎轉載,註明出處,謝謝!

參考:https://www.cnblogs.com/jasonfreak/p/5448385.html

相關文章