数据预处理 | 学习笔记

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

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

课程地址: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 重抽样,样本数量不足时有放回的进行重复抽样。

相关文章
|
9月前
|
安全 编译器 C语言
【C语言】typeof 关键字详解
`typeof` 关键字在GCC中用于获取表达式的类型,便于动态类型定义和宏编程。它可以用于简化代码、提高代码的灵活性和可维护性。虽然 `typeof` 是 GCC 扩展,并非标准C的一部分,但它在实际编程中非常有用。
361 1
|
域名解析 缓存 网络协议
DNS协议 是什么?说说DNS 完整的查询过程? _
DNS是互联网的域名系统,它像翻译官一样将域名转换成IP地址。域名由点分隔的名字组成,如www.xxx.com,包含三级、二级和顶级域名。查询方式分为递归和迭代,递归是请求者必须得到答案,而迭代则是服务器指引请求者如何获取答案。域名解析过程中,会利用浏览器和操作系统的缓存,如果缓存未命中,本地域名服务器会通过递归或迭代方式向上级服务器查询,最终得到IP地址并返回给浏览器,同时在各级缓存中保存记录。
586 1
DNS协议 是什么?说说DNS 完整的查询过程? _
|
Java Go
go如何读取yaml配置文件?
本文介绍了如何在Go项目中利用YAML文件进行配置管理,以简化变量更改及维护工作。首先,通过`go get gopkg.in/yaml.v3`命令安装YAML处理库。接着,展示了如何创建并解析YAML配置文件,包括定义结构体映射YAML字段、读取文件内容以及错误处理等步骤。此外,还提供了通过Go代码生成YAML文件的方法。使用`gopkg.in/yaml.v3`库能够有效提升项目的可维护性和开发效率。
851 1
go如何读取yaml配置文件?
|
存储 人工智能 数据处理
面向AI场景的数据处理和数据检索
本文分享了AI场景下面临的数据处理与检索挑战及解决方案。AI内容生产涉及数据准备、模型训练、推理及应用四大环节,其中数据准备环节面临数据来源复杂、格式多样及数据量激增的挑战,模型训练环节需解决推理准确性问题,AI应用环节则需克服接口兼容性难题。 为应对这些挑战,阿里云存储OSS与智能媒体管理IMM提供百余种数据处理能力,并升级数据索引功能支持向量检索,助力构建多模态检索应用。此外,还介绍了Serverless数据处理方案,可日均处理百亿级别文件,通过OSS数据索引能力,客户能快速构建RAG检索增强,同时实现多模态检索的搭建,显著提升AI应用的效能和用户体验。
1153 19
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
2170 0
|
存储 运维 分布式计算
HDFS 如何容错?
【8月更文挑战第31天】
473 0
|
域名解析 缓存 负载均衡
【域名解析DNS专栏】域名解析在CDN服务中的应用与优化
【5月更文挑战第30天】本文探讨了域名解析在CDN服务中的重要性,强调其对访问速度和稳定性的影响。文中提出了三种优化方法:使用智能解析以动态选择最佳节点,配置负载均衡保证服务稳定,以及利用DNS缓存提升访问速度。通过Python代码示例展示了基本的DNS解析过程,结论指出优化域名解析对于提升网站性能至关重要。
299 1
|
SQL 数据库
SQL中CASE WHEN THEN ELSE END的用法详解
SQL中CASE WHEN THEN ELSE END的用法详解
2204 2
|
自然语言处理 JavaScript 前端开发
自己整理的vue实现生成分享海报(含二维码),看着网上的没实现
自己整理的vue实现生成分享海报(含二维码),看着网上的没实现
|
安全 API 网络安全
163邮箱 SMTP应该怎么配置发信使用?
163邮箱 SMTP应该怎么配置发信使用?