python實現(xiàn)數(shù)據(jù)挖掘中分箱的示例代碼
數(shù)據(jù)分箱(英語:Data binning)是一種數(shù)據(jù)預(yù)處理方法,用于最大限度地減少小觀測誤差的影響。原始數(shù)據(jù)值被劃分為稱為bin的小區(qū)間,然后用為該bin計算的一般值替換它們。這對輸入數(shù)據(jù)具有平滑效果,并且在小數(shù)據(jù)集的情況下還可以減少過擬合的機會。
有兩種常見方法可以將數(shù)據(jù)劃分到箱中:
等頻分箱:分箱具有相等的頻率,每個區(qū)間包含大致相等的實例數(shù)量。
等寬分箱:分箱具有等寬,每個分箱的范圍被定義為[min + w],[min +2 w], [min + n w],
其中w = (max – min)/(箱數(shù))。
示例
等頻分箱
Input:[5, 10, 11, 13, 15, 35, 50, 55, 72, 92, 204, 215]
Output:
[5, 10, 11, 13]
[15, 35, 50, 55]
[72, 92, 204, 215]
等寬分箱
Input: [5, 10, 11, 13, 15, 35, 50, 55, 72, 92, 204, 215]
Output:
[5, 10, 11, 13, 15, 35, 50, 55, 72]
[92]
[204, 215]
分箱方法的Python實現(xiàn)
# equal frequency
def equifreq(arr1, m):
a = len(arr1)
n = int(a / m)
for i in range(0, m):
arr = []
for j in range(i * n, (i + 1) * n):
if j >= a:
break
arr = arr + [arr1[j]]
print(arr)
# equal width
def equiwidth(arr1, m):
a = len(arr1)
w = int((max(arr1) - min(arr1)) / m)
min1 = min(arr1)
arr = []
for i in range(0, m + 1):
arr = arr + [min1 + w * i]
arri=[]
for i in range(0, m):
temp = []
for j in arr1:
if j >= arr[i] and j <= arr[i+1]:
temp += [j]
arri += [temp]
print(arri)
# data to be binned
data = [5, 10, 11, 13, 15, 35, 50, 55, 72, 92, 204, 215]
# no of bins
m = 3
print("equal frequency binning")
equifreq(data, m)
print("\n\nequal width binning")
equiwidth(data, 3)
輸出
equal frequency binning
[5, 10, 11, 13]
[15, 35, 50, 55]
[72, 92, 204, 215]
equal width binning
[[5, 10, 11, 13, 15, 35, 50, 55, 72], [92], [204, 215]]
優(yōu)缺點
等頻分箱
優(yōu)點:
能夠處理數(shù)據(jù)分布不均勻的情況,可以更好地利用數(shù)據(jù)的整體分布。
對于某些需要平衡數(shù)據(jù)分布的場景,等頻分箱可以更好地保證數(shù)據(jù)的代表性。
缺點:
對于某些數(shù)據(jù)范圍較大的特征,等頻分箱可能會導(dǎo)致一些箱子中的數(shù)據(jù)范圍過大或過小的問題。
等頻分箱需要更多的計算資源,因為需要對每個可能的值進行計數(shù),然后找到每個箱子中的中位數(shù)。
等寬分箱
優(yōu)點:
易于理解和實現(xiàn),根據(jù)業(yè)務(wù)理解,可快速對數(shù)據(jù)進行初步的劃分。
對于異常值,等寬分箱可以將其放入單獨的箱子,從而更好地保護數(shù)據(jù)隱私。
缺點:
對于數(shù)據(jù)分布不均勻的情況,可能會存在數(shù)據(jù)分布過于傾斜,導(dǎo)致某些箱子中的數(shù)據(jù)過多或過少的問題。
這種方法忽略了數(shù)據(jù)的具體取值范圍,可能導(dǎo)致一些重要的細節(jié)被忽略。
總的來說,選擇等頻分箱還是等寬分箱,需要根據(jù)實際的數(shù)據(jù)分布和業(yè)務(wù)需求來決定。
到此這篇關(guān)于python實現(xiàn)數(shù)據(jù)挖掘中分箱的示例代碼的文章就介紹到這了,更多相關(guān)python數(shù)據(jù)分箱內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
matplotlib.subplot()畫子圖并共享y坐標軸的方法
Matplotlib的可以把很多張圖畫到一個顯示界面,本文主要介紹matplotlib.subplot()畫子圖并共享y坐標軸的方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
如何將python項目放到已存在的conda環(huán)境
從PyCharm社區(qū)版升級到專業(yè)版后,需要重新配置conda環(huán)境,在設(shè)置中添加conda解釋器,可以通過選擇conda執(zhí)行文件并顯示所有已有的Python解釋器來實現(xiàn),使用conda環(huán)境時,建議使用該環(huán)境自帶的python.exe2026-02-02
Python基于Tkinter的HelloWorld入門實例
這篇文章主要介紹了Python基于Tkinter的HelloWorld入門實例,以一個簡單實例分析了Python中Tkinter模塊的使用技巧,需要的朋友可以參考下2015-06-06
Python+Selenium實現(xiàn)短視頻自動上傳與發(fā)布的實踐
本文主要介紹了Python+Selenium實現(xiàn)短視頻自動上傳與發(fā)布的實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Python將list元素轉(zhuǎn)存為CSV文件的實現(xiàn)
這篇文章主要介紹了Python將list元素轉(zhuǎn)存為CSV文件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

