1. 程式人生 > >機器學習中,有哪些特徵選擇的工程方法?

機器學習中,有哪些特徵選擇的工程方法?

特徵選擇是特徵工程中的重要問題(另一個重要的問題是特徵提取),坊間常說:資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。由此可見,特徵工程尤其是特徵選擇在機器學習中佔有相當重要的地位。機器學習做得好不好,被資料和模型共同影響,比如說,資料本身不可分,那麼SVM等分類演算法再牛逼,也不能完全正確分開。資料集本身是有內在特性的,資料集本身的特徵決定了機器學習的上限。所以,一個機器學習演算法可能在資料集A上效果很好,但在資料集B上效果很差,這是很正常的現象,因為資料集A和B的內在特性不一樣。我以前學別人使用GBDT提取特徵,別人使用GBDT提取特徵,可以使分類效果提升,但是,我使用了GBDT提特徵,並沒有使效果提升。因為資料集特性不一樣。所以,資料集的特性決定了演算法能達到效果的上限。

通常而言,特徵選擇是指選擇獲得相應模型和演算法最好效能的特徵集,工程上常用的方法有以下:

  1. 計算每一個特徵與響應變數的相關性:工程上常用的手段有計算皮爾遜係數互資訊係數皮爾遜係數只能衡量線性相關性互資訊係數能夠很好地度量各種相關性,但是計算相對複雜一些,好在很多toolkit裡邊都包含了這個工具(如sklearn的MINE),得到相關性之後就可以排序選擇特徵了.(其實就是計算輸出關於輸入的導數,如果某個特徵很大程度上影響了輸出,那麼該特徵就會比較重要)。
  2. 構建單個特徵的模型,通過模型的準確性為特徵排序,藉此來選擇特徵,另外,記得JMLR'03上有一篇論文介紹了一種基於決策樹的特徵選擇方法,本質上是等價的。當選擇到了目標特徵之後,再用來訓練最終的模型;
  3.  通過L1正則項來選擇特徵:L1正則方法具有稀疏解的特性,因此天然具備特徵選擇的特性,但是要注意,L1沒有選到的特徵不代表不重要,原因是兩個具有高相關性的特徵可能只保留了一個,如果要確定哪個特徵重要應再通過L2正則方法交叉檢驗
  4. 訓練能夠對特徵打分的預選模型,RandomForest和Logistic Regression等都能對模型的特徵打分,通過打分獲得相關性後再訓練最終模型;
  5. 通過特徵組合後再來選擇特徵,如對 使用者id 和 使用者特徵 最組合來獲得較大的特徵集再來選擇特徵,這種做法在推薦系統廣告系統中比較常見,這也是所謂億級甚至十億級特徵的主要來源,原因是使用者資料比較稀疏,組合特徵能夠同時兼顧全域性模型和個性化模型,這個問題有機會可以展開講。
  6. 通過深度學習來進行特徵選擇:目前這種手段正在隨著深度學習的流行而成為一種手段,尤其是在計算機視覺和語音識別領域,而且在自然語言處理也越來被重視,原因是深度學習具有自動學習特徵的能力,這也是深度學習又叫 無監督學習(unsupervised feature learning)的原因。從深度學習模型中選擇某一神經層的特徵後就可以用來進行最終目標模型的訓練了。