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

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

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

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. [htmlayout] csss! 改变值/文本

    <input type="text" value="123" /> <div class="test">内容内容&l ...

  2. dubbo+zookeeper+springboot远程连接,虚拟机和主机分布式操作

    dubbo+zookeeper+springboot远程连接,虚拟机和主机分布式操作 springboot版本:阿里云2.3.7 实现目标 在主机上的消费者可以调用虚拟机中生产者的接口方法 项目目录 ...

  3. 文心一言 VS 讯飞星火 VS chatgpt (104)-- 算法导论10.1 2题

    二.用go语言,说明如何在一个数组 A[1..n]中实现两个栈,使得当两个栈的元素个数之和不为 n 时,两者都不会发生上溢.要求 PUSH 和 POP 操作的运行时间为 O(1). 文心一言: 在这个 ...

  4. Python socket实现简单聊天,同步输入和接收消息

    查的资料很多都是必须等待接收数据后才能再次输入.做了修改,使用多线程的形式,实现一边输入,一边接收 服务端代码 import socket import threading import sys im ...

  5. How to start with Gradle?

    How to start with Gradle? Download the latest Gradle release from http://www.gradle.org/downloads Se ...

  6. macbook-键盘连击问题001

    最近一段时间,我的笔记本(17年款 macbook pro 13寸)经常出现键盘连击问题. 最大的表现是 e/n/i 这几个按键,按下的时候,会有概率的出现两个或三个. 这不是个案 搜索了一下,有不少 ...

  7. Java算法之动态规划

    ①动态规划 动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程.20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的 ...

  8. HCTF 2023 wp

    HCTF 2023 wp 一.Misc 1.玩原神玩的 分析:附件为一张图片 观察最后一行,明显有flag的格式 搜索得知是 对照得flag为:hctf{yuanlainiyewanyuanshenh ...

  9. [Python急救站课程]简单的人机对话

    一个简单的人机对话程序 name = input("输入姓名:") # input输入数据 print("{}同学,学好Python,前途无量!".format ...

  10. oceanbase 标量子查询等价改写(复杂)

    OB一哥们找我优化条SQL,反馈在OceanBase执行时间很慢需要 3184s才能出结果,安排. 原SQL: select M.POLICY_CHARGE_ID as policyChargeId, ...