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