• 一文带你了解”数据分箱“技术


    一文带你了解”数据分箱“技术

    引言:什么是分箱

    分箱就是把数据特定的规则进行分组,实现数据的离散化,增强数据稳定性,减少过拟合风险。逻辑回归中进行分箱是非常必要的,其他树模型可以不进行分箱。

    01.数据分箱

    数据分箱(Binning)作为数据预处理的一部分,也被称为离散分箱或数据分段。其实分箱的概念其实很好理解,它的本质上就是把数据进行分组

    我们以下面数据为例,左边是原始数据,右边是分箱后的数据:

    英雄昵称(原始数据)从属类型(分箱后)
    不知火舞法师
    后羿射手
    公孙离射手
    妲己法师
    庄周辅助
    张飞辅助
    马可波罗射手
    海月法师
    盾山辅助

    英雄字段中的数据被分到了以下的不同类型

    • 法师
    • 射手
    • 辅助
    数据分箱的好处
    • 相同数据进行遍历比较,避免了全部遍历比较
    • 大大减少了电脑IO次数,提高程序运行速度

    02.基于python实现数据分箱案例

    实现思路
    1. 先给定 last 为列表第一个数组(并存入temp列表中),将之后的数据从第二个开始与 last中的数据进行比较,如果相同存入 temp列表中。
    2. 如果数据不相同,则将 last 切换为 不同的那个数(并存入temp),并将 temp列表放入一个空列表中。

    类型一:基本数据类型比对(数字)

    代码实现
    box = [1,1,1,2,2,2,3,3,4,4,5,5,5,5,5]
    
    last = box[0]
    temp = [box[0]]
    box_list = [temp]
    
    for a in box[1::]:
        if a == last:
            temp.append(a)
        else:
            last = a
            temp = [a]
            box_list.append(temp)
    
    print(box_list) # [[1, 1, 1], [2, 2, 2], [3, 3], [4, 4], [5, 5, 5, 5, 5]]
    
    # 实现按每一个分箱列表遍历数据(而不用全部遍历)
    for boxs in box_list:
        for i in boxs:
            print(i)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    实现效果
    [1,1,1,2,2,2,3,3,4,4,5,5,5,5,5]
    
    # 输出结果为
    [[1, 1, 1], [2, 2, 2], [3, 3], [4, 4], [5, 5, 5, 5, 5]]
    
    • 1
    • 2
    • 3
    • 4

    类型二:元组类型比对

    代码实现
    box = [('法师','不知火舞', '20'),  ('辅助','张飞', '18'),('法师','妲己', '21'),
           ('辅助','钟馗', '18'),('辅助','盾山', '18'),('射手','后羿', '17',),
           ('射手','公孙离', '10',),('法师','海月', '21'),('射手','马可波罗', '10',)]
    
    last = box[0][0]
    temp = [box[0]]
    box_list = [temp]
    
    for a in box[1::]:
        if a[0] == last:
            temp.append(a)
        else:
            last = a[0]
            temp = [a]
            box_list.append(temp)
    
    print(box_list)
    
    # 实现按每一个分箱列表遍历数据(而不用全部遍历)
    for boxs in box_list:
        for i in boxs:
            print(i[0])  # 0取的英雄属性,1取英雄ID,3取使用场次
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    实现效果
    #数据分箱前:
    [('法师','不知火舞', '20'),  ('辅助','张飞', '18'),('法师','妲己', '21'),
     ('辅助','钟馗', '18'),('辅助','盾山', '18'),('射手','后羿', '17',),
     ('射手','公孙离', '10',),('法师','海月', '21'),('射手','马可波罗', '10',)]
    
    #数据分箱后:
    [[('法师', '不知火舞', '20'), ('法师', '妲己', '21'), ('法师', '海月', '21')], 
    [('辅助', '张飞', '18'), ('辅助', '钟馗', '18'), ('辅助', '盾山', '18')],
    [('射手', '后羿', '17'), ('射手', '公孙离', '10'), ('射手', '马可波罗', '10')]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    数据结构刷题训练——二叉树篇(一)
    python系列:远程SSH登录并执行命令,获取结果
    用C语言将无符号整数转换为字符串
    前后端分离项目,vue+uni-app+php+mysql在线小说电子书阅读小程序系统设计与实现
    高性能图表组件LightningChart .NET v11.0发布——增强DPI感知能力
    Linux下 mtrace工具排查内存泄露问题
    【qml】性能优化 | 常见的界面元素优化
    【第二章:Golang系列篇】Go基础-环境安装、Go程序初体验
    Java中的多线程(线程,进程,线程状态的方法,并发,并行,线程调度)
    Nacos 注册中心和配置管理的数据一致性
  • 原文地址:https://blog.csdn.net/H931053/article/details/133177460