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

