数据预处理 | 学习笔记

简介: 快速学习数据预处理

开发者学堂课程【机器学习实战:数据预处理 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/530/detail/7131


数据预处理

内容介绍:

一. 数据清洗

二. 数据集成

三. 数据变换

四. 数据规约

 

第三章数据预处理,数据的处理流程里每一个环节都很重要,包含任务也非常多,但出于定位问题,应当了解之后再详情学习,所以介绍的较简单,但实际包含内容非常多。

 

一.数据清洗

第一部分介绍什么是数据清洗

1. 数据清洗:

针对原始数据,数据中包含部分有问题的数据,例如噪声,则需要进行修复、平滑或将错误数据删除,还有异常值,应当处理掉,缺失值的填充,重复记录的删除,错误记录的修正等。

需要考虑问题是否处理,因为数据和所选择的算法是紧密相关的。有些算法的间断性较强,即使不去处理问题,对它影响也有限,或该算法中有些参数可以直接去处理该数据。也有另外一些算法对异常值或错误记录非常敏感,则需要去处理。

2. 噪声数据处理:

指出现在某变量上的随机误差或变异。是指在一组数据中无法解释的数据变动,就是一些不和其他数据相一致的数据。

对于常见的一些问题:

对于异常值,首先要发现识别出异常值,比画一个箱线图,Tukey’s Test 等方法都可以识别出异常值,识别出之后去处理,如将异常值直接删除是否可以,或当做缺失值,重新用一个方式把它填补成合理的值是否可以,或忽略。需根据具体情况,如数据量很少,而其中一条数据中的某一个值有异常就将整条数据删除,数据本来就比较少,这个数据很珍贵,不能随意删除。

处理时候要判断用什么方式来处理,嗯,做了这个决定,实际去处理就会较容易。嗯如可以使用分箱法,填补均值或找到边界来填充,然后对数据进行平滑,处理方法很多。

对于缺失值,首先要判断是否需要处理,如果要处理,处理方式也很多,如填充一个指定的统计值,如果是数字型可以填补一个均值,如果是离散型可以填补一个众数,即一个字段里出现次数最多的值,有时需要填一个均值或一个中位数。另外也可能填一个固定值,如只要为空就填一个指定的值,还可以选择一个最接近当前记录里字段对应的值。还有模型拟合填充,即先建一个模,然后将缺失值记录作为待预测的记录填入,根据模型得到的预测值作为空值的取值。另外还有插值法,建一个插值函数,使用牛顿插值法、拉格朗日插值法去填补数据。

如生存预测,以 age 为例,即年龄为例,年龄里有缺失值,最简单的办法是不处理。假设需要处理,最简单的办法是填固定值,如填 99,所以空都填 99。或填充统计值,如说平均值为 29.7,众数为 24,只要是微空即可选,填平均值、众数或最小值,最大值都可以。只要指定一个统计值,直接用这个统计值去填充空值也可以。另外需要找一个和该记录最相似的另一条记录,将它的 age 值取出填入。如下例,第二条本身年龄是空,此时找一条记录和第二条记录很相似,即把第一条记录里它的 age 值是 40,填入第二条记录里,这也是一种办法。

image.png

还有一种办法为模型拟合,首先建一个回归模型,然后使用现有的数据对它生成一个模型,这个模型里待预测值为 age ,基于 age 去建模,年龄和哪些因素相关,生成一个线性回归或一个回归的模型,然后将刚才空值的记录中的 age 利用这个模型进行预测,将预测的结果填入,这是一个比较精细化的处理方式。如下例, age 值为空,用这个记录带到预测数据里,预测出来的结果是 23.85,就将 23.85 填到 age 里。

image.png

 

二.数据集成

1.数据集成

第二个数据预处理的项目是数据集成,因为数据来源可能来自于不同的数据源,不同的数据源对数据的记录有不同的特点,需要把这些数据进行整合,形成一个统一的数据视图,来支持下一步继续学习的流程。

2.要考虑的问题

(1)考虑识别和匹配相关的数据和实体,从核心信息开始逐步匹配,扩展到其他相关的信息。

(2)考虑有没有统一的元数据定义,须建立一个统一的元数据定义,表明字段名、类型、单位量纲等。

(3)考虑统一的数据取值,通过对应规则( Mapping )进行转换,保持数据一致。如一个系统里记性别是男女,另一个系统里记的是 male , female ,另一个系统记得为拼音,要把这些全部统一。

(4)考虑冗余数据处理,对于重复定义的数据进行删除,对于相关性大的数据进行适当的处理。如数据非常接近或性相关性非常高,则对这个数据进行处理,否则会出现多重贡献性。

首先确定核心信息,确定可靠关系,然后进行初步的合并,接着寻找扩展关系,融入相关信息,完成二次合并,然后关系发散传递,融入更多的信息,完成迭代的合并。阿里有一个自己的工具叫 ID mapping,在集团内部用的较好。

 

三.数据变换

1.数据变换

预处理还要考虑数据变换,对数据进行变换主要是为了让数据更加适合当前任务或者算法的需要。

常见的变化方式

(1)使用简单函数进行变换,对现有的数据求平方根或乘方,或者进行对数变化或指数变换,还可以求差值或比例。第一个为了任务算法的需要,第二个可能使计算变得更简单。如原本是乘方或几个数相乘,但如果取了对数就变成加法了,计算的复杂度就简便了。

(2)数据规范化,对数据进行归一化或标准化,如使用 z-score 的方式标准化或使用小数定标规范化去数据规范化,把整个数据集压缩在一个较小的范围内。

(3)连续值离散化,有些算法不支持连续值,或在某些情况下需把连续值做成离散值,常用的方法有分裂法和合并法。如使用开方检验或使用信息商或信息争议,如一个字段是连续值,如果是分裂法,选一些点将数据分成两部分,然后计算它的信息争议,找到信息争议最大的点按照这个点进行分裂,按照类似的方式拆成好多个离散值。如在做 ID 三决策树时,计算信息争议要选择当前最佳特征。

离散化通过计算信息争议去选择当前最佳的分割点或分裂点,把它分裂成很多离散值。合并法正好相反,首先把连续值分成好多小的单元,然后计算单元信息争议最小,一步一步的合并起来,直到离散值的个数满足要求位置。

2.数据变换:简单函数

使用简单函数的变换可以使数据符合某一分布或者使计算变简单,如刚才 fair 的例子,数据分布直方图和数据检验图如下,如图明显不是正态分布。

image.png

image.png

如果通过变换使数据满足或更接近于正态分布,有很大的好处,因为正态分布是统计学家或概率论下研究较透彻的一种分布,基于这种分布有很多性质或现成的可以直接应用。所以要通过变换让数据集满足正态分布。

如 y 等于 x 的 1/3 次方,它的数据分布直方图和正态检验图较接近正态分布。

image.png

同样使用简单函数时,还可以有些其他型,如对数和指数变换,或求差值、求比例。

3.数据变换:规范化

主要消除量纲影响或者不同字段值变化幅度的影响,提升模型的精度和收敛速度。很多模型规范化后模型的效果会更好。

(1)归一化是把原始数据缩放成 0~1 之间的数,先求极差用最大值减最小值作为分母,然后分子用当前的值减最小值,这样就把原始数据放到零和一之间了。

(2) z-score 标准化把原始数据转换成距离均值相等的标准差的个数,最大值,最小值位置或有离群点的情况适合用这个, this方面首先算出均值,每一个数据、每一条记录距离均值的标准差的个数会转换成当前的值。

(3)小数定标规范化是移动原始数据的小数点位置啊,先求取值中绝对值最大的值,然后取最小的 n ,让最大值除以 10 的 n 次方后还落在 -1~1 之间。如生存预测数据集,其中票价( fare )和同行人数( parch )绝对值相差较大,以 KNN 方式计算距离时, parch  本身的贡献很小可以忽略,采用归一化后会减少影响。

image.png

 

四.数据规约

1.数据规约

数据规约是指尽可能的保持数据原貌的前提下,最大限度的精简数据的量,主要从两个角度,从列的角度属性选择,从行的角度数据抽样。属性选择根据属性里哪些对最终结果更重要来自选择。

2.数据抽样( sampling )

数据抽样有多种抽样方法

(1)最常见的最简单的叫简单随机抽样,每个样本被抽到的概率相等,随机从总体中获得指定个数的样本数据。

(2)系统抽样,也叫等距抽样,样本按照某种顺序排列之后随机抽取第一个样本,然后顺序抽取其余样本。如把数据集按照字段排序之后,取第一个,然后去加十,则取第 11 个,再加 10 取第 21 个,按照一个固定的距离等距离抽样。

(3)分层出样,总体由不同类别的记录组成,按照类别的组成比例抽取样本的方,如一个数据集里有性别的字段,男的占 70%,女的占 30%,抽样时可以指定男的抽出来的样本占 70%,女的占 30%,量较大时区别不大,但量较少时分层抽样就较重要了。能很好的按照某个字段指定比例来抽样。

(4)整群抽样也叫整体抽样,数据总体分成多个互不交叉的群,随机抽取若干个群。如做一个全国的人口调研,可能按线来抽,全国抽 100 个线,就是整群抽样。

(5)还有一些其他的抽样方法,如连续抽样,先抽样基于这个样本进行分析,然后根据分析结果决定要不要继续抽样。

多阶段抽样,抽样分阶段进行,每个阶段可以使用不同的抽样方法,连续抽样也是多阶段抽样的一种。

还有一种叫 bootstrap 重抽样,样本数量不足时有放回的进行重复抽样。

相关文章
|
1月前
|
数据采集 机器学习/深度学习 数据挖掘
python数据分析——数据预处理
数据预处理是数据分析过程中不可或缺的一环,它的目的是为了使原始数据更加规整、清晰,以便于后续的数据分析和建模工作。在Python数据分析中,数据预处理通常包括数据清洗、数据转换和数据特征工程等步骤。
61 0
|
4月前
|
数据采集 数据挖掘
【数据挖掘】利用sklearn进行数据预处理讲解与实战(超详细 附源码)
【数据挖掘】利用sklearn进行数据预处理讲解与实战(超详细 附源码)
104 0
|
1月前
|
数据采集 监控 安全
数据预处理
【2月更文挑战第25天】
|
10天前
|
机器学习/深度学习 数据采集 算法
机器学习实战第1天:鸢尾花分类任务
机器学习实战第1天:鸢尾花分类任务
30 0
|
2月前
|
数据采集 机器学习/深度学习 Python
掌握XGBoost:特征工程与数据预处理
掌握XGBoost:特征工程与数据预处理
93 3
|
5月前
|
机器学习/深度学习 数据采集 算法
r语言机器学习逻辑回归代码实战 结果分析和折线图
r语言机器学习逻辑回归代码实战 结果分析和折线图
49 1
|
7月前
|
分布式计算 大数据 Hadoop
大数据预处理
大数据预处理
56 0
|
10月前
|
机器学习/深度学习 数据采集 数据处理
数据预处理与特征工程:提升机器学习模型性能
在机器学习领域,数据预处理和特征工程是构建强大、准确的模型的关键步骤。这些步骤的正确实施可以显著提高模型的性能和鲁棒性。本文将探讨数据预处理和特征工程的重要性,以及一些常用的技术和策略,帮助您在构建机器学习模型时取得更好的结果。
229 0
|
机器学习/深度学习 数据采集 移动开发
机器学习:盘点最常见的7种数据预处理方法和原理
机器学习:盘点最常见的7种数据预处理方法和原理
1440 0
机器学习:盘点最常见的7种数据预处理方法和原理
|
机器学习/深度学习 数据采集 算法
【机器学习】(27)使用sklearn实现数据预处理
【机器学习】(27)使用sklearn实现数据预处理
118 0