sklearn基础--『预处理』之 离散化

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

通过数据预处理,可以

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

本篇介绍的离散化 处理,是一种数据预处理技术,用于将连续的、连续的数值型数据转换为离散的、分类的标签。

这种处理方式主要应用于一些需要转化为分类问题的数据集,如机器学习和数据挖掘中的输入变量。

1. 原理

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

这个过程通常会采用分箱 (Binning)的方法。

在分箱中,原始数据的值被分配到一些离散的、预定义的类别中,这些类别通常被称为"箱子"或"桶",

箱子的数量和大小可以根据数据的分布和实际需求进行调整。

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

1.1. 二值化处理

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

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

python 复制代码
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

python 复制代码
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. 总结

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

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

相关推荐
IT古董1 小时前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
机器人虎哥2 小时前
【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测
人工智能·机器学习
罗小罗同学4 小时前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer
孤独且没人爱的纸鹤4 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
羊小猪~~4 小时前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
不去幼儿园6 小时前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
无脑敲代码,bug漫天飞7 小时前
COR 损失函数
人工智能·机器学习
HPC_fac130520678168 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
老艾的AI世界16 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲
DK2215116 小时前
机器学习系列----关联分析
人工智能·机器学习