Python程序设计内容,python数据预处理技术与实践
从一般情况考虑,经常遇到的数据有噪声、冗余、相关、不完全等。本章考虑这些问题。在使用算法学习之前,需要先对数据进行分析,根据数据的情况采用不同的方法对数据进行预处理。数据预处理的一般方法如下。
1.数据清洗:主要指完全弥补数据中的缺失值,排除干扰数据,识别或剔除异常值,解决不一致问题。主要目标是标准化数据格式、消除异常数据、纠正错误和消除重复数据。
2.数据集成:主要集成和存储来自多个数据源的数据。
3.数据转换主要是指通过平滑、数据泛化和规范化,将数据转换成适合数据挖掘的格式。
4)数据聚合)由于数据挖掘的数据量巨大,用少量的数据进行挖掘分析需要很长的时间。数据聚合技术主要是指对数据集进行聚合或简化,既保持原始数据的完整性,又使数据聚合后的结果与聚合前相同或大致相同。
这些数据处理技术在用于数据挖掘之前,可以输入到机器学习算法中进行学习。这大大提高了数据挖掘模型的质量,减少了实际挖掘所需的时间。
0x00数据集成
我们的日常数据来自各种来源,包括连续数据和离散数据、模糊数据、定性数据和定量数据。数据集成是指将多个文件或数据库中的异构数据集成并存储在一个统一的数据库中。合并数据时,通常需要考虑以下几点:
实体识别
主要数据来源不同,很多都有不同的定义。
同音异义:数据源A与数据源B的数据要素名称相同,但显示内容不同。
也称为同义词:数据源A中的某个特性的名称与数据源B中的某个特性的名称不同,但表示方式不同。
单位不一致:不同的数据源记录不同的单位,比如身高统计,一个数据源用的M单位,一个数据源用的英尺等。
冗余属性
指数据中存在冗余,一般分为以下两种
同一属性出现多次。比如两个数据源每天都记录最高和最低气温,合并后数据会出现两次。
同一属性名称不一致,数据重复。
不一致的数据
编码不一致,数据显示不一致。比如旧的* * *号是15位,新的是18位。
0x01数据转换
数据转换是指将数据转换或统一为适合机器学习的格式。为了让人类能够学习,需要将收集到的外部数据转换成我们能够接收的形式。
实际过程中采集的各种数据,格式多样且不一致,需要进行一些数据预处理,才能配合机器学习的算法使用。
数据转换的常用方法如下。
使用简单的数学函数来转换数据。
用各种简单的数学函数转换收集的原始数据。常见的函数有平方、卡方、对数、差分运算等。(压缩时大,压缩时小)。
正常化
特征归一化又称无量纲数据,主要包括求和标准化、标准差标准化、最大值标准化和极差标准化。此外,基于树的方法不需要诸如GBDT、装袋、提升等特征归一化。但是基于参数的模型和基于距离的模型需要特征归一化。
标准化总和
求和后的归一化数据在[0,1]之间,其和为1。标准化的步骤和公式也很简单。计算每个聚类元素定义的总数据,用每个元素的数据除以这个元素的总数据。结果如下。
求和标准化后得到的新数据满足以下条件
标准偏差
标准偏差的标准化公式如下
在…之中
对于标准差标准化后得到的新数据,每个元素(指标)的平均值为0,标准差为1,即
最大标准化
最大值的标准化公式如下:
最大标准化的新数据,每个元素的最大值是1,其余的都小于1。
集中稀疏数据会破坏稀疏数据的结构,所以意义不大,但可以标准化。标准化是为稀疏数据设计的,也是常用的方法。With_)必须设置为使用Python中的最大值MaxAbsScaler()和Python中的标准差Scaler。
标准化极差(区间简并法,0-1标准化))。
范围的标准化公式如下
对于范围标准化后的新数据,每个元素的最大值为1,最小值为0,其余值介于0和1之间。这里的min{x_ij}和max{x_ij}是指与x_ij同列的最小值和最大值。
如果数据有偏差,标准化数据的均值和方差将没有影响。在这种情况下,可以改用robust_scale和RobustScaler。这些参数对于数据集中化和数据扩展是稳健的。
连续特征变换
连续特征变换常用的方法有三种:基于多项式的数据变换、基于指数函数的数据变换和基于对数函数的数据变换。连续的特征变换可以增加数据的非线性特征所捕获的特征之间的关系,有效地提高模型的复杂度。
#编码=utf-8
生成多项式特征和用户自定义函数(如log等。)
在输入特征中加入非线性特征可以有效提高模型的复杂度,其中多项式特征是最常用的。
矩阵=
[[012]
[345]
[678]]
当degree=2时,以第二种行为为例:
[13453*33*43*54*44*55*5]
当degree=3时,以第二种行为为例:
[13453*33*43*54*44*55*53*3*33*3*43*3*54*4*34*3*55*5*34*4*44*4*54*5*55*5*5]
importnumpyasnp
fromsk learn . preprocessing importpolynomial features
fromsk learn . preprocessingimportfunctiontransformer
生成多项式
X=np.arange(9)。整形(3,3)
打印(X)
ploy=多项式特征(2)
print(poly . fit _ transform(X))
ploy=多项式特征(3)
print(poly . fit _ transform(X))
自定义转换器
X=np.array([[0,1],[2,3]])
transformer=function transformer(NP . log1p)#括号内的是自定义函数。
print(transformer . fit _ transform(X))
transformer=函数Transformer(np.exp)
print(transformer . fit _ transform(X))
输出结果:
(env _ default)PSF:\ workspace python。\test.py
[[012]
[345]
[678]]
[[1.0.1.2.0.0.0.1.2.4.]
[1.3.4.5.9.12.15.16.20.25.]
[1.6.7.8.36.42.48.49.56.64.]]
[[1.0.1.2.0.0.0.1.2.4.0.0.0.
0.
0.0.1.2.4.8.]
[1.3.4.5.9.12.15.16.20.25.27.36.45.
48.
60.75.64.80.100.125.]
[1.6.7.8.36.42.48.49.56.64.216.252.288.294.
336.384.343.392.448.512.]]
[[0.0.69314718]
[1.098612291.38629436]]
[[1.2.71828183]
[7.389056120.08553692]]
(env _ default)PSF:\工作空间
属性的连续离散化
1.离散技术的分类
连续属性的离散化方法也可称为宁滨法,即按照一定的规则将一组连续值放入术语集合中。
离散化技术可以根据如何离散化数据、是否使用类信息或根据方向(自上而下或自下而上)对数据进行分类。
如果离散化过程使用类别信息,则称为监督离散化。否则就是无人监管。
如果先找到一个或几个点(称为分裂点或切割点)来划分整个属性区间,然后在结果区间上递归重复这个过程,则称为自顶向下离散化或分裂。自底向上的离散化或合并正好相反。首先将所有连续值视为可能的分裂点,通过合并相邻域的值形成区间,然后将此过程递归应用于结果区间。
2.非监督离散化和监督离散化
数据根据是否包含类别信息可以分为有监督数据和无监督数据。有监督的离散化应该考虑类别信息,而无监督的离散化则不考虑。
无监督离散化
假设属性的值空间是
,离散化后的类标签为
那么无监督离散化的情况就是x已知,y未知。下面介绍常见的无监督离散化方法:
(1)等宽算法
根据用户指定的k个区间数,将属性的取值范围[xminxmax]分为k个区间,每个区间的宽度相等,即等于Xmax XminK。缺点是容易受离群值影响,导致性能不佳。
(2)等频算法
等频算法还根据用户定义的区间数将属性的范围划分为k个单元格。他要求在每个间隔中落下的物体数量相等。例如,如果属性的值区间有M个点,那么等频率区间划分的K个小区域中的每一个都包含MK个点。
(3)K均值聚类算法
首先,离散化产生的区间数K由用户指定,K- means算法首先从数据集中随机找出K个数据作为K个初始区间的重心。然后根据这些重心的欧氏距离,对所有对象进行聚类:如果数据X最接近重心Gi,则赋给Gi表示的区间;然后重新计算每个区间的重心,使用新的重心再次对所有样本进行聚类。逐步循环,直到所有区间的重心不再随算法循环而变化。
监督离散化
有监督离散化是指预先知道X和Y,然后找到某个函数,用X的值来预测Y的值,可以建立回归或分类模型。
以下自下而上或自上而下的分类方法是监督离散化方法。
3.同质性卡方检验
在介绍两种基于卡方检验的离散化算法之前,我们先介绍一下同质性的卡方检验。
资料:有rr人群。
从每个总体中选择一个随机变量,并记录第二个样本中包含的观察值的数量为
每个样本的每个观察值可以被归入cc个不同类别中的一个。记Oij为归入J类的样本ii的观测值个数,所以,
对于所有样品I,将数据排列在以下RC中
1类 2类 c类总和
- - - - -
总体1 O11 O12 O1c N1
总体2 O21 O22 O21 N2
整体r or1 or2 orc NR
总和 C1 C2 抄送 n
假设:
把pijpij写成随机得到第二只被归类为第一只减肥的海豚的概率,j[i,c]i[1,r],
H0:同一列中所有概率相等(即对于任意j,p1j=p2j==prjp1j=p2j==prj)。
H1:每列至少有两个不相等的概率(即给定J,有I和K,使得pijpkj)。
检验量2为:
零分布:
吸烟无烟总计
- - -
男20525岁
女101525
总计302050
首先,假设H0:性别与吸烟有关。
根据公式,2=8.33,自由度为1,P值小于0.005,因此驳回原假设。
4.自顶向下卡方分裂算法
在这种分裂算法中,将整个属性的值区间看作一个离散属性值,然后将区间分成两部分,即一个区间分成两个相邻的区间,每个区间对应一个离散属性值。分割可以持续到满足一定的停止条件,关键是分割点的选择。
分割步骤:
依次计算每个插入点的卡方值。当卡方值达到最大值时,将该点作为分割点,将属性值域分为两块。
然后计算卡方值,找到最大值并将属性值字段分成三块。
停止标准:
当卡方检验显著时,即pp值
当卡方检验不显著,即pp值 时,停止拆分区间;
5.ChiMerge算法
ChiMerge算法是一种基于卡方值的自底向上的离散化方法。与前面的算法相反。
分割步骤:
步骤1:根据要分散的属性对实例进行排序:每个实例属于一个区间。
第二步:合并区间,计算每对相邻区间的卡方值。
停止标准:
当卡方检验不显著,即pp值时,继续合并相邻区间;
当卡方检验显著时,即pp值
6.基于熵的离散化方法。
这种方法也是一种自顶向下的离散化方法。首先,定义熵的概念:
其中,
就是第I个区间的海豚想减肥的概率。
这个分区的总熵e就是权重
是第I个区间值的比值,n是区间数。
分区过程:
首先,根据值对属性的取值范围进行排序。把每个值作为一个可能的分界点,依次把区间分成两部分,计算它们的熵,把熵最低的作为第一个分界点。
然后选择一个区间,通常是熵值最大的区间,重复这个过程。
当间隔数量达到用户指定的数量或用户指定的终止条件时,分割将停止。
本作品为《CC 协议》,转载时须注明作者及本文链接。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。