数据挖掘中的分箱和python实现

本文介绍了数据分箱(Databinning)作为数据预处理技术,探讨了等频分箱和等宽分箱两种方法,包括其原理、Python实现以及各自的优缺点,强调了根据数据分布和业务需求选择合适方法的重要性。
摘要由CSDN通过智能技术生成

数据分箱(英语:Data binning)是一种数据预处理方法,用于最大限度地减少小观测误差的影响。原始数据值被划分为称为bin的小区间,然后用为该bin计算的一般值替换它们。这对输入数据具有平滑效果,并且在小数据集的情况下还可以减少过拟合的机会。

有两种常见方法可以将数据划分到箱中:

  • 等频分箱:分箱具有相等的频率,每个区间包含大致相等的实例数量。
  • 等宽分箱:分箱具有等宽,每个分箱的范围被定义为[min + w],[min +2 w], [min + n w],
    其中w = (max – min)/(箱数)。

示例

等频分箱

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实现

# 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]] 

优缺点

等频分箱

优点:

  1. 能够处理数据分布不均匀的情况,可以更好地利用数据的整体分布。
  2. 对于某些需要平衡数据分布的场景,等频分箱可以更好地保证数据的代表性。

缺点:

  1. 对于某些数据范围较大的特征,等频分箱可能会导致一些箱子中的数据范围过大或过小的问题。
  2. 等频分箱需要更多的计算资源,因为需要对每个可能的值进行计数,然后找到每个箱子中的中位数。

等宽分箱

优点:

  1. 易于理解和实现,根据业务理解,可快速对数据进行初步的划分。
  2. 对于异常值,等宽分箱可以将其放入单独的箱子,从而更好地保护数据隐私。

缺点:

  1. 对于数据分布不均匀的情况,可能会存在数据分布过于倾斜,导致某些箱子中的数据过多或过少的问题。
  2. 这种方法忽略了数据的具体取值范围,可能导致一些重要的细节被忽略。

总的来说,选择等频分箱还是等宽分箱,需要根据实际的数据分布和业务需求来决定。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值