<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          機器學習之特征工程

          共 6728字,需瀏覽 14分鐘

           ·

          2020-06-30 23:24

          轉(zhuǎn)自文章:

          https://blog.csdn.net/Dream_angel_Z/article/details/49388733


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


          這篇文章主要從以下三個問題出發(fā)來理解特征工程:


          • 特征工程是什么?

          • 為什么要做特征工程?

          • 應該如何做特征工程?

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


          1、特征工程是什么

          首先來解釋下什么是特征工程?


          當你想要你的預測模型性能達到最佳時,你要做的不僅是要選取最好的算法,還要盡可能的從原始數(shù)據(jù)中獲取更多的信息。那么問題來了,你應該如何為你的預測模型得到更好的數(shù)據(jù)呢?


          想必到了這里你也應該猜到了,是的,這就是特征工程要做的事,它的目的就是獲取更好的訓練數(shù)據(jù)。


          關(guān)于特征工程的定義,Wikipedia上是這樣說的:


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

          我的理解:


          特征工程是利用數(shù)據(jù)領(lǐng)域的相關(guān)知識來創(chuàng)建能夠使機器學習算法達到最佳性能的特征的過程。


          簡而言之,特征工程就是一個把原始數(shù)據(jù)轉(zhuǎn)變成特征的過程,這些特征可以很好的描述這些數(shù)據(jù),并且利用它們建立的模型在未知數(shù)據(jù)上的表現(xiàn)性能可以達到最優(yōu)(或者接近最佳性能)。從數(shù)學的角度來看,特征工程就是人工地去設(shè)計輸入變量X。


          特征工程更是一門藝術(shù),跟編程一樣。導致許多機器學習項目成功和失敗的主要因素就是使用了不同的特征。說了這么多,想必你也大概知道了為什么要做特征工程,下面來說說特征工程的重要性。


          2、特征工程的重要性

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


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


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


          只要特征選得好,即使是一般的模型(或算法)也能獲得很好的性能,因為大多數(shù)模型(或算法)在好的數(shù)據(jù)特征下表現(xiàn)的性能都還不錯。好特征的靈活性在于它允許你選擇不復雜的模型,同時運行速度也更快,也更容易理解和維護。


          (2)特征越好,構(gòu)建的模型越簡單


          有了好的特征,即便你的參數(shù)不是最優(yōu)的,你的模型性能也能仍然會表現(xiàn)的很nice,所以你就不需要花太多的時間去尋找最有參數(shù),這大大的降低了模型的復雜度,使模型趨于簡單。


          (3)特征越好,模型的性能越出色


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


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


          3、特征工程子問題

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


          3.1 特征選擇Feature Selection

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

          5f4dd7f286af3ada997204c7d2decab9.webp

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


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


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


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


          綜上所述,特征選擇過程一般包括產(chǎn)生過程,評價函數(shù),停止準則,驗證過程,這4個部分。如下圖所示:


          c87df7ba34ec2cdc2fb7a1851129023a.webp


          (1) 產(chǎn)生過程( Generation Procedure ):產(chǎn)生過程是搜索特征子集的過程,負責為評價函數(shù)提供特征子集。搜索特征子集的過程有多種,將在2.2小節(jié)展開介紹。

          (2) 評價函數(shù)( Evaluation Function ):評價函數(shù)是評價一個特征子集好壞程度的一個準則。評價函數(shù)將在2.3小節(jié)展開介紹。

          (3) 停止準則( Stopping Criterion ):停止準則是與評價函數(shù)相關(guān)的,一般是一個閾值,當評價函數(shù)值達到這個閾值后就可停止搜索。

          (4) 驗證過程( Validation Procedure ) :在驗證數(shù)據(jù)集上驗證選出來的特征子集的有效性。


          3.2 特征提取

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


          原則上來講,特征提取應該在特征選擇之前。特征提取的對象是原始數(shù)據(jù)(raw data),它的目的是自動地構(gòu)建新的特征,將原始特征轉(zhuǎn)換為一組具有明顯物理意義(Gabor、幾何特征[角點、不變量]、紋理[LBP HOG])或者統(tǒng)計意義或核的特征。比如通過變換特征取值來減少原始數(shù)據(jù)中某個特征的取值個數(shù)等。對于表格數(shù)據(jù),你可以在你設(shè)計的特征矩陣上使用主要成分分析(Principal Component Analysis,PCA)來進行特征提取從而創(chuàng)建新的特征。對于圖像數(shù)據(jù),可能還包括了線或邊緣檢測。


          常用的方法有:


          PCA (Principal component analysis,主成分分析)

          ICA (Independent component analysis,獨立成分分析)

          LDA (Linear Discriminant Analysis,線性判別分析)

          對于圖像識別中,還有SIFT方法。


          3.3 特征構(gòu)建 Feature Construction

          特征提取的子問題之二——特征構(gòu)建。


          在上面的特征選擇部分,我們提到了對特征重要性進行排名。那么,這些特征是如何得到的呢?在實際應用中,顯然是不可能憑空而來的,需要我們手工去構(gòu)建特征。關(guān)于特征構(gòu)建的定義,可以這么說:特征構(gòu)建指的是從原始數(shù)據(jù)中人工的構(gòu)建新的特征。我們需要人工的創(chuàng)建它們。這需要我們花大量的時間去研究真實的數(shù)據(jù)樣本,思考問題的潛在形式和數(shù)據(jù)結(jié)構(gòu),同時能夠更好地應用到預測模型中。


          特征構(gòu)建需要很強的洞察力和分析能力,要求我們能夠從原始數(shù)據(jù)中找出一些具有物理意義的特征。假設(shè)原始數(shù)據(jù)是表格數(shù)據(jù),一般你可以使用混合屬性或者組合屬性來創(chuàng)建新的特征,或是分解或切分原有的特征來創(chuàng)建新的特征。


          4、特征工程處理過程

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


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


          1.(Task before here)

          2.選擇數(shù)據(jù)(Select Data): 整合數(shù)據(jù),將數(shù)據(jù)規(guī)范化成一個數(shù)據(jù)集,收集起來.

          3.數(shù)據(jù)預處理(Preprocess Data): 數(shù)據(jù)格式化,數(shù)據(jù)清理,采樣等.

          4.數(shù)據(jù)轉(zhuǎn)換(Transform Data): 這個階段做特征工程.

          5.數(shù)據(jù)建模(Model Data): 建立模型,評估模型并逐步優(yōu)化.

          (Tasks after here…)

          我們發(fā)現(xiàn),特征工程和數(shù)據(jù)轉(zhuǎn)換其實是等價的。事實上,特征工程是一個迭代過程,我們需要不斷的設(shè)計特征、選擇特征、建立模型、評估模型,然后才能得到最終的model。下面是特征工程的一個迭代過程:


          1.頭腦風暴式特征:意思就是進你可能的從原始數(shù)據(jù)中提取特征,暫時不考慮其重要性,對應于特征構(gòu)建;

          2.設(shè)計特征:根據(jù)你的問題,你可以使用自動地特征提取,或者是手工構(gòu)造特征,或者兩者混合使用;

          3.選擇特征:使用不同的特征重要性評分和特征選擇方法進行特征選擇;

          4.評估模型:使用你選擇的特征進行建模,同時使用未知的數(shù)據(jù)來評估你的模型精度。

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


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


          首先是來說下特征提取,假設(shè)你的數(shù)據(jù)里現(xiàn)在有一個顏色類別的屬性,比如是“item_Color”,它的取值有三個,分別是:red,blue,unknown。從特征提取的角度來看,你可以將其轉(zhuǎn)化成一個二值特征“has_color”,取值為1或0。其中1表示有顏色,0表示沒顏色。你還可以將其轉(zhuǎn)換成三個二值屬性:Is_Red, Is_Blue and Is_Unknown。這樣構(gòu)建特征之后,你就可以使用簡單的線性模型進行訓練了。


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


          對于這種時間的數(shù)據(jù),我們可以根據(jù)需求提取出多種屬性。比如,如果你想知道某一天的時間段跟其它屬性的關(guān)系,你可以創(chuàng)建一個數(shù)字特征“Hour_Of_Day”來幫你建立一個回歸模型,或者你可以建立一個序數(shù)特征,“Part_Of_Day”,取值“Morning,Midday,Afternoon,Night”來關(guān)聯(lián)你的數(shù)據(jù)。


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


          關(guān)于特征構(gòu)建,主要是盡可能的從原始數(shù)據(jù)中構(gòu)建特征,而特征選擇,經(jīng)過上面的分析,想必大家也知道了,其實就是達到一個降維的效果。


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


          Conclusion

          恩。說了這么多,大家可能對特征工程、特征選擇、特征提取和特征構(gòu)建有點混亂了,下面來簡單的做個總結(jié):


          首先來說說這幾個術(shù)語:


          特征工程:利用數(shù)據(jù)領(lǐng)域的相關(guān)知識來創(chuàng)建能夠使機器學習算法達到最佳性能的特征的過程。

          特征構(gòu)建:是原始數(shù)據(jù)中人工的構(gòu)建新的特征。

          特征提取:自動地構(gòu)建新的特征,將原始特征轉(zhuǎn)換為一組具有明顯物理意義或者統(tǒng)計意義或核的特征。

          特征選擇:從特征集合中挑選一組最具統(tǒng)計意義的特征子集,從而達到降維的效果

          了解這幾個術(shù)語的意思后,我們來看看他們之間的關(guān)系。


          在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.


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


          事實上,真的是這樣,如果特征構(gòu)建做的不好,那么它會直接影響特征提取,進而影響了特征選擇,最終影響模型的性能。


          OK!關(guān)于特征工程就到此為止吧,如果有紕漏的地方,還望大家多多指導!作為一枚行走在ML界的程序員,就讓我們快樂的建模,快樂的做特征工程吧^_^!Happy coding, happy modeling!


          References

          • Neglected machine learning ideas

          • Q&A with Xavier Conort

          • https://www.quora.com/What-is-feature-engineering

          • Feature_engineering-wikipedia

          • An Introduction to Feature Selection

          • Discover Feature Engineering, How to Engineer Features and How to Get Good at It

          • How valuable do you think feature selection is in machine learning? Which do you think improves accuracy more, feature selection or feature engineering?


          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91精品成人| 成人免费污污污视频 | 国产精品秘 久久久久久电影院 | 国产成人麻豆作品 | 欧美日P 三级日韩 |