1. 程式人生 > >不想累死就來看看 : 特徵工程之特徵選擇

不想累死就來看看 : 特徵工程之特徵選擇

作者:劉建平           

編輯:祝鑫泉       

授權轉發自:劉建平《特徵工程之特徵選擇》

地址:https://www.cnblogs.com/pinard/p/9032759.html

前  言

特徵工程是資料分析中最耗時間和精力的一部分工作,它不像演算法和模型那樣是確定的步驟,更多是工程上的經驗和權衡。因此沒有統一的方法。這裡只是對一些常用的方法做一個總結。本文關注於特徵選擇部分。後面還有兩篇會關注於特徵表達和特徵預處理。

  • 特徵的來源

  • 選擇合適的特徵

  • 過濾法選擇特徵

  • 包裝法選擇特徵

  • 嵌入選擇特徵

  • 尋找高階特徵

  • 特徵選擇小結

01

特徵的來源

在做資料分析的時候,特徵的來源一般有兩塊,一塊是業務已經整理好各種特徵資料,我們需要去找出適合我們問題需要的特徵;另一塊是我們從業務特徵中自己去尋找高階資料特徵。我們就針對這兩部分來分別討論。

02

選擇合適的特徵

我們首先看當業務已經整理好各種特徵資料時,我們如何去找出適合我們問題需要的特徵,此時特徵數可能成百上千,哪些才是我們需要的呢?

第一步是找到該領域懂業務的專家,讓他們給一些建議。比如我們需要解決一個藥品療效的分類問題,那麼先找到領域專家,向他們諮詢哪些因素(特徵)會對該藥品的療效產生影響,較大影響的和較小影響的都要。這些特徵就是我們的特徵的第一候選集。

這個特徵集合有時候也可能很大,在嘗試降維之前,我們有必要用特徵工程的方法去選擇出較重要的特徵結合,這些方法不會用到領域知識,而僅僅是統計學的方法。

最簡單的方法就是方差篩選。方差越大的特徵,那麼我們可以認為它是比較有用的。如果方差較小,比如小於1,那麼這個特徵可能對我們的演算法作用沒有那麼大。最極端的,如果某個特徵方差為0,即所有的樣本該特徵的取值都是一樣的,那麼它對我們的模型訓練沒有任何作用,可以直接捨棄。在實際應用中,我們會指定一個方差的閾值,當方差小於這個閾值的特徵會被我們篩掉。sklearn中的VarianceThreshold類可以很方便的完成這個工作。

特徵選擇方法有很多,一般分為三類:第一類過濾法比較簡單,它按照特徵的發散性或者相關性指標對各個特徵進行評分,設定評分閾值或者待選擇閾值的個數,選擇合適特徵。上面我們提到的方差篩選就是過濾法的一種。第二類是包裝法,根據目標函式,通常是預測效果評分,每次選擇部分特徵,或者排除部分特徵。第三類嵌入法則稍微複雜一點,它先使用某些機器學習的演算法和模型進行訓練,得到各個特徵的權值係數,根據權值係數從大到小來選擇特徵。類似於過濾法,但是它是通過機器學習訓練來確定特徵的優劣,而不是直接從特徵的一些統計學指標來確定特徵的優劣。下面我們分別來看看3類方法。

03

過濾法選擇特徵

上面我們已經講到了使用特徵方差來過濾選擇特徵的過程。除了特徵的方差這第一種方法,還有其他一些統計學指標可以使用。

第二個可以使用的是相關係數。這個主要用於輸出連續值的監督學習演算法中。我們分別計算所有訓練集中各個特徵與輸出值之間的相關係數,設定一個閾值,選擇相關係數較大的部分特徵。

第三個可以使用的是假設檢驗,比如卡方檢驗。卡方檢驗可以檢驗某個特徵分佈和輸出值分佈之間的相關性。個人覺得它比比粗暴的方差法好用。如果大家對卡方檢驗不熟悉,可以參看這篇卡方檢驗原理及應用,這裡就不展開了。在sklearn中,可以使用chi2這個類來做卡方檢驗得到所有特徵的卡方值與顯著性水平P臨界值,我們可以給定卡方值閾值, 選擇卡方值較大的部分特徵。

除了卡方檢驗,我們還可以使用F檢驗和t檢驗,它們都是使用假設檢驗的方法,只是使用的統計分佈不是卡方分佈,而是F分佈和t分佈而已。在sklearn中,有F檢驗的函式f_classif和f_regression,分別在分類和迴歸特徵選擇時使用。

第四個是互資訊,即從資訊熵的角度分析各個特徵和輸出值之間的關係評分。在決策樹演算法中我們講到過互資訊(資訊增益)。互資訊值越大,說明該特徵和輸出值之間的相關性越大,越需要保留。在sklearn中,可以使用mutual_info_classif(分類)和mutual_info_regression(迴歸)來計算各個輸入特徵和輸出值之間的互資訊。

以上就是過濾法的主要方法,個人經驗是,在沒有什麼思路的 時候,可以優先使用卡方檢驗和互資訊來做特徵選擇

04

包裝法選擇特徵

包裝法的解決思路沒有過濾法這麼直接,它會選擇一個目標函式來一步步的篩選特徵。

最常用的包裝法是遞迴消除特徵法(recursive feature elimination,以下簡稱RFE)。遞迴消除特徵法使用一個機器學習模型來進行多輪訓練,每輪訓練後,消除若干權值係數的對應的特徵,再基於新的特徵集進行下一輪訓練。在sklearn中,可以使用RFE函式來選擇特徵。

我們下面以經典的SVM-RFE演算法來討論這個特徵選擇的思路。這個演算法以支援向量機來做RFE的機器學習模型選擇特徵。它在第一輪訓練的時候,會選擇所有的特徵來訓練,得到了分類的超平面 wx + b = 0 後,如果有n個特徵,那麼RFE-SVM會選擇出w中分量的平方值640?wx_fmt=jpeg最小的那個序號i對應的特徵,將其排除,在第二類的時候,特徵數就剩下n-1個了,我們繼續用這n-1個特徵和輸出值來訓練SVM,同樣的,去掉 640?wx_fmt=jpeg最小的那個序號i對應的特徵。以此類推,直到剩下的特徵數滿足我們的需求為止。

05

嵌入法選擇特徵

嵌入法也是用機器學習的方法來選擇特徵,但是它和RFE的區別是它不是通過不停的篩掉特徵來進行訓練,而是使用的都是特徵全集。在sklearn中,使用SelectFromModel函式來選擇特徵。

最常用的是使用L1正則化和L2正則化來選擇特徵。在之前講到的用scikit-learn和pandas學習Ridge迴歸(http://www.cnblogs.com/pinard/p/6023000.html)第6節中,我們講到正則化懲罰項越大,那麼模型的係數就會越小。當正則化懲罰項大到一定的程度的時候,部分特徵係數會變成0,當正則化懲罰項繼續增大到一定程度時,所有的特徵係數都會趨於0. 但是我們會發現一部分特徵係數會更容易先變成0,這部分系數就是可以篩掉的。也就是說,我們選擇特徵係數較大的特徵。常用的L1正則化和L2正則化來選擇特徵的基學習器是邏輯迴歸。

此外也可以使用決策樹或者GBDT。那麼是不是所有的機器學習方法都可以作為嵌入法的基學習器呢?也不是,一般來說,可以得到特徵係數coef或者可以得到特徵重要度(feature importances)的演算法才可以做為嵌入法的基學習器。

06

尋找高階特徵

在我們拿到已有的特徵後,我們還可以根據需要尋找到更多的高階特徵。比如有車的路程特徵和時間間隔特徵,我們就可以得到車的平均速度這個二級特徵。根據車的速度特徵,我們就可以得到車的加速度這個三級特徵,根據車的加速度特徵,我們就可以得到車的加加速度這個四級特徵。。。也就是說,高階特徵可以一直尋找下去。

在Kaggle之類的演算法競賽中,高分團隊主要使用的方法除了整合學習演算法,剩下的主要就是在高階特徵上面做文章。所以尋找高階特徵是模型優化的必要步驟之一。當然,在第一次建立模型的時候,我們可以先不尋找高階特徵,得到以後基準模型後,再尋找高階特徵進行優化。

尋找高階特徵最常用的方法有:

1.若干項特徵加和: 我們假設你希望根據每日銷售額得到一週銷售額的特徵。你可以將最近的7天的銷售額相加得到。

2.若干項特徵之差: 假設你已經擁有每週銷售額以及每月銷售額兩項特徵,可以求一週前一月內的銷售額。

3.若干項特徵乘積: 假設你有商品價格和商品銷量的特徵,那麼就可以得到銷售額的特徵。

4.若干項特徵除商: 假設你有每個使用者的銷售額和購買的商品件數,那麼就是得到該使用者平均每件商品的銷售額。

當然,尋找高階特徵的方法遠不止於此,它需要你根據你的業務和模型需要而得,而不是隨便的兩兩組合形成高階特徵,這樣容易導致特徵爆炸,反而沒有辦法得到較好的模型。個人經驗是,聚類的時候高階特徵儘量少一點,分類迴歸的時候高階特徵適度的多一點。

07

尋找高階特徵

特徵選擇是特徵工程的第一步,它關係到我們機器學習演算法的上限。因此原則是儘量不錯過一個可能有用的特徵,但是也不濫用太多的特徵。

640?wx_fmt=gif

END

往期回顧之NLP



機器學習演算法工程師

                            一個用心的公眾號

640?wx_fmt=jpeg

長按,識別,加關注

進群,學習,得幫助

你的關注,我們的熱度,

我們一定給你學習最大的幫助

相關推薦

累死看看 : 特徵工程特徵選擇

作者:劉建平           編輯:祝鑫泉       授權轉發自:劉建平《特徵工程之特徵選

1. 特徵工程特徵預處理

1. 前言 “資料決定了機器學習的上限,而演算法只是儘可能逼近這個上限”,這裡的資料指的就是經過特徵工程得到的資料。特徵工程指的是把原始資料轉變為模型的訓練資料的過程,它的目的就是獲取更好的訓練資料特徵,使得機器學習模型逼近這個上限。特徵工程能使得模型的效能得到提升,有時甚至在簡單的模型上也能取得不錯的效果

2. 特徵工程特徵選擇

1. 前言 當資料預處理完成後,我們需要選擇有意義的特徵輸入機器學習的演算法和模型進行訓練。 在做資料分析的時候,特徵的來源一般有兩塊,一塊是業務已經整理好各種特徵資料,我們需要去找出適合我們問題需要的特徵;另一塊是我們從業務特徵中自己去尋找高階資料特徵。我們就針對這兩部分來分別討論。 2. 特徵選擇的

機器學習特徵工程特徵抽取

1.資料集 資料集是特徵抽取的源資料。常用資料集的結構組成:特徵值+目標值。 資料中對於特徵的處理 pandas:一個數據讀取非常方便以及基本的處理格式的工具。 sklearn:對於特徵的處理提供了強大的介面。 2.資料的特徵工程 2

機器學習特徵工程特徵預處理

特徵預處理是什麼? 通過特定的統計方法(數學方法)講資料轉換成演算法要求的資料。 數值型資料: 歸一化 標準化 缺失值 類別型資料:one-hot編碼 時間型別:時間的切分 特徵選擇的意義 在對資料進行異常值、缺失值、資料轉換等處理後,我們

【資料平臺】sklearn庫特徵工程特徵選擇和降維

1、特徵選擇 當資料預處理完成後,我們需要選擇有意義的特徵輸入機器學習的演算法和模型進行訓練。通常來說,從兩個方面考慮來選擇特徵: 特徵是否發散:如果一個特徵不發散,例如方差接近於0,也就是說樣本在這個特徵上基本上沒有差異,這個特徵對於樣本的區分並沒有什麼用。特徵與目標的相

特徵工程特徵抽取

機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的效能。它是人工智慧的核心,是使

特徵工程特徵選擇

特徵工程是資料分析中最耗時間和精力的一部分工作,它不像演算法和模型那樣是確定的步驟,更多是工程上的經驗和權衡。因此沒有統一的方法,這裡只是對一些常用的方法做一個總結。1. 特徵的來源    在做資料分析的時候,特徵的來源一般有兩塊,一塊是業務已經整理好各種特徵資料,我們需要去

面對各種資料怎麼處理 : 特徵工程特徵表達

 作者:劉建平            編輯:陳人和            授權轉發自:劉建平《特

資料探勘篇——特徵工程特徵降維

 在業界廣泛流傳著一句話:資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。  由此可見,資料和特徵是多麼的重要,而在資料大多數場景下,資料已經就緒,不同人對於同樣的資料處理得到的特徵卻千差萬別,最終得到的建模效果也是高低立現。從資料到特徵這就要從特徵工程說起了...

Alink漫談(九) :特徵工程 特徵雜湊/標準化縮放

# Alink漫談(九) :特徵工程之特徵雜湊/標準化縮放 [Toc] ## 0x00 摘要 Alink 是阿里巴巴基於實時計算引擎 Flink 研發的新一代機器學習演算法平臺,是業界首個同時支援批式演算法、流式演算法的機器學習平臺。本文將剖析Alink “特徵工程” 部分對應程式碼實現。 ## 0x

會Linux?看看正確方法是什麼!

2018年裡,Linux運維的職位數量和平均薪資水平仍然持續了去年的強勁增幅,比很多開發崗位漲的都快。從研究機構的資料來看,Linux職位數量和工資水平漲幅均在IT行業的前五之列,比去年的表現還要好一點。 在這樣的前提下,很多人加入Linux運維的學習行列並不奇怪。不過由於初學者不能得法,認為Linux學起

會Linux?看看正確方法是什麽!

擴大 強勁 cat 標準 電子書 中文名 solar 文件 方式 2018年裏,Linux運維的職位數量和平均薪資水平仍然持續了去年的強勁增幅,比很多開發崗位漲的都快。從研究機構的數據來看,Linux職位數量和工資水平漲幅均在IT行業的前五之列,比去年的表現還要好一點。 在

程式設計師職業資格軟考——軟考,你得考 (值得一看的總結)

程式設計師職業軟體資格的證書考試,簡稱程式設計師軟考。   本文寫作參考材料:中國計算機技術職業資格網、百度百科:軟體水平考試、軟考線上、信管網 前言 軟體水平考試 :計算機技術與軟體專業技術資格考試是原中國計算機軟體專業技術資格和水平考試(簡稱軟體考試)的完

程式碼敲累了看看《PPT製作經驗分享-思維導圖》

博主的《PPT製作經驗分享-思維導圖》 分享博主近期整理的《PPT製作經驗分享》 參考文章: 1. 《加薪升職?是從一份80分的PPT開始的!》 2. 《這套PPT教程,分分鐘把你的PPT煉得天上有地上無》 3. 《PPT裡圖表不會

機房那麼大,我用AR看看

 你知道嗎?生產機房面積竟有上萬平方米,部署了幾千餘臺裝置。想象下對所有裝置進行一次全面檢查是怎

這 10 行比較字串相等的程式碼給我整懵逼了,信你也看看

抱歉用這種標題吸引你點進來了,不過你不妨看完,看看能否讓你有所收穫。​(有收穫,請評論區留個言,沒收穫,下週末我直播吃**,哈哈,這你也信) 補充說明:微信公眾號改版,對各個號主影響還挺大的。目前從後臺資料來看,對我影響不大,因為我這反正都是小號,

這 10 行比較字串相等的程式碼給我整懵逼了,信你也看看|原創版

抱歉用這種標題吸引你點進來了,不過你不妨看完,看看能否讓你有所收穫。​(有收穫,請評論區留個言,沒收穫,下週末我直播吃**,哈哈,這你也信) 補充說明:微信公眾號改版,對各個號主影響還挺大的。目前從後臺資料來看,對我影響不大,因為我這反正都是小號,

資料特徵工程量化裝箱

量化裝箱        假設這樣一個數據集,裡面某些屬性的值差異很大,小的可能是10以內,大至幾百幾千,這樣我們該如何去量化呢?直接將它們送入模型可行嗎?      &

特徵工程Histogram編碼

例如有如下的特徵,我們要對性別進行編碼,可能常用的方法就是男性對應0,女性對應1。 性別 分類標籤 男 0 男 1 男 1