数据的预处理是数据分析,或者机器学习训练前的重要步骤。
通过数据预处理,可以

  • 提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性
  • 整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集
  • 提高数据性能,对数据的值进行变换,规约等(比如无量纲化),让算法更加高效

本篇介绍的离散化处理,是一种数据预处理技术,用于将连续的、连续的数值型数据转换为离散的、分类的标签。
这种处理方式主要应用于一些需要转化为分类问题的数据集,如机器学习和数据挖掘中的输入变量。

1. 原理

离散化的原理主要是通过将连续的数值属性转化为离散的数值属性来实现数据的转化。

这个过程通常会采用分箱(Binning)的方法。
在分箱中,原始数据的值被分配到一些离散的、预定义的类别中,这些类别通常被称为“箱子”或“桶”,
箱子的数量和大小可以根据数据的分布和实际需求进行调整。

我们平时常用的离散化处理有两种:

1.1. 二值化处理

二值化就是根据阈值将一系列连续的数据分为两种类别。
二值化处理的实际应用场景很多,比如垃圾邮件的判定,信用卡欺诈的判定,还有各种的医疗检测结果(阴性阳性)。

使用scikit-learn中的Binarizer对数据进行二值化处理:

from sklearn import preprocessing as pp
import numpy as np data = np.random.randint(0, 100, size=(3, 3))
b = pp.Binarizer(threshold=80)
result = b.fit_transform(data) print("原始数据: {}".format(data))
print("二值化后数据: {}".format(result)) # 运行结果
原始数据:
[[12 28 84]
[ 2 18 81]
[74 92 74]] 二值化后数据:
[[0 0 1]
[0 0 1]
[0 1 0]]

Binarizer的参数threshold就是分类的阈值。
上面的例子中,threshold=80,则大于80的值为1小于等于80的值为0

1.2. K-bins处理

K-bins离散化处理则可以控制数据分成多个类别。

它在实际中的应用比如电商领域,根据用户的购买行为将用户分为不同的消费类别;在统计学习成绩时,按照成绩分为不同的等级(优/良/中/差)等等。
这些场景下,不能简单的进行二值化,需要离散化为多个分类。

对于K-bins离散化,可以使用scikit-learn中的KBinsDiscretizer

data = np.random.randint(0, 100, 10).reshape(-1, 1)
b = pp.KBinsDiscretizer(n_bins=3, encode="ordinal")
result = b.fit_transform(data) print("原始数据: {}".format(data))
print("K-bins离散化后数据: {}".format(result)) # 运行结果
原始数据: [[12]
[82]
[19]
[32]
[81]
[84]
[92]
[25]
[61]
[31]]
K-bins离散化后数据: [[0.]
[2.]
[0.]
[1.]
[2.]
[2.]
[2.]
[0.]
[1.]
[1.]]

KBinsDiscretizer的参数n_bins表示分为几类,上面的示例中设置分为了3类
另一个参数encode表示离散化后的数据编码,上面的示例中"ordinal"表示用顺序的整数来编码。

可以设置encodeonehot,使得离散化的数据变为独热编码。

2. 作用

数据离散化的主要作用有:

  1. 降低计算量和复杂度:连续的数值数据转化为离散的类别数据后,简化了数据,从而降低计算量和复杂度,特别是在处理大规模数据集时效果更为显著。
  2. 解决异常值和缺失值问题:将连续的数值数据中的异常值和缺失值进行合理的处理,从而避免对后续的影响。
  3. 提高模型的解释性:连续的数值数据转化为离散的类别数据后,使模型结果更加直观和易于解释。
  4. 克服数据中的缺陷:将连续的数值数据转化为离散的类别数据,能够有效地克服数据中隐藏的缺陷,使模型结果更加稳定。
  5. 提高算法效率和精度:将连续的数值数据进行分段,并采用优化方法进行离散化处理,从而可以提高算法的效率和精度。

当然,离散化处理简化了数据,可能会导致原始数据中的一些细节信息的丢失。
其次,离散化处理可能会引入一些主观性和不稳定性,因为分类的数量和大小通常是基于经验和实际需求进行调整的,不同的决策可能会导致不同的结果。

3. 总结

总之,关注离散化处理给我们带来的种种好处之时,在实际应用中也需要注意其局限性,如可能会造成数据的丢失和失真等问题。

因此,在具体的实践中,需要根据实际情况和需求进行合理的选择和应用。

【scikit-learn基础】--『预处理』之 离散化的更多相关文章

  1. Python基础『一』

    内置数据类型 数据名称 例子 数字: Bool,Complex,Float,Integer True/False; z=a+bj; 1.23; 123 字符串: String '123456' 元组: ...

  2. Python基础『二』

    目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...

  3. 『TensorFlow』TFR数据预处理探究以及框架搭建

    一.TFRecord文件书写效率对比(单线程和多线程对比) 1.准备工作 # Author : Hellcat # Time : 18-1-15 ''' import os os.environ[&q ...

  4. 『TensorFlow』SSD源码学习_其五:TFR数据读取&数据预处理

    Fork版本项目地址:SSD 一.TFR数据读取 创建slim.dataset.Dataset对象 在train_ssd_network.py获取数据操作如下,首先需要slim.dataset.Dat ...

  5. 『cs231n』计算机视觉基础

    线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...

  6. 『TensorFlow』专题汇总

    TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...

  7. 『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支

    下图Github地址:Mask_RCNN       Mask_RCNN_KeyPoints『计算机视觉』Mask-RCNN_论文学习『计算机视觉』Mask-RCNN_项目文档翻译『计算机视觉』Mas ...

  8. 『计算机视觉』Mask-RCNN

    一.Mask-RCNN流程 Mask R-CNN是一个实例分割(Instance segmentation)算法,通过增加不同的分支,可以完成目标分类.目标检测.语义分割.实例分割.人体姿势识别等多种 ...

  9. 『TensorFlow』SSD源码学习_其一:论文及开源项目文档介绍

    一.论文介绍 读论文系列:Object Detection ECCV2016 SSD 一句话概括:SSD就是关于类别的多尺度RPN网络 基本思路: 基础网络后接多层feature map 多层feat ...

  10. 『TensotFlow』RNN/LSTM古诗生成

    往期RNN相关工程实践文章 『TensotFlow』基础RNN网络分类问题 『TensotFlow』RNN中文文本_上 『TensotFlow』基础RNN网络回归问题 『TensotFlow』RNN中 ...

随机推荐

  1. ZooKeeper核心概念和架构

    ZooKeeper简介 ZooKeeper是一个分布式应用程序协调服务,主要用于解决分布式集群中应用系统的一致性问题.它能提供类似文件系统的目录节点树方式的数据存储,主要用途是维护和监控所存数据的状态 ...

  2. Kong网关

    Kong网关 一.kong网关核心概念 1. Upstream upstream 对象表示虚拟主机名,可用于通过多个服务对传入请求进行负载远的 2. Target 目标ip地址/主机名,其端口表示后端 ...

  3. Docker Swarm + Harbor + Portainer 打造高可用,高伸缩,集群自动化部署,更新。

    Docker Swarm是Docker官方自带的容器编排工具,Swarm,Compose,Machine合称Docker三剑客.Docker Swarm对于中小型应用来说,还是比较方便,灵活,当然K8 ...

  4. C# 12 中的新增功能

    新的 C# 12 功能在预览版中已经引入. 您可以使用最新的 Visual Studio 预览版或最新的 .NET 8 预览版 SDK 来尝试这些功能.以下是一些新引入的功能: 主构造函数 集合表达式 ...

  5. 研发提速:nacos+openfeign环境下的本地链接服务

    项目研发过程中,经常会遇到与测试人员工作重叠的情况,十分影响效率. 做了一个修改,可以在本地环境启动项目后和测试环境交互,并且不影响测试环境,理论上也可以用于线上环境的异常的快速处理. 准备事项如下: ...

  6. P6066 [USACO05JAN] Watchcow S

    prologue 这个题这么水的一个板子题. analysis 这个题目我们正反建两条边,在跑欧拉回路的时候,看这个边是不是被走过,走过就不走,跳过这个边.如果没走,就走这条边并且标记这个边走过了. ...

  7. 使用Github Copilot完成代码编写

    上篇文章,我们使用VSCode创建了T.Global解决方案和两个类库工程,接下来我们使用Github Copilot完成代码编写 先说以下业务需求: 提供一个公共的本地化组件,支持对数字.货币.时间 ...

  8. QT打开摄像头(自定义取景器)

    自建取景器 .h #ifndef CAMERASURFACE_H #define CAMERASURFACE_H #include<QAbstractVideoSurface> #incl ...

  9. P4870 [BalticOI 2009 Day1]甲虫 题解

    题目链接 简要题意 在一个数轴上有 \(n\) 滴露水,每滴露水初始水量为 \(m\),每秒会蒸发一滴水,一个甲虫初始在原点,速度为 1,水能瞬间喝完,问它最多能喝到几滴水. 题目分析 对于这种移动区 ...

  10. ThreadPoolExecutor使用浅谈

    1. 基础介绍 ThreadPoolExecutor是Python标准库concurrent.futures模块中的一个类,用于实现线程池的功能. ThreadPoolExecutor模块相比于thr ...