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)文章
python mysql實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python mysql實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10詳解Python用三種方式統(tǒng)計(jì)詞頻的方法
這篇文章主要介紹了Python用三種方式統(tǒng)計(jì)詞頻,每種方法給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-07-07Python實(shí)現(xiàn)字典按照value進(jìn)行排序的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)字典按照value進(jìn)行排序的方法,結(jié)合實(shí)例形式分析了Python字典按照value進(jìn)行排序的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12使用PySpark實(shí)現(xiàn)數(shù)據(jù)清洗與JSON格式轉(zhuǎn)換的實(shí)踐詳解
在大數(shù)據(jù)處理中,PySpark?提供了強(qiáng)大的工具來處理海量數(shù)據(jù),特別是在數(shù)據(jù)清洗和轉(zhuǎn)換方面,本文將介紹如何使用?PySpark?進(jìn)行數(shù)據(jù)清洗,并將數(shù)據(jù)格式轉(zhuǎn)換為?JSON?格式的實(shí)踐,感興趣的可以了解下2023-12-12對(duì)python pandas中 inplace 參數(shù)的理解
這篇文章主要介紹了對(duì)python pandas中 inplace 參數(shù)的理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python實(shí)現(xiàn)PS圖像調(diào)整之對(duì)比度調(diào)整功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)PS圖像調(diào)整之對(duì)比度調(diào)整功能,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)PS圖像對(duì)比度調(diào)整的原理、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下2018-01-01