数据挖掘中的分箱和python实现
2024-01-01 20:33:11
数据分箱(英语: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]]
优缺点
等频分箱
优点:
- 能够处理数据分布不均匀的情况,可以更好地利用数据的整体分布。
- 对于某些需要平衡数据分布的场景,等频分箱可以更好地保证数据的代表性。
缺点:
- 对于某些数据范围较大的特征,等频分箱可能会导致一些箱子中的数据范围过大或过小的问题。
- 等频分箱需要更多的计算资源,因为需要对每个可能的值进行计数,然后找到每个箱子中的中位数。
等宽分箱
优点:
- 易于理解和实现,根据业务理解,可快速对数据进行初步的划分。
- 对于异常值,等宽分箱可以将其放入单独的箱子,从而更好地保护数据隐私。
缺点:
- 对于数据分布不均匀的情况,可能会存在数据分布过于倾斜,导致某些箱子中的数据过多或过少的问题。
- 这种方法忽略了数据的具体取值范围,可能导致一些重要的细节被忽略。
总的来说,选择等频分箱还是等宽分箱,需要根据实际的数据分布和业务需求来决定。
文章来源:https://blog.csdn.net/qq_42034590/article/details/134063392
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!