本文由 沈慶陽 所有,轉(zhuǎn)載請與作者取得聯(lián)系!
前言
我們先來回顧一下什么是特征噪生。
特征(Feature)即機器學習中的輸入變量阵翎。通過機器學習逢并,我們可以得到定義了特征與標簽之間關(guān)系的模型。
在傳統(tǒng)的編程理念中郭卫,程序員往往關(guān)注點停留在代碼身上砍聊。而在機器學習的項目中,工程師的關(guān)注點轉(zhuǎn)移到表示(Representation)上面箱沦。即工程師通過添加辩恼、改進特征來調(diào)整模型。
在機器學習中,數(shù)據(jù)和特征決定了機器學習的上限灶伊,模型和算法只是逼近這個上限疆前。特征工程即從原始數(shù)據(jù)中提取最大限度的特征以供模型使用。
從原始數(shù)據(jù)中映射到特征
假設(shè)我們得到的原始數(shù)據(jù)如下聘萨。
0:{
person_info:{
age:21
gender:'male'
career:'teacher'
...
}
}
上面我們獲取了一個人的信息竹椒,其屬于輸入數(shù)據(jù)源的原始數(shù)據(jù),而機器學習需要的輸入是樣本表示為實數(shù)矢量米辐。為了將原始數(shù)據(jù)轉(zhuǎn)換為特征矢量胸完,我們需要運用到特征工程。通常在機器學習的項目中翘贮,特征工程要花費大量的時間赊窥。
通過特征工程,我們將原始數(shù)據(jù)映射到機器學習特征狸页。(下述為機器學習特征矢量的舉例锨能,非對應上述原始數(shù)據(jù))
[
21.0,
0.0,
5.31,
6.44,
0,
0,
...,
]
在映射的過程中,整數(shù)和浮點數(shù)作為原始數(shù)據(jù)不需要進行特殊的編碼芍耘,因此可以對整數(shù)直接復制實值特征址遇。
字符串映射的兩種方法
而對于字符串的映射較為特殊,機器學習的模型無法通過字符串進行學習斋竞,因此我們需要對字符串進行一些特征工程的轉(zhuǎn)化倔约,將字符串轉(zhuǎn)換為數(shù)字的形式。
與枚舉型(Enumeration)有些類似坝初,我們將職業(yè)(Career)想象成一個枚舉型變量浸剩。枚舉型變量實質(zhì)上是用整形代替字符串,這點與特征工程處理字符串有類似脖卖,但不同乒省。
Career{
Teacher,Student,Engineer,Agent,...
}
枚舉型變量的Teacher對應的是0,Student對應的是1畦木,Engineer對應的是2袖扛。
字符串映射:獨熱編碼(One-Hot Encoding)
而在特征工程中,我們的Career不再是一個占據(jù)一個存儲空間的整形變量十籍,而是一個二元矢量蛆封。假設(shè)Career一共有20個職業(yè),那么Career在特征矢量的表示下就是一個長度為20的一維數(shù)組勾栗。Teacher對應的是一維數(shù)組的第一個元素惨篱,Student對應的是一維數(shù)組的第二個元素,以此類推围俘。當Career為Student時砸讳,第二個元素的值為1琢融,其余值為0。當Career為Engineer時簿寂,第三個值為1漾抬,其余值為0。
這種映射方法叫做獨熱編碼映射字符串常遂。其基本步驟如下:
1纳令、定義詞匯表:將需要表示的字符串定義在一個詞匯表中。對于Career特征克胳,該詞匯表包含所有樣本中的Career職業(yè)平绩。
2、獨熱編碼:在創(chuàng)建完詞匯表之后使用該詞匯表創(chuàng)建一個獨熱編碼漠另,將指定字符串表示為二元矢量捏雌,該矢量的長度為詞匯表中詞匯的個數(shù)。該矢量只有一個元素為1酗钞,其余元素均為0腹忽。
獨熱編碼適合特征的可能值較多的情況。
字符串映射:映射分類值(枚舉)
在分類特征個數(shù)較少的情況下砚作,我們使用映射分類值得方法。該方法與枚舉型一致嘹锁。
此外葫录,機器學習模型也可以將單個字符串表示為多個布爾值得特征,如领猾,
x1:是Teacher么米同?(True或False)
x2:是Student么?(True或False)
x3:是Engineer么摔竿?(True或False)
選用良好的特征
在將原始數(shù)據(jù)轉(zhuǎn)為特征矢量之后面粮,我們的關(guān)注點需要放在對特征矢量的選擇上。
總的來說继低,良好的特征具有如下特點:
1熬苍、不存在或很少存在使用率低的離散特征值
2、特征具有清晰明確的含義
3袁翁、考慮到上游不穩(wěn)定性
下面將會對這三個特點逐個解析柴底。
避免使用率低的離散特征值
什么樣的特征才叫使用率低的特征呢?
一個良好的特征值在數(shù)據(jù)集中出現(xiàn)大約5次及以上粱胜。只有這樣柄驻,機器學習的模型才能學習這個特征值與標簽之間的關(guān)系。大量的離散值相同的樣本可以讓模型了解不同設(shè)置中的特征焙压,從而判斷何時能對標簽做出良好的預測鸿脓。
以上文中講到的Career為例抑钟,Career特征包含大量的樣本,其中一個為Teacher野哭。那么Career就是一個可取的特征在塔。
反之,一個特征出現(xiàn)的次數(shù)很少虐拓,比如在person_info中加入person_id:51029302020XXXXX心俗,那么person_id便不適合作為特征,因為這個值是唯一的蓉驹,模型無法從這個特征中學到任何規(guī)律城榛。
具有清晰明確的含義
良好的特征應該具有清晰且明確的含義。像是person_info中的age:21可以明確地知道這個人是21歲态兴。
但如果將person_info中的age表示成這樣age:3900192844(以分鐘或是小時來計算年齡)怕是沒人知道這個人幾歲了狠持,那么這個特征值便是糟糕的特征值。
在有些情況下瞻润,一些沒有經(jīng)過過濾的喘垂,來源不恰當?shù)奶卣髦狄矔е绿卣骰靵y。像age:233绍撞。那么這個年齡明顯超過了人類的最大年齡正勒。
假設(shè)有一個特征值是一門考試的成績,該特征是從0到100的浮點值傻铣。如果該特征值是落在0到100之間章贞,那么這個特征值是良好的。如果一個樣本沒有參加考試非洲,那么其特征值應該是多少呢鸭限?
一般編程的時候我們采用-1來表示這個值是奇異的。但是两踏,在機器學習的項目中一定要杜絕這種表示方法败京!我們應該新建立一個特征,來表示這個特征值是否存在梦染。
考慮到上游不穩(wěn)定性
對于良好的特征赡麦,特征的定義不應該隨著時間而變化。
清理數(shù)據(jù)
在準備數(shù)據(jù)集的時候弓坞,一些輸入可能是會對模型學習結(jié)果產(chǎn)生不好影響的壞數(shù)據(jù)隧甚。比如在前面我們訓練TensorFlow的Object Detection項目的時候,一個樣本中對Pen的標注出現(xiàn)偏差渡冻,或是將茶杯標注成了Pen戚扳。在機器學習的時候,我們會花費大量的時間來挑除這樣的壞樣本來拯救數(shù)據(jù)集族吻,因為即使存在少量的壞數(shù)據(jù)也會對一個大規(guī)模的數(shù)據(jù)集產(chǎn)生很大的影響帽借,甚至是破壞整個數(shù)據(jù)集珠增。
下一節(jié),我們將會通過具體練習的實例來進行清理數(shù)據(jù)砍艾。
覺得寫的不錯的朋友可以點一個 喜歡? ~
謝謝你的支持蒂教!