一日一學--如何對數值型特徵進行分桶

點擊上方“算法猿的成長“,關注公衆號,選擇加“星標“或“置頂”

總第 120 篇文章,本文大約 1200 字,閱讀大約需要 3 分鐘

今天這篇文章主要是介紹在特徵工程中,對數值型特徵進行分桶操作的方法。


簡介

分桶是離散化的常用方法,將連續型特徵離線化爲一系列 0/1 的離散特徵;

當數值特徵跨越不同的數量級的時候,模型可能會只對大的特徵值敏感,這種情況可以考慮分桶操作。

分桶操作可以看作是對數值變量的離散化,之後通過二值化進行 one-hot 編碼。

分桶的數量和寬度可以根據業務領域的經驗來指定,但也有一些常規的做法:

  1. 等距分桶。每個桶的寬度是固定的,即值域範圍是固定的,比如是 0-99,100-199,200-299等;這種適合樣本分佈比較均勻的情況,避免出現有的桶的數量很少,而有的桶數量過多的情況;

  2. 等頻分桶,也稱爲分位數分桶。也就是每個桶有一樣多的樣本,但可能出現數值相差太大的樣本放在同個桶的情況;

  3. 模型分桶。使用模型找到最佳分桶,比如聚類,將特徵分成多個類別,或者樹模型,這種非線性模型天生具有對連續型特徵切分的能力,利用特徵分割點進行離散化。

分桶的優點

  • 分桶後得到的稀疏向量,內積乘法運算速度更快,計算結果更方便存儲;

  • 對異常數據有很強的魯棒性

需要注意的是

  • 要讓桶內的屬性取值變化對樣本標籤的影響基本在一個不大的範圍,即不能出現單個桶內,樣本標籤輸出變化很大的情況;

  • 每個桶內都有足夠的樣本,如果樣本太少,隨機性太大,不具有統計意義上的說服力;

  • 每個桶內的樣本進行分佈均勻;

等距分桶

對於等距分桶的操作:

  • 當數字跨越多個數量級時,最好用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.quantilepandas.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])

參考文章:



精選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上有哪些比較好的計算機視覺/機器視覺的項目?

歡迎關注我的微信公衆號--算法猿的成長,或者掃描下方的二維碼,大家一起交流,學習和進步!

 

如果覺得不錯,在看、轉發就是對小編的一個支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章