第五课 机器学习中的特征工程
本系列是七月算法機器學(xué)習(xí)課程筆記
文章目錄
- 1 特征工程與意義
- 2 數(shù)據(jù)與特征處理
- 2.1數(shù)據(jù)采集
- 2.2 數(shù)據(jù)清洗
- 2.3 數(shù)據(jù)采樣
- 2.4 特征處理
- 2.4.1 數(shù)值型
- 2.4.2 類別型
- 2.4.3 時間型
- 2.4.3 文本型
- 2.4.4 統(tǒng)計特征
- 3 特征選擇
- 3.1 為什么做特征選擇
- 3.2 特征選擇的方法
- 3.2.1 過濾型
- 3.2.2 包裹型
- 3.2.3 嵌入型
1 特征工程與意義
特征工程做的事情是從數(shù)據(jù)中抽取出來的,對結(jié)果預(yù)測有用的信息。
特征工程是使用專業(yè)背景知識和機器學(xué)習(xí)技巧處理數(shù)據(jù),使得特征能在機器學(xué)習(xí)算法上發(fā)揮更大的作用。
要提升機器學(xué)習(xí)的效果可以有三個途徑:
1 選擇一個合適的模型,模型越簡單越好
2 編碼技能和機器學(xué)習(xí)技能,能夠通過調(diào)參提升效果。這個提升效果大概在千分之幾的級別。
3 了解業(yè)務(wù),通過抽取特征提升效果。這個提供效果大概在百分之幾的級別。
2 數(shù)據(jù)與特征處理
2.1數(shù)據(jù)采集
在數(shù)據(jù)采集階段需要考慮哪些數(shù)據(jù)對最后的結(jié)果有幫助
這些數(shù)據(jù)能不能采集到
在預(yù)測階段一般是實時在線的,這個時候采集這些數(shù)據(jù)是否能實時獲取,不能實時獲取或者代價很大的數(shù)據(jù),不能使用
例如:現(xiàn)在設(shè)計一個算法,預(yù)測同學(xué)學(xué)習(xí)課程的興趣程度??梢钥紤]采集哪些數(shù)據(jù)呢?
同學(xué)們學(xué)習(xí)課程的興趣程度,可能跟老師、課程、同學(xué)相關(guān)。
與老師相關(guān)的指標可能有:性別、聲音、學(xué)歷。
與課程相關(guān)的指標可能有:課程內(nèi)容、難易程度、是否與工作相關(guān)。
與同學(xué)相關(guān)的指標可能有:有無數(shù)學(xué)基礎(chǔ)、學(xué)歷、目前就職狀態(tài)、找工作計劃。
設(shè)計好特征之后就可以采集數(shù)據(jù)了。
2.2 數(shù)據(jù)清洗
采集后的數(shù)據(jù)需要清洗,否則就是garbage in , garbage out,(喂了垃圾數(shù)據(jù),出來的模型也是垃圾的)
數(shù)據(jù)清洗可以從以下角度考慮。
1 單維度可信程度
例如一個人身高3米,一個實驗室每個月買墩布10萬元…
在數(shù)據(jù)清洗過程中可以根據(jù)情況去掉前百分之一和大于99%的那部分數(shù)據(jù)。
2 組合或統(tǒng)計屬性判定
用常識解決異常值。例如在判斷用戶是否會買籃球的模型中,數(shù)據(jù)中有85%的女性樣本。就不符合常識。
3 補齊缺省值
2.3 數(shù)據(jù)采樣
在遇到正負樣本數(shù)量懸殊的情況下應(yīng)該怎么處理?
1 如果正負樣>>負樣本,且量都很大,可以使用下采樣的方式解決。以負樣本的數(shù)量為準,通過隨機抽樣的方式從正樣本采集幾乎同樣數(shù)量的樣本。還可以從正樣本中通過分層抽樣的方式重新采集樣本。
這里補充一下下采樣的時間。先對原始數(shù)據(jù)集做訓(xùn)練集和測試集的拆分。之后對訓(xùn)練集中的樣本多的分類做下采樣。這是看見老師講的案例中是這樣的。原因不清楚。我想大概是這樣可以在評估模型的時候因為測試集中的正樣本更具代表性,模型準確度也會更可靠吧。
假如一個數(shù)據(jù)集中正樣本 800,負樣本 100。
先分數(shù)據(jù)集訓(xùn)練集、測試集,測試集占比20%。 測試中 正樣本 160,負樣本
20;訓(xùn)練集中 正樣本640,負樣本80。再下采樣,正樣本80,負樣本80。
用此訓(xùn)練出的模型,在評估模型的時候這樣本是160個,相對來說更客觀一點。
先下采樣 正樣本100,負樣本100
再分訓(xùn)練集、測試集,20% 測試集中 正樣本 20,負樣本20,訓(xùn)練集中 正樣本80,負樣本80。
這里測試集中正樣本數(shù)量只有20。相比前一個方法,缺失一點客觀性。
大概是這樣吧。
例如我前段時間做網(wǎng)頁是否是列表頁的判斷。是列表頁的數(shù)據(jù)量<不是列表頁的數(shù)量。那我就從不是列表頁的數(shù)量的樣本中按照站點分組。例如我需要300個樣本,有5個站點,就每個站點隨機抽取60個樣本組成新的不是列表頁的樣本集。
2 如果正樣本>>負樣本,且量都不大,可以使用過采樣的方式解決。對負樣本的數(shù)據(jù)重復(fù)多份,或者樣本是圖片的話可以通過旋轉(zhuǎn),縮放等方式產(chǎn)生新的樣本數(shù)據(jù)。
在一些場景下還可以使用SMOTE算法造出一些數(shù)據(jù)。
2.4 特征處理
特征值的類型有:數(shù)值型、類別型、時間類、文本型、統(tǒng)計型、組合特征。下面分別描述各類特征的處理方式。
2.4.1 數(shù)值型
1 數(shù)值型特征幅度調(diào)整
在一個模型中房間數(shù)量的值在[2,10]之間,房屋面積的值在[70,500]之間。這種幅度不同的特征值,幅度大的特征會對模型有更大的影響。所以模型效果不會很好。需要調(diào)整到同一幅度內(nèi)。
我們可以將特征值調(diào)整在[0,1]范圍內(nèi):MinMaxScaler。計算方式:d=d?minmax?mind=\dfrac{d-min}{max-min}d=max?mind?min?
我們也可以對特征值對標準化處理:StandScaler。計算方式:d=d?mean標準差d=\dfrac{d-mean}{標準差}d=標準差d?mean?
2 可以通過log等函數(shù),讓特征值的數(shù)據(jù)域發(fā)生變化
3 計算特征值的統(tǒng)計值
統(tǒng)計值包含:max、min、mean、std。這可以通過pandas的describe方法獲得。
4 離散化
首先說明為什么要做離散化?,F(xiàn)在要用邏輯回歸做一個地鐵上是否讓座的模型。其中一個特征值是年齡。
邏輯回歸的方程是p=11+e?wxp=\dfrac{1}{1+e^{-wx}}p=1+e?wx1?
一般情況下當(dāng)遇到小寶寶或者老人會讓座。上面的函數(shù)中,假設(shè)w為正,x越大,p越大。這樣的話,就不能覆蓋年齡小的情況。假設(shè)w為負,x越小,p越大,這樣的話,就不能覆蓋年齡大的情況。
這個時候,我們就需要對年齡做離散化。這是因為我們沒有對特征做進一步的細分。我們可以分為[0,6],[6-60],[60]三個特征。三個特征,三個權(quán)重,可以各自調(diào)整不受制約。
再補充一個離散化的例子。例如在共享單車模型中,有一個特征是一星期的第幾天。通過觀察我們發(fā)現(xiàn)周一到周五會有兩個使用高峰期,周六周日是一個使用高峰期。為了將這個特點描述出來,我們就需要對這個特征做離散化,分為兩類:工作日和周末。
接著說明怎么做離散化,分割的標準點在哪里。
一種方法是等距切分。例如要分10分,最大值和最小值差距是100,那就每隔10,做一次分割。pandas函數(shù)是qcut。這種情況對于分布均勻的特征值比較適合。
一種方法是將樣本平均分配到不同的桶中。pandas函數(shù)是cut。
5 柱狀分布
統(tǒng)計不同value的值的個數(shù)。例如樣本中的年齡特征:0歲的10個,5歲的10個,20的30個,24歲的1個…
2.4.2 類別型
類別型的特征,例如衣服的顏色有紅、黃、藍、綠。這就是一個類別型的特征。還有每個星期的第幾天也是類別型。
1 one-hot編碼
對于衣服的顏色有紅、黃、藍、綠,我們用什么表示呢?可以使用1、2、3、4分別表示四種顏色。但是這樣的話,當(dāng)w為正的時候,綠色比紅色對結(jié)果的影響大。當(dāng)w為負的時候,紅色筆綠色對結(jié)果的影響大。這是沒有道理的。這四種顏色應(yīng)該是平等的。
在工程中使用one-hot編碼,也稱啞變量。我們在原來的數(shù)據(jù)集后面增加4列:是否紅色、是否黃色、是否藍色、是否綠色。對于一條數(shù)據(jù)只可能在其中一列值為1,其他列值為0。
2 hash技巧
例如在每一篇新聞中會出現(xiàn)很多詞。整個數(shù)據(jù)集中會有很多詞。每一遍文章中出現(xiàn)的詞置為1。
這樣處理的問題是矩陣是稀疏的,維度很高。可以使用hash桶的技巧。在數(shù)據(jù)集對每篇新聞做了分類,我們可以得到每個分類的詞匯集合。例如可以知道財經(jīng)類新聞、體育類新聞、娛樂類新聞的詞匯集。一篇文章中出現(xiàn)的詞屬于哪個桶就在這個桶的value值+1。
例如doc1,在財經(jīng)類新聞集中出現(xiàn)了3個詞匯,體育類中出現(xiàn)了2個詞匯。
3 histogram映射
例如數(shù)據(jù)集中的愛好有:足球、散步、看電視劇。這個愛好在性別中的分布是怎樣的呢?
男:[1/3,2/3,0] 女:[0,1/3,2/3]
這個愛好在年齡中的分布是怎樣的呢?
21:[1,0,0] 22:[0,0,1]…
得到這些數(shù)據(jù)之后怎么用呢?例如愛好在性別中的分布,得到之后,在原數(shù)據(jù)集后, 增加6列:足球男性分布、散步男性分布、看電視劇男性分布、足球女性分布、散步女性分布、看電視劇女性分布。每一條數(shù)據(jù)的這6個值都等于:1/3,2/3,0,0,1/3,2/3。這樣的特征可能對于模型有作用,但不一定。
2.4.3 時間型
時間型特征可以看做連續(xù)值,也可以看做是離散值。
如果計算的是持續(xù)時間(單頁面瀏覽時長)、間隔時長(上次購買/點擊離現(xiàn)在的時長)的時候是連續(xù)值。
離散值對應(yīng)的特征:
年
月
一年中第幾個星期
一年中第幾個季度
一月中第幾個星期
一天中的哪個時段
一周的第幾天
工作日/周末
距離節(jié)假日的天數(shù)
2.4.3 文本型
1 詞袋模型
CounterVectorizer()
得到一個稀疏向量
2 n-gram
解決 李雷喜歡韓梅梅 韓梅梅喜歡李雷 這種詞的位置關(guān)系問題
CounterVectorizer(ngram_range=(1,2),token_pattern=’\b\w+\b’,min_df=1)
3 tf-idf
TF(t)=詞t在當(dāng)前文本中的出現(xiàn)次數(shù)詞t在總數(shù)據(jù)集中的出現(xiàn)次數(shù)TF(t)=\dfrac{詞t在當(dāng)前文本中的出現(xiàn)次數(shù)}{詞t在總數(shù)據(jù)集中的出現(xiàn)次數(shù)}TF(t)=詞t在總數(shù)據(jù)集中的出現(xiàn)次數(shù)詞t在當(dāng)前文本中的出現(xiàn)次數(shù)?
IDF(t)=ln(總文檔數(shù)含t的文檔數(shù))IDF(t)=ln(\dfrac{總文檔數(shù)}{含t的文檔數(shù)})IDF(t)=ln(含t的文檔數(shù)總文檔數(shù)?)
TF?IDF=TD(t)?IDF(t)TF-IDF=TD(t)*IDF(t)TF?IDF=TD(t)?IDF(t)
3 word2vec
得到一個稠密向量
2.4.4 統(tǒng)計特征
例如在判斷用戶是否會購買的模型中:
1 購物車轉(zhuǎn)換率=>用戶維度的統(tǒng)計特征
2 對不同商品點擊/收藏/購買的總計=>商品維度的特征
3 刪除掉30天內(nèi)從來不買東西的人=>按規(guī)則清洗
…
統(tǒng)計特征主要包含有:
1 加減平均:例如商品高于平均價多少,用戶連續(xù)登陸天數(shù)超過平均值多少…
2 分位線:商品價格位于售出商品價格的多少分位線
3 次序性:排在第幾位
4 比例類:電商中,好中差評的比例
組合特征
組合特征是把任意兩個特征拼接在一起。只有這一條數(shù)據(jù)中兩個特征都為1,這個值才為1,否則為0。
例如隨意組合兩個特征:用戶id_category: 1001_女裙,1001_男士牛仔褲,1002_男士牛仔褲??
也可以通過決策樹學(xué)出一棵樹模型,按照樹模型中的全部或者部分路徑做組合。
例如組合特征是:男士_上海,男士_北京,女士_上?!?/p>
3 特征選擇
3.1 為什么做特征選擇
因為有些特征是冗余的,有幾個特征之間相關(guān)度很高,消耗計算資源。
有些特征是噪聲,對結(jié)果沒有影響或者產(chǎn)生不好的影響。
特征選擇不同于降維:特征選擇是踢掉原本特征中和結(jié)果預(yù)測關(guān)系不大的,而降維是做特征的計算組合構(gòu)成新的特征。
降維確實也能解決一定的高緯度的問題。
3.2 特征選擇的方法
3.2.1 過濾型
評估單個特征和結(jié)果之間的相關(guān)度,留下Top 相關(guān)的特征部分。
可以使用pearson相關(guān)系數(shù)、互信息等測量相關(guān)度。
缺點:是沒有考慮到特征之間的關(guān)聯(lián)作用,可能把有用的關(guān)聯(lián)特征過濾掉。
相關(guān)python包:SelectKBest
3.2.2 包裹型
典型的包裹型算法是遞歸特征刪除算法(recursive feature elimination algorithm)
具體做法是:
1 用全量特征跑一個模型
2 根據(jù)線性模型的系數(shù),刪掉5-10%的特征,再跑一次,觀測準確率的變化。
3 如果準確率沒有明顯變化,重復(fù)2。如果有大的下滑就停止。
相關(guān)python包:sklearn.feature_selection.RFE
這用在稠密矩陣中效果比較好。
3.2.3 嵌入型
最常見的方式是用正則化來做特征選擇。
在LR模型中,L1正則化能夠起到截斷作用。在3-5億維度的模型中,用L1正則化最后可以剩下2-3千萬的維度。意味著其他維度都不重要。
這在LR和線性SVM中都起作用。
在這稀疏矩陣中效果比較好。
第二種和第三種方法用的比較多。
總結(jié)
以上是生活随笔為你收集整理的第五课 机器学习中的特征工程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关系数据库SQL之可编程性函数(用户自定
- 下一篇: LeetCode c语言解题思路+答案代