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

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

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

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"表示用顺序的整数来编码。

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

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. WPF使用Blazor的快速案例

    下面我们将讲解在WPF中使用Blazor,并且使用Blazor做一些文件编辑操作,下面是需要用到的东西 WPF Blazor Masa Blazor Monaco 安装Masa Blazor模板 使用 ...

  2. QA|ValueError: write to closed file报错怎么debug|IHRM接口自动化测试

    unittest生成自动化测试报告时报错ValueError: write to closed file,如下图 代码如下: 原因排查:因为with open打开文件后会自动关闭,也就是上图16行执行 ...

  3. Redis持久化 (RDB和AOF) 梳理

    Redis有两种持久化方案: RDB持久化 AOF持久化 RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照.简单来说就 ...

  4. 【Redis】SpringBoot集成Redis事务-亲测

    大家好,我是mep.今天一起来探讨一下Redis缓存的问题,SpringBoot如何集成Redis网上文章很多,基本都是介绍如何配置redisTemplate,如何调用,本文就不过多介绍了.这次我们研 ...

  5. 其它——CGI,FastCGI,WSGI,uWSGI,uwsgi一文搞懂

    文章目录 CGI, FastCGI, WSGI, uWSGI, uwsgi一文搞懂 一 CGI 二 FastCGI 三 WSGI 四 uWSGI 五 uwsgi CGI, FastCGI, WSGI, ...

  6. 爬虫系列——Beautifulsoup4

    文章目录 一 介绍 二 基本使用 三 遍历文档树 四 搜索文档树 五 修改文档树 六 总结 ​ 一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能 ...

  7. 重写equals方法的注意事项

    重写equals方法的注意事项   一. 在重写equals方法时,要注意满足离散数学上的特性1   自反性:对任意引用值X,x.equals(x)的返回值一定为true.2   对称性:对于任何引用 ...

  8. idea中常用的快捷键

    IntelliJ IDEA 常用快捷键 一.Ctrl 快捷键 Ctrl + F 在当前文件进行文本查找 (必备) Ctrl + R 在当前文件进行文本替换 (必备) Ctrl + Z 撤销 (必备) ...

  9. 强化学习的一周「GitHub 热点速览」

    当强化学习遇上游戏,会擦出什么样的火花呢?PokemonRedExperiments 将经典的 Pokeman 游戏接上了强化学习,效果非同凡响,不然能一周获得 4.5k star 么?看看效果图就知 ...

  10. [ABC276Ex] Construct a Matrix

    没有题解,所以来写一篇. Description 构造一个 \(N\times N\) 的矩阵 \(A\),其中 \(A_{i,j}\in {0,1,2}\),要求同时满足 \(Q\) 条限制. 每条 ...