離散化是將多個連續型數值分箱成較少組別,進行離散化的主要原因有以下幾點:
We convert continuous variables into discrete values by binning them into groups to:
等寬劃分 - 依相同寬度將資料分組,每份的間距相等。ex: 每10歲分一組。
等頻劃分 - 將資料均勻分成幾等份,每份的觀察點數相同。ex: 分為10組。
聚類劃分 - 使用聚類演算法將資料聚類劃分。
Binning by same deviation.
Binning by numbers of data in a bin.
Cluster data then bin.
'('表示不包含、']'表示包含。
'(' are included, ']' are not included.
# 載入套件 import packages
import pandas as pd
# 創建一些資料 create some data
ages = pd.DataFrame({"age": [18, 22, 25, 27, 7, 21, 23, 37, 30, 61, 45, 13, 11, 5, 2, 41, 9, 18, 80, 100]})
# 新增欄位對年齡做等寬劃分 create new column with the same width of age
ages["equal_width"] = pd.cut(ages["age"], 5)
print(ages["equal_width"])
# 觀察等寬劃分下各出現次數 count the amount of each bin
ages["equal_width"].value_counts() # 每個bin的範圍大小是一樣的 the range of each bin is the same
# 新增欄位做等頻劃分 create new column with the same amount of data in each bin
ages["equal_freq"] = pd.qcut(ages["age"], 5)
print(ages["equal_freq"])
# 觀察等頻劃分下各組距各出現幾次 count
ages["equal_freq"].value_counts() # 每個bin的資料筆數是一樣的 each bin contains same amount of data
ages["exact_bins"] = pd.cut(ages["age"], bins=(0,10,20,30,50,100)) # 具體指定bin的劃分 specify bins
print(ages["exact_bins"])
# 具體指定bins的劃分 count amount in each specified bin
ages["exact_bins"].value_counts().sort_index() # 指定的bins gouped by specified bins
本篇程式碼請參考Github。The code is available on Github.
文中若有錯誤還望不吝指正,感激不盡。
Please let me know if there’s any mistake in this article. Thanks for reading.
Reference 參考資料:
[1] 第二屆機器學習百日馬拉松內容
[2] Continuous or discrete Variable
[3] 连续特征的离散化
[4] 特征离散化