特征工程常用方法總結
類別型特征
Onehot encoding
-
長度為K的數組上的一個K編碼。
-
基本方法:與大多數線性算法一起使用
-
刪除第一列可避免共線性
-
稀疏格式對內存友好
-
大多數當前實現都不能優雅地處理缺失的、看不見的變量
例子:
Hash encoding
-
“OneHot-encoding”是否具有固定長度的數組
-
避免極其稀疏的數據
-
可能會引入碰撞
-
可以重復使用不同的散列函數和包結果,以獲得精確的小凹凸
-
碰撞通常會降低結果,但可能會改善結果。
-
優雅地處理新變量
例子:
Label encoding
-
為每個分類變量提供唯一的數字ID
-
適用於非線性基於樹的算法
-
不增加維度
-
隨機化cat_var - > num_id映射並重新訓練平均值,以獲得精確度較小的凹凸。
例子:
Count encoding
-
將分類變量替換為訓練集中的計數
-
對線性和非線性算法都很有用
-
可以對異常值敏感
-
可以添加對數轉換,適用於計數
-
用“1”替換看不見的變量
-
可能會發生沖突:相同的編碼,不同的變量
例子:
LabelCount encoding
-
按訓練集中的計數對分類變量進行排名
-
對線性和非線性算法都很有用
-
對異常值不敏感
-
不會對不同的變量賦予相同的編碼
-
兩全其美
例子:
Target encoding
-
通過目標比率(二進制分類或回歸)對分類變量進行編碼
-
小心避免過擬合
-
stacking形式:輸出平均目標的單變量模型
-
以交叉驗證方式進行
-
添加平滑以避免將變量編碼設置為0。
-
添加隨機噪音以對抗過擬合
-
正確應用時:線性和非線性的最佳編碼
例子:
Category Embedding
-
使用神經網絡從分類變量創建密集嵌入。
-
將函數逼近問題中的分類變量映射到歐幾裏德空間
-
更快的模型培訓。
-
減少內存開銷。
-
可以提供比one-hot編碼更好的準確度。
例子:
NaN encoding
-
為NaN值提供顯式編碼而不是忽略
-
NaN值可以保存信息
-
小心避免過擬合
-
僅在訓練和測試集中的NaN值由相同的情況引起時,或者在本地驗證證明其攜帶信號時使用
例子:
Polynomial encoding
-
編碼分類變量之間的交互
-
沒有交互的線性算法無法解決XOR問題
-
多項式內核*可以*解決異或
-
爆炸特征空間:使用FS,散列和/或VW
例子:
Expansion encoding
-
從單個變量創建多個分類變量
-
某些高基數功能(如用戶代理)在其中包含更多信息:
-
is_mobile?
-
is_latest_version?
-
Operation_system
-
Browser_build
例子:
Consolidation encoding
-
將不同的分類變量映射到同一個變量
-
拼寫錯誤,略有不同的職位描述,全名與縮寫
-
真實數據很亂,free文本尤其如此
例子:
數值型特征
-
可以更容易地輸入算法
-
可以構成浮點數、計數、數字
-
更容易估算丟失的數據
Rounding
-
取整值變量
-
有損壓縮形式:保留數據的最重要特征。
-
有時太精確只是噪音
-
取整變量可視為分類變量
-
可以在舍入之前應用對數變換
例子:
Binning
-
將數值變量放入bin中並使用bin-ID進行編碼
-
可以通過分位數,均勻地設置分箱,或使用模型來查找最佳分箱
-
可以使用訓練集中看到的範圍之外的變量優雅地工作
例子:
Scaling
-
將數值變量縮放到一定範圍內
-
Standard (Z) Scaling
-
MinMax Scaling
-
Root scaling
-
Log scaling
Imputation
-
估算缺失的變量
-
硬編碼可與插補相結合
-
均值:非常基本
-
中位數:對異常值更強大
-
忽略:只是推遲問題
-
使用模型:可以暴露算法偏差
例子:
Interaction
-
具體編碼數值變量之間的相互作用
-
嘗試:減少,增加,乘法,分裂
-
使用:通過統計測試選擇特征,或訓練模型特征重要性
-
忽略:人類的直覺; 奇怪的互動可以帶來顯著的改善!
Non-linear encoding for linear algo’s
-
硬編碼非線性以改進線性算法
-
多項式內核
-
葉編碼(隨機森林嵌入)
-
遺傳算法
-
局部線性嵌入,光譜嵌入,t-SNE
Row statistics
-
創建一行數據的統計信息
-
NaN的數量
-
0的數量
-
負值的數量
-
平均值,最大值,最小值,偏差等
Temporal Variables
-
時間變量,如日期,需要更好的本地驗證方案(如回測)
-
這裏容易犯錯誤
-
大量改進的機會
Projecting to a circle
-
將單個要素(如day_of_week)轉換為圓上的兩個坐標
-
確保max和min之間的距離與min和min +1相同。
-
用於day_of_week,day_of_month,hour_of_day等。
Trendlines
-
不是編碼:總支出,編碼如下:上周花費,上個月花費,去年花費。
-
給出算法的趨勢:兩個支出相同的客戶可能會有截然不同的行為,一個客戶可能開始花費更多,而另一個客戶開始減少支出。
Closeness to major events
-
硬編碼分類特征如:date_3_days_before_holidays:1
-
嘗試:國定假日,重大體育賽事,周末,每月第一個星期六等。
-
這些因素可能對支出行為產生重大影響。
Spatial Variables
-
空間變量是編碼空間位置的變量
-
示例包括:GPS坐標,城市,國家/地區
Categorizing location
-
Kriging
-
K-means聚類
-
原始緯度經度
-
將城市轉換為緯度經度
-
將郵政編碼添加到街道名稱
Closeness to hubs
-
找到位置與主要樞紐之間的緊密程度
-
小城鎮繼承了附近大城市的一些文化/背景
-
電話位置可以映射到附近的企業和超市
Spatial fraudulent behavior
-
位置事件數據可以指示可疑行為
-
不可能的旅行速度:不同國家的多個同步交易
-
在不同的城鎮消費,而不是在家或運送地址
-
永遠不要在同一個地方消費
Exploration
-
數據探索可以找到數據完整問題、異常值、噪聲、特征工程思想、特征清理思路。
-
可以使用:控制臺,筆記本電腦,pandas
-
嘗試簡單的統計數據:最小值,最大值
-
合並目標,找到信號之間的相關性。
Iteration/Debugging
-
特征工程是一個叠代過程:使您的pipelines適合快速叠代。
-
使用子線性調試:輸出有關過程的中間信息,進行虛假記錄。
-
使用允許快速實驗的工具
-
更多的想法會失敗,而不是想法會起作用
Label Engineering
-
可以將標簽/目標/因變量視為數據的一個特征,反之亦然。
-
對數變換:y - > log(y + 1)| exp(y_pred) - 1
-
方形變換
-
Box-Cox變換
-
創建分數,在回歸中轉換二進制目標。
-
訓練回歸器以預測測試集中不可用的特征。
自然語言處理
-
可以使用來自分類特征的相同想法。
-
深度學習(自動特征工程)越來越多地進入這一領域,但具有精心設計的特征的淺層學習仍具有競爭力。
-
數據中的高稀疏性向您介紹“維度的詛咒”
-
特征工程的許多機會
Cleaning
-
Lowercasing:使token獨立於大寫:“I work at NASA” -> “i work at nasa”.
-
Unidecode:將重音符號轉換為ascii-對應詞:“MemóriasPóstumasdeBrásCubas” - >“Memorias Postumas de Bras Cubas”
-
刪除非字母數字:刪除不在[a-z] [A-Z] [0-9]中的任何內容來清除文本。“Breaking! Amsterdam (2009)” -> “Breaking Amsterdam 2009”
-
修復:修復編碼問題或修剪內部token空格。 “Casa Café” - >“CasaCafé”
Tokenizing
-
編碼標點符號:硬編碼“!”和“?”作為標記。
-
Tokenize:在單詞標記中填寫句子。
-
N-Grams:將連續的令牌編碼為token:“I like the Beatles” -> [“I like”, “like the”, “the Beatles”]
-
Skip-gram:編碼連續的令牌,但跳過一些:“I like the Beatles” -> [“I the”, “like Beatles”]
-
Char-gram:與N-gram相同,但字符級別:“Beatles” - > [“Bea”,“eat”,“atl”,“tle”,“les”]
-
詞綴:與char-gram相同,但僅限於後綴和前綴
Removing
-
停用詞:刪除停用詞列表中顯示的單詞/標記。
-
稀有詞語:刪除僅在訓練集中出現幾次的單詞。
-
常用詞:刪除可能不在禁用詞列表中的極其常見的詞。
Roots
-
拼寫糾正:將token更改為正確的拼寫。
-
Chop:只取一個單詞的前n(8)個字符。
-
詞幹:將詞/標記減少到其根目錄。 “cars” -> “car”
-
Lemmatize:找到語義根“never be late” -> “never are late”
Enrich
-
文檔功能:計算空格,制表符,換行符,字符,標記等的數量。
-
實體插入:在文本“Microsoft releases Windows” -> “Microsoft (company) releases Windows (application)”中添加更多通用規範
-
解析樹:將句子解析為邏輯形式:“Alice hits Bill” -> Alice/Noun_subject hits/Verb Bill/Noun_object.
-
閱讀級別:計算文檔的閱讀級別。
Similarities
-
token相似性:計算出現在兩個文本中的token數。
-
壓縮距離:查看是否可以使用其他文本更好地壓縮一個文本。
-
Levenshtein / Hamming / Jaccard Distance:通過查看將一個字符串轉換為另一個字符串所需的操作數來檢查兩個字符串之間的相似性。
-
Word2Vec / Glove:檢查兩個平均向量之間的余弦相似性。
TF-IDF
-
詞語頻率:減少對長文檔的偏差。
-
反向文檔頻率:減少對常用token的偏差。
-
TF-IDF:用於標識文檔中最重要的token,刪除不重要的token,或用作降低維數的預處理步驟。
降維
-
PCA:將文本縮小為50或100維向量。
-
SVD:將文本縮小為50或100維向量。
-
LDA:TF-IDF,然後是SVD。
-
LSA:創建主題向量。
External models
-
情感分析:為任何文本獲取負面或正面情緒的向量。
-
主題模型:使用其他數據集為新數據集創建主題向量。
神經網絡 & 深度學習
-
神經網絡聲稱端到端自動特征工程。
-
特色工程死亡領域?
-
將重點轉移到架構工程
-
計算機視覺使用的功能包括:HOG,SIFT,白化,擾動,圖像金字塔,旋轉,z縮放,對數縮放,幀格式,外部語義數據等。
Leakage / Golden Features
-
特征工程可以幫助利用泄漏。
-
逆向工程
-
使用彩虹表反轉MD5哈希。
-
將TF-IDF反轉回詞語頻率
-
編碼樣本數據集的順序。
-
編碼文件創建日期。
-
規則挖掘:查找簡單規則(並對其進行編碼)以幫助模型。
特征工程常用方法總結