一日一学--如何对数值型特征进行分桶
點擊上方“算法猿的成長“,關注公眾號,選擇加“星標“或“置頂”
總第 120 篇文章,本文大約 1200 字,閱讀大約需要 3?分鐘
今天這篇文章主要是介紹在特征工程中,對數值型特征進行分桶操作的方法。
簡介
分桶是離散化的常用方法,將連續型特征離線化為一系列 0/1 的離散特征;
當數值特征跨越不同的數量級的時候,模型可能會只對大的特征值敏感,這種情況可以考慮分桶操作。
分桶操作可以看作是對數值變量的離散化,之后通過二值化進行 one-hot 編碼。
分桶的數量和寬度可以根據業務領域的經驗來指定,但也有一些常規的做法:
等距分桶。每個桶的寬度是固定的,即值域范圍是固定的,比如是 0-99,100-199,200-299等;這種適合樣本分布比較均勻的情況,避免出現有的桶的數量很少,而有的桶數量過多的情況;
等頻分桶,也稱為分位數分桶。也就是每個桶有一樣多的樣本,但可能出現數值相差太大的樣本放在同個桶的情況;
模型分桶。使用模型找到最佳分桶,比如聚類,將特征分成多個類別,或者樹模型,這種非線性模型天生具有對連續型特征切分的能力,利用特征分割點進行離散化。
分桶的優點:
分桶后得到的稀疏向量,內積乘法運算速度更快,計算結果更方便存儲;
對異常數據有很強的魯棒性
需要注意的是:
要讓桶內的屬性取值變化對樣本標簽的影響基本在一個不大的范圍,即不能出現單個桶內,樣本標簽輸出變化很大的情況;
每個桶內都有足夠的樣本,如果樣本太少,隨機性太大,不具有統計意義上的說服力;
每個桶內的樣本進行分布均勻;
等距分桶
對于等距分桶的操作:
當數字跨越多個數量級時,最好用10個冪(或任何常數的冪)來分組:0-9、10-99、100-999、100-9999等。
容器寬度呈指數增長,從O(10)、O(100)到O(1000)和以上。要從計數映射到bin,取計數的log值。
對數變換是處理具有重尾分布的正數的有力工具。(重尾分布在尾部范圍內的概率比高斯分布的概率大)。它將分布在高端的長尾壓縮成較短的尾部,并將低端擴展成較長的頭部。
下面是展示的代碼例子:
數值較少的例子:
import numpy as np # 生成 20 個 0-99 之間的隨機整數 small_counts?=?np.random.randint(0,?100,?20)# 進行分箱操作, 通過對數據除以 10 分到 0-9 總共 9 個箱里, # 返回的結果就是對應數據應該劃分到的箱的編號 np.floor_divide(small_counts,?10)數據之間的間隔較大的例子:
# 構造一個間隔更大的數組例子,可以通過取對數 log10 來進行分箱 large_counts = [296, 8286, 64011, 80, 3, 725, 867, 2215, 7689, 11495, 91897, 44, 28, 7971, 926, 122, 22222] np.floor(np.log10(large_counts))等頻分桶
對于等頻分桶,也稱為按分位數分桶,為了計算分位數和映射數據到分位數箱,我們可以使用 Pandas 庫。pandas.DataFrame.quantile 和 pandas.Series.quantile 用于計算分位數。pandas.qcut 將數據映射到所需數量的分位數。
代碼例子如下:
large_counts = [296, 8286, 64011, 80, 3, 725, 867, 2215, 7689, 11495, 91897, 44, 28, 7971, 926, 122, 22222] # 將數據映射到所需數量的分位數 pd.qcut(large_counts, 4, labels=False) # 計算指定分位數點的數據 large_counts_series = pd.Series(large_counts) large_counts_series.quantile([0.25,?0.5,?0.75])參考文章:
淺談微視推薦系統中的特征工程
http://fe4ml.apachecn.org/#/docs/2.簡單數字的奇特技巧
精選AI文章
1.?機器學習入門學習資料推薦
2.初學者的機器學習入門實戰教程!
3.常用機器學習算法匯總比較(完)
4.特征工程之數據預處理(上)
5.實戰|手把手教你訓練一個基于Keras的多標簽圖像分類器
精選python文章
1.?Python 基礎入門--簡介和環境配置
2.?python版代碼整潔之道
3.?快速入門 Jupyter notebook
4.?Jupyter 進階教程
5.?10個高效的pandas技巧
精選教程資源文章
1.?[資源分享] TensorFlow 官方中文版教程來了
2.?[資源]推薦一些Python書籍和教程,入門和進階的都有!
3.?[Github項目推薦] 推薦三個助你更好利用Github的工具
4.?Github上的各大高校資料以及國外公開課視頻
5.?GitHub上有哪些比較好的計算機視覺/機器視覺的項目?
歡迎關注我的微信公眾號--算法猿的成長,或者掃描下方的二維碼,大家一起交流,學習和進步!
?如果覺得不錯,在看、轉發就是對小編的一個支持!
總結
以上是生活随笔為你收集整理的一日一学--如何对数值型特征进行分桶的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库:SQL 语法速成手册,建议新手收
- 下一篇: 高并发 多线程批量ping工具 nbpi