1. 程式人生 > >機器學習之特徵工程

機器學習之特徵工程

首先,給一張特徵工程的思維導圖:

特徵工程


【如果要瀏覽圖片,建議將其下載到本地,使用圖片瀏覽軟體檢視】 

關於特徵工程(Feature Engineering),已經是很古老很常見的話題了,坊間常說:“資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已”。由此可見,特徵工程在機器學習中佔有相當重要的地位。在實際應用當中,可以說特徵工程是機器學習成功的關鍵。縱觀Kaggle、KDD等國內外大大小小的比賽,每個競賽的冠軍其實並沒有用到很高深的演算法,大多數都是在特徵工程這個環節做出了出色的工作,然後使用一些常見的演算法,比如LR,就能得到出色的效能。遺憾的是,在很多的書籍中並沒有直接提到Feature Engineering,更多的是Feature selection。這也並不,很多ML書籍都是以講解演算法為主,他們的目的是從理論到實踐來理解演算法,所以用到的資料要麼是使用程式碼生成的,要麼是已經處理好的資料,並沒有提到特徵工程。在這篇文章,我打算自我總結下特徵工程,讓自己對特徵工程有個全面的認識。在這我要說明一下,我並不是說那些書寫的不好,其實都很有不錯,主要是因為它們的目的是理解演算法,所以直接給出資料相對而言對於學習和理解演算法效果更佳。

這篇文章主要從以下三個問題出發來理解特徵工程:

  • 特徵工程是什麼?
  • 為什麼要做特徵工程?
  • 應該如何做特徵工程?

對於第一個問題,我會通過特徵工程的目的來解釋什麼是特徵工程。對於第二個問題,主要從特徵工程的重要性來闡述。對於第三個問題,我會從特徵工程的子問題以及簡單的處理方法來進一步說明。下面來看看詳細內容!

1、特徵工程是什麼

首先來解釋下什麼是特徵工程?

當你想要你的預測模型效能達到最佳時,你要做的不僅是要選取最好的演算法,還要儘可能的從原始資料中獲取更多的資訊。那麼問題來了,你應該如何為你的預測模型得到更好的資料呢?

想必到了這裡你也應該猜到了,是的,這就是特徵工程要做的事,它的目的就是獲取更好的訓練資料

關於特徵工程的定義,Wikipedia上是這樣說的:

Feature engineering is the process of using domain knowledge of the data to create features that make machine learning algorithms work. ”

我的理解:

特徵工程是利用資料領域的相關知識來建立能夠使機器學習演算法達到最佳效能的特徵的過程。

簡而言之,特徵工程就是一個把原始資料轉變成特徵的過程,這些特徵可以很好的描述這些資料,並且利用它們建立的模型在未知資料上的表現效能可以達到最優(或者接近最佳效能)。從數學的角度來看,特徵工程就是人工地去設計輸入變數X。

特徵工程更是一門藝術,跟程式設計一樣。導致許多機器學習專案成功和失敗的主要因素就是使用了不同的特徵。說了這麼多,想必你也大概知道了為什麼要做特徵工程,下面來說說特徵工程的重要性。

2、特徵工程的重要性

OK!知道了特徵工程是什麼,那麼我們必須要來了解下特徵工程的重要性,為什麼在實際工作中都要有特徵工程這個過程,下面不同的角度來分析一下。

首先,我們大家都知道,資料特徵會直接影響我們模型的預測效能。你可以這麼說:“選擇的特徵越好,最終得到的效能也就越好”。這句話說得沒錯,但也會給我們造成誤解。事實上,你得到的實驗結果取決於你選擇的模型、獲取的資料以及使用的特徵,甚至你問題的形式和你用來評估精度的客觀方法也扮演了一部分。此外,你的實驗結果還受到許多相互依賴的屬性的影響,你需要的是能夠很好地描述你資料內部結構的好特徵。

(1)特徵越好,靈活性越強

只要特徵選得好,即使是一般的模型(或演算法)也能獲得很好的效能,因為大多數模型(或演算法)在好的資料特徵下表現的效能都還不錯。好特徵的靈活性在於它允許你選擇不復雜的模型,同時執行速度也更快,也更容易理解和維護

(2)特徵越好,構建的模型越簡單

有了好的特徵,即便你的引數不是最優的,你的模型效能也能仍然會表現的很nice,所以你就不需要花太多的時間去尋找最有引數,這大大的降低了模型的複雜度,使模型趨於簡單。

(3)特徵越好,模型的效能越出色

顯然,這一點是毫無爭議的,我們進行特徵工程的最終目的就是提升模型的效能。

下面從特徵的子問題來分析下特徵工程。

3、特徵工程子問題

大家通常會把特徵工程看做是一個問題。事實上,在特徵工程下面,還有許多的子問題,主要包括:Feature Selection(特徵選擇)、Feature Extraction(特徵提取)和Feature construction(特徵構造).下面從這三個子問題來詳細介紹。

3.1 特徵選擇Feature Selection

首先,從特徵開始說起,假設你現在有一個標準的Excel表格資料,它的每一行表示的是一個觀測樣本資料,表格資料中的每一列就是一個特徵。在這些特徵中,有的特徵攜帶的資訊量豐富,有的(或許很少)則屬於無關資料(irrelevant data),我們可以通過特徵項和類別項之間的相關性(特徵重要性)來衡量。比如,在實際應用中,常用的方法就是使用一些評價指標單獨地計算出單個特徵跟類別變數之間的關係。如Pearson相關係數,Gini-index(基尼指數),IG(資訊增益)等,下面舉Pearson指數為例,它的計算方式如下:

r2xy=(con(x,y)var(x)var(y))

其中,x屬於X,X表一個特徵的多個觀測值,y表示這個特徵觀測值對應的類別列表。

Pearson相關係數的取值在0到1之間,如果你使用這個評價指標來計算所有特徵和類別標號的相關性,那麼得到這些相關性之後,你可以將它們從高到低進行排名,然後選擇一個子集作為特徵子集(比如top 10%),接著用這些特徵進行訓練,看看效能如何。此外,你還可以畫出不同子集的一個精度圖,根據繪製的圖形來找出效能最好的一組特徵。

這就是特徵工程的子問題之一——特徵選擇,它的目的是從特徵集合中挑選一組最具統計意義的特徵子集,從而達到降維的效果

做特徵選擇的原因是因為這些特徵對於目標類別的作用並不是相等的,一些無關的資料需要刪掉。做特徵選擇的方法有多種,上面提到的這種特徵子集選擇的方法屬於filter(刷選器)方法,它主要側重於單個特徵跟目標變數的相關性。優點是計算時間上較高效,對於過擬合問題也具有較高的魯棒性。缺點就是傾向於選擇冗餘的特徵,因為他們不考慮特徵之間的相關性,有可能某一個特徵的分類能力很差,但是它和某些其它特徵組合起來會得到不錯的效果。另外做特徵子集選取的方法還有wrapper(封裝器)和Embeded(整合方法)。wrapper方法實質上是一個分類器,封裝器用選取的特徵子集對樣本集進行分類,分類的精度作為衡量特徵子集好壞的標準,經過比較選出最好的特徵子集。常用的有逐步迴歸(Stepwise regression)、向前選擇(Forward selection)和向後選擇(Backward selection)。它的優點是考慮了特徵與特徵之間的關聯性,缺點是:當觀測資料較少時容易過擬合,而當特徵數量較多時,計算時間又會增長。對於Embeded整合方法,它是學習器自身自主選擇特徵,如使用Regularization做特徵選擇,或者使用決策樹思想,細節這裡就不做介紹了。這裡還提一下,在做實驗的時候,我們有時候會用Random Forest和Gradient boosting做特徵選擇,本質上都是基於決策樹來做的特徵選擇,只是細節上有些區別。

綜上所述,特徵選擇過程一般包括產生過程,評價函式,停止準則,驗證過程,這4個部分。如下圖所示:


這裡寫圖片描述 

(1) 產生過程( Generation Procedure ):產生過程是搜尋特徵子集的過程,負責為評價函式提供特徵子集。搜尋特徵子集的過程有多種,將在2.2小節展開介紹。 
(2) 評價函式( Evaluation Function ):評價函式是評價一個特徵子集好壞程度的一個準則。評價函式將在2.3小節展開介紹。 
(3) 停止準則( Stopping Criterion ):停止準則是與評價函式相關的,一般是一個閾值,當評價函式值達到這個閾值後就可停止搜尋。 
(4) 驗證過程( Validation Procedure ) :在驗證資料集上驗證選出來的特徵子集的有效性。

3.2 特徵提取

特徵提取的子問題之二——特徵提取。

原則上來講,特徵提取應該在特徵選擇之前。特徵提取的物件是原始資料(raw data),它的目的是自動地構建新的特徵,將原始特徵轉換為一組具有明顯物理意義(Gabor、幾何特徵[角點、不變數]、紋理[LBP HOG])或者統計意義或核的特徵。比如通過變換特徵取值來減少原始資料中某個特徵的取值個數等。對於表格資料,你可以在你設計的特徵矩陣上使用主要成分分析(Principal Component Analysis,PCA)來進行特徵提取從而建立新的特徵。對於影象資料,可能還包括了線或邊緣檢測。

常用的方法有:

  • PCA (Principal component analysis,主成分分析)
  • ICA (Independent component analysis,獨立成分分析)
  • LDA (Linear Discriminant Analysis,線性判別分析)

對於影象識別中,還有SIFT方法。

3.3 特徵構建 Feature Construction

特徵提取的子問題之二——特徵構建。

在上面的特徵選擇部分,我們提到了對特徵重要性進行排名。那麼,這些特徵是如何得到的呢?在實際應用中,顯然是不可能憑空而來的,需要我們手工去構建特徵。關於特徵構建的定義,可以這麼說:特徵構建指的是從原始資料中人工的構建新的特徵。我們需要人工的建立它們。這需要我們花大量的時間去研究真實的資料樣本,思考問題的潛在形式和資料結構,同時能夠更好地應用到預測模型中。

特徵構建需要很強的洞察力和分析能力,要求我們能夠從原始資料中找出一些具有物理意義的特徵。假設原始資料是表格資料,一般你可以使用混合屬性或者組合屬性來建立新的特徵,或是分解或切分原有的特徵來建立新的特徵。

4、特徵工程處理過程

那麼問題來了,特徵工程具體是在哪個步驟做呢?

具體的機器學習過程是這樣的一個過程:

  • 1.(Task before here)
  • 2.選擇資料(Select Data): 整合資料,將資料規範化成一個數據集,收集起來.
  • 3.資料預處理(Preprocess Data): 資料格式化,資料清理,取樣等.
  • 4.資料轉換(Transform Data): 這個階段做特徵工程.
  • 5.資料建模(Model Data): 建立模型,評估模型並逐步優化.
  • (Tasks after here…)

我們發現,特徵工程和資料轉換其實是等價的。事實上,特徵工程是一個迭代過程,我們需要不斷的設計特徵、選擇特徵、建立模型、評估模型,然後才能得到最終的model。下面是特徵工程的一個迭代過程:

  • 1.頭腦風暴式特徵:意思就是進你可能的從原始資料中提取特徵,暫時不考慮其重要性,對應於特徵構建;
  • 2.設計特徵:根據你的問題,你可以使用自動地特徵提取,或者是手工構造特徵,或者兩者混合使用;
  • 3.選擇特徵:使用不同的特徵重要性評分和特徵選擇方法進行特徵選擇;
  • 4.評估模型:使用你選擇的特徵進行建模,同時使用未知的資料來評估你的模型精度。

By the way, 在做feature selection的時候,會涉及到特徵學習(Feature Learning),這裡說下特徵學習的概念,一般而言,特徵學習(Feature Learning)是指學習輸入特徵和一個訓練例項真是類別之間的關係。

下面舉個例子來簡單瞭解下特徵工程的處理。

首先是來說下特徵提取,假設你的資料裡現在有一個顏色類別的屬性,比如是“item_Color”,它的取值有三個,分別是:red,blue,unknown。從特徵提取的角度來看,你可以將其轉化成一個二值特徵“has_color”,取值為1或0。其中1表示有顏色,0表示沒顏色。你還可以將其轉換成三個二值屬性:Is_Red, Is_Blue and Is_Unknown。這樣構建特徵之後,你就可以使用簡單的線性模型進行訓練了。

另外再舉一個例子,假設你有一個日期時間 (i.e. 2014-09-20T20:45:40Z),這個該如何轉換呢?

對於這種時間的資料,我們可以根據需求提取出多種屬性。比如,如果你想知道某一天的時間段跟其它屬性的關係,你可以建立一個數字特徵“Hour_Of_Day”來幫你建立一個迴歸模型,或者你可以建立一個序數特徵,“Part_Of_Day”,取值“Morning,Midday,Afternoon,Night”來關聯你的資料。

此外,你還可以按星期或季度來構建屬性,等等等等……

關於特徵構建,主要是儘可能的從原始資料中構建特徵,而特徵選擇,經過上面的分析,想必大家也知道了,其實就是達到一個降維的效果。

只要分析能力和實踐能力夠強,那麼特徵構建和特徵提取對你而言就會顯得相對比較簡單,所以抓緊時間好好實踐吧!

Conclusion

恩。說了這麼多,大家可能對特徵工程、特徵選擇、特徵提取和特徵構建有點混亂了,下面來簡單的做個總結:

首先來說說這幾個術語:

  • 特徵工程:利用資料領域的相關知識來建立能夠使機器學習演算法達到最佳效能的特徵的過程。
  • 特徵構建:是原始資料中人工的構建新的特徵。
  • 特徵提取:自動地構建新的特徵,將原始特徵轉換為一組具有明顯物理意義或者統計意義或核的特徵。
  • 特徵選擇:從特徵集合中挑選一組最具統計意義的特徵子集,從而達到降維的效果

瞭解這幾個術語的意思後,我們來看看他們之間的關係。

在Quora中有人這麼說:

Feature engineering is a super-set of activities which include feature extraction, feature construction and feature selection. Each of the three are important steps and none should be ignored. We could make a generalization of the importance though, from my experience the relative importance of the steps would be feature construction > feature extraction > feature selection.

用中文來說就是:特徵工程是一個超集,它包括特徵提取、特徵構建和特徵選擇這三個子模組。在實踐當中,每一個子模組都非常重要,忽略不得。根據答主的經驗,他將這三個子模組的重要性進行了一個排名,即:特徵構建>特徵提取>特徵選擇。

事實上,真的是這樣,如果特徵構建做的不好,那麼它會直接影響特徵提取,進而影響了特徵選擇,最終影響模型的效能

OK!關於特徵工程就到此為止吧,如果有紕漏的地方,還望大家多多指導!作為一枚行走在ML界的程式設計師,就讓我們快樂的建模,快樂的做特徵工程吧^_^!Happy coding, happy modeling!

References

相關推薦

系統學習機器學習特徵工程(二)--離散型特徵編碼方式:LabelEncoder、one-hot與啞變數*

轉自:https://www.cnblogs.com/lianyingteng/p/7792693.html 在機器學習問題中,我們通過訓練資料集學習得到的其實就是一組模型的引數,然後通過學習得到的引數確定模型的表示,最後用這個模型再去進行我們後續的預測分類等工作。在模型訓練過程中,我們會對訓練

機器學習特徵工程-資料預處理

摘自 jacksu在簡書 機器學習之特徵工程-資料預處理 https://www.jianshu.com/p/23b493d38b5b 通過特徵提取,我們能得到未經處理的特徵,這時的特徵可能有以下問題: 不屬於同一量綱:即特徵的規格不一樣,不能夠放在

Python機器學習特徵工程

import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from sklearn.model_selection import

機器學習特徵工程

首先,給一張特徵工程的思維導圖: 【如果要瀏覽圖片,建議將其下載到本地,使用圖片瀏覽軟體檢視】  關於特徵工程(Feature Engineering),已經是很古老很常見的話題了,坊間常說:“資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已”。由此可見,特徵工程在機器學習中佔

機器學習特徵工程-特徵選擇

點選“閱讀原文”直接開啟【北京站 | GPU CUDA 進階課程】報名連結 一個基本的資料探勘場景如下: 資料探勘.jpg 從上面的資料探勘場景可知,當資料預處理完成後,我們需要選擇有意義的特徵,輸入機器學習的演算法模型進行訓練。通常來說,從兩個方面考慮來選擇特徵: 特徵是否發散:如果一個特徵

系統學習機器學習特徵工程(一)--維度歸約

這裡,我們討論特徵選擇和特徵提取,前者選取重要的特徵子集,後者由原始輸入形成較少的新特徵,理想情況下,無論是分類還是迴歸,我們不應該將特徵選擇或特徵提取作為一個單獨的程序,分類或者回歸方法應該能夠利用任何必要的特徵,而丟棄不相關的特徵。但是,考慮到演算法儲存量和時間的複雜度,

機器學習-2.特徵工程和文字特徵提取

1. 資料集的組成 前面講了,機器學習是從歷史資料當中獲得規律,那這些歷史資料的組成是個什麼格式?大都儲存在哪裡? – 在機器學習裡大多數資料不會存在資料庫中,大都存在檔案中(比如csv檔案) – 不存在資料庫原因:1. 讀取速度導致存在效能瓶頸。2. 儲存的格式不太符合機器學習

機器學習機器學習特徵選擇

機器學習之特徵選擇 特徵選擇方法初識: 1、為什麼要做特徵選擇 在有限的樣本數目下,用大量的特徵來設計分類器計算開銷太大而且分類效能差。 2、特徵選擇的確切含義 將高維空間的樣本通過對映或者是變換的方式轉換到低維空間,達到降維的目的,然後通過特徵選取刪選掉冗餘和不相關的特徵來進一步降維。

機器學習特徵工程多特徵值序列化數值化獨熱編碼處理(LabelEncoder, pd.factorize())

多特徵值序列化數值化獨熱編碼處理 當我們在運用某些模型時,比如在Scikit-learn中,它要求資料都得是numberic(數值型),若是文字型別就無法進行訓練。 那麼在這種情況下,我們就應該先對資料進行序列化數值化: 下面是幾種在Python中數值化的方法: 1

機器學習特徵選擇方法整理

三個問題 1、為什麼特徵選擇? 在有限的樣本數目下,用大量的特徵來設計分類器計算開銷太大而且分類效能差。 2、特徵選擇是什麼? 將高維空間的樣本通過對映或者是變換的方式轉換到低維空間,達到降維的目的,然後通過特徵選取刪選掉冗餘和不相關的特徵來進一步降維。 3、如何進行特徵選取?

Spark機器學習特徵提取、選擇、轉換

本節介紹了處理特徵的演算法,大致分為以下幾組:      1、提取:從“原始”資料提取特徵      2、轉換:縮放,轉換或修改要素      3、選擇:從一組較大的要素中選擇一個子集      4、區域性敏感雜湊(LSH):這類演算法將特徵變換的方面與其他演算法

機器學習特徵工程

特徵選擇直接影響模型靈活性、效能及是否簡潔。 好特徵的靈活性在於它允許你選擇不復雜的模型,同時執行速度也更快,也更容易理解和維護。 特徵選擇 四個過程:產生過程,評價函式,停止準則,驗證過程。 目

機器學習2-特徵工程

特徵工程      特徵抽取 文字特徵提取-CountVectorizer 作用:對文字資料進行特徵值化 sklearn.feature_extraction.text.CountVectorizer(stop_words=[]) 返回詞頻矩陣 CountVect

機器學習系列特徵工程

資料的特徵選擇 資料特徵主要分為兩部分,一部分是業務已經整理好的各種特徵資料;另一部分是根據業務特徵去構造的資料特徵。 特徵選擇的方法 一、已有特徵 1.過濾法選擇特徵: 方差越小,不同樣本的特徵值越相似,此特徵作用越小; 各個特徵與輸出值間的相關係數,選擇相關係數較大的部分

機器學習實踐(三)—sklearn特徵工程

一、特徵工程介紹 1. 為什麼需要特徵工程 Andrew Ng : “Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learnin

機器學習(四)特徵工程以及特徵選擇的工程方法

關於特徵工程(Feature Engineering),已經是很古老很常見的話題了,坊間常說:“資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已”。由此可見,特徵工程在機器學習中佔有相當重要的地位。在實際應用當中,可以說特徵工程是機器學習成功的關鍵。縱觀

我的機器學習旅(四):回歸與工程應用

多個 算法 ati function RR numpy pen 圖片 bsp 內容:線性回歸;邏輯回歸,應用場景。 一、線性回歸 有監督學習,根據學習樣本{x->y},學習一個映射f:X->Y(線性相關),輸出預測結果y_i。最簡單的例子:y=ax+b 重要組成

機器學習特征工程-常用算法及實現

機器學習 特征工程 AI ML Feature Engineering 機器學習之特征工程-常用算法及實現

機器學習特徵選擇最小冗餘最大相關性(mRMR)與隨機森林(RF)

特徵選擇之最小冗餘最大相關性(mRMR) 最小冗餘最大相關性(mRMR)是一種濾波式的特徵選擇方法,由Peng et.al提出。主要用途有機器學習,影象識別等。 一種常用的特徵選擇方法是最大化特徵與分類變數之間的相關度,就是選擇與分類變數擁有最高相關度的前k個變數。但是,在特徵選擇中,

機器學習特徵值/特徵向量的解析和應用

機器學習中,矩陣的特徵值/特徵向量理論有著非常廣泛的應用,比如資料降維 [1],人臉識別 [2]等。本文主要介紹特徵值/特徵向量。 1. 特徵值 定義: 給定n×nn\times nn×n階方陣AAA,如果存在數值λ\lambdaλ和nnn維非零向量x⃗\ve