数据挖掘中常用的数据清洗方法有哪些?

论坛 期权论坛 期权     
完仑均   2018-9-22 00:57   167618   6
数据挖掘
分享到 :
0 人收藏

6 个回复

倒序浏览
2#
Kenlen  3级会员 | 2018-9-22 00:57:55 发帖IP地址来自
洗数据基本靠人肉,一个分析项目基本八成时间在洗数据。
3#
湿人彭  4级常客 | 2018-9-22 00:57:56 发帖IP地址来自
这个问题太大了。大到解决这个问题需要签一个千万元级别的项目。

从两个角度上看,数据清洗一是为了解决数据质量问题,二是让数据更适合做挖掘。不同的目的下分不同的情况,也都有相应的解决方式和方法。在此简略描述一下,若有错误,请指出,不胜感激!

解决数据质量问题
解决数据的各种问题,包括但不限于:
    1. 数据的完整性----例如人的属性中缺少性别、籍贯、年龄等
    2. 数据的唯一性----例如不同来源的数据出现重复的情况
    3. 数据的权威性----例如同一个指标出现多个来源的数据,且数值不一样
    4. 数据的合法性----例如获取的数据与常识不符,年龄大于150岁
    5. 数据的一致性----例如不同来源的不同指标,实际内涵是一样的,或是同一指标内涵不一致
数据清洗的结果是对各种脏数据进行对应方式的处理,得到标准的、干净的、连续的数据,提供给数据统计、数据挖掘等使用。
那么为了解决以上的各种问题,我们需要不同的手段和方法来一一处理。
每种问题都有各种情况,每种情况适用不同的处理方法,具体如下:
    • 解决数据的完整性问题:
解题思路:数据缺失,那么补上就好了。
补数据有什么方法?
    1. 通过其他信息补全,例如使用身份证件号码推算性别、籍贯、出生日期、年龄等
    2. 通过前后数据补全,例如时间序列缺数据了,可以使用前后的均值,缺的多了,可以使用平滑等处理,记得Matlab还是什么工具可以自动补全
    3. 实在补不全的,虽然很可惜,但也必须要剔除。但是不要删掉,没准以后可以用得上
    • 解决数据的唯一性问题
解题思路:去除重复记录,只保留一条。
去重的方法有:
    1. 按主键去重,用sql或者excel“去除重复记录”即可,
    2. 按规则去重,编写一系列的规则,对重复情况复杂的数据进行去重。例如不同渠道来的客户数据,可以通过相同的关键信息进行匹配,合并去重。
    • 解决数据的权威性问题
解题思路:用最权威的那个渠道的数据
方法:
对不同渠道设定权威级别,例如:在家里,首先得相信媳妇说的。。。
    • 解决数据的合法性问题
解题思路:设定判定规则
    1. 设定强制合法规则,凡是不在此规则范围内的,强制设为最大值,或者判为无效,剔除
    • 字段类型合法规则:日期字段格式为“2010-10-10”
    • 字段内容合法规则:性别 in (男、女、未知);出生日期<=今天
  1. 设定警告规则,凡是不在此规则范围内的,进行警告,然后人工处理
      • 警告规则:年龄》110
  1. 离群值人工特殊处理,使用分箱、聚类、回归、等方式发现离群值
    • 解决数据的一致性问题
解题思路:建立数据体系,包含但不限于:
    1. 指标体系(度量)
    2. 维度(分组、统计口径)
    3. 单位
    4. 频度
    5. 数据

让数据更适合做挖掘或展示
目标包括但不限于:
    1. 高维度----不适合挖掘
    2. 维度太低----不适合挖掘
    3. 无关信息----减少存储
    4. 字段冗余----一个字段是其他字段计算出来的,会造成相关系数为1或者主成因分析异常)
    5. 多指标数值、单位不同----如GDP与城镇居民人均收入数值相差过大

    • 解决高维度问题
解题思路:降维,方法包括但不限于:
    1. 主成分分析
    2. 随机森林
    • 解决维度低或缺少维度问题
解题思路:抽象,方法包括但不限于:
    1. 各种汇总,平均、加总、最大、最小等
    2. 各种离散化,聚类、自定义分组等
    • 解决无关信息和字段冗余
解决方法:剔除字段
    • 解决多指标数值、单位不同问题
解决方法:归一化,方法包括但不限于:
    1. 最小-最大
    2. 零-均值
    3. 小数定标

以上
4#
宋天龙  2级吧友 | 2018-9-22 00:57:57 发帖IP地址来自

数据清洗的主要包括:纠正错误、删除重复项、统一规格、修正逻辑、转换构造、数据压缩、补足残缺/空值、丢弃数据/变量。

1. 纠正错误

错误数据是数据源环境中经常出现的一类问题。数据错误的形式包括:

q 数据值错误:数据直接是错误的,例如超过固定域集、超过极值、拼写错误、属性错误、源错误等。

q 数据类型错误:数据的存储类型不符合实际情况,如日期类型的以数值型存储,时间戳存为字符串等。

q 数据编码错误:数据存储的编码错误,例如将UTF-8写成UTF-80。

q 数据格式错误:数据的存储格式问题,如半角全角字符、中英文字符等。

q 数据异常错误:如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期越界、数据前后有不可见字符等。

q 依赖冲突:某些数据字段间存储依赖关系,例如城市与邮政编码应该满足对应关系,但可能存在二者不匹配的问题。

q 多值错误:大多数情况下,每个字段存储的是单个值,但也存在一个字段存储多个值的情况,其中有些可能是不符合实际业务规则的。

这类错误产生的原因是业务系统不够健全,尤其是在数据产生之初的校验和入库规则不规范,导致在接收输入后没有进行判断或无法检测而直接写入后台数据库造成的。

2. 删除重复项

由于各种原因,数据中可能存在重复记录或重复字段(列),对于这些重复项目(行和列)需要做去重处理。

对于重复项的判断,基本思想是“排序和合并”,先将数据库中的记录按一定规则排序,然后通过比较邻近记录是否相似来检测记录是否重复。这里面其实包含了两个操作,一是排序,二是计算相似度。

常见的排序算法:

q 插入排序

q 冒泡排序

q 选择排序

q 快速排序

q 堆排序

q 归并排序

q 基数排序

q 希尔排序

常见的判断相似度的算法:

q 基本的字段匹配算法

q 标准化欧氏距离

q 汉明距离

q 夹角余弦

q 杰卡德距离

q 马氏距离

q 曼哈顿距离

q 闵可夫斯基距离

q 欧氏距离

q 切比雪夫距离

q 相关系数

q 信息熵

对于重复的数据项,尽量需要经过业务确认并进行整理提取出规则。在清洗转换阶段,对于重复数据项尽量不要轻易做出删除决策,尤其不能将重要的或有业务意义的数据过滤掉,校验和重复确认的工作必不可少。

3. 统一规格

由于数据源系统分散在各个业务线,不同业务线对于数据的要求、理解和规格不同,导致对于同一数据对象描述规格完全不同,因此在清洗过程中需要统一数据规格并将一致性的内容抽象出来。

数据字段的规则大致可以从以下几个方面进行统一:

q 名称,对于同一个数据对象的名称首先应该是一致的。例如对于访问深度这个字段,可能的名称包括访问深度、人均页面浏览量、每访问PV数。

q 类型:同一个数据对象的数据类型必须统一,且表示方法一致。例如普通日期的类型和时间戳的类型需要区分。

q 单位:对于数值型字段,单位需要统一。例如万、十万、百万等单位度量。

q 格式:在同一类型下,不同的表示格式也会产生差异。例如日期中的长日期、短日期、英文、中文、年月日制式和缩写等格式均不一样。

q 长度:同一字段长度必须一致。

q 小数位数:小数位数对于数值型字段尤为重要,尤其当数据量累积较大时会因为位数的不同而产生巨大偏差。

q 计数方法:对于数值型等的千分位、科学计数法等的计数方法的统一。

q 缩写规则:对于常用字段的缩写,例如单位、姓名、日期、月份等的统一。例如将周一表示为Monday还是Mon还是M。

q 值域:对于离散型和连续型的变量都应该根据业务规则进行统一的值域约束。

q 约束:是否允许控制、唯一性、外键约束、主键等的统一。

统一数据规格的过程中,需要重要的一点是确认不同业务线带来数据的规格一致性,这需要业务部门的参与、讨论和确认,以明确不同体系数据的统一标准。

4. 修正逻辑

在多数据源的环境下,很可能存在数据异常或冲突的问题。

例如不同的数据源对于订单数量的数据统计冲突问题,结果出现矛盾的记录。通常,这是由于不同系统对于同一个数据对象的统计逻辑不同而造成的,逻辑的不一致会直接导致结果的差异性;除了统计逻辑和口径的差异,也有因为源数据系统基于性能的考虑,放弃了外键约束,从而导致数据不一致的结果;另外,也存在极小的数据丢失的可能性,通常由于并发量和负载过高、服务器延迟甚至宕机等原因导致的数据采集的差异。

对于这类的数据矛盾,首先需要明确各个源系统的逻辑、条件、口径,然后定义一套符合各个系统采集逻辑的规则,并对异常源系统的采集逻辑进行修正。

某些情况下,也可能存在业务规则的错误导致的数据采集的错误,此时需要从源头纠正错误的采集逻辑,然后再进行数据清洗和转换。

5. 转换构造

数据变换是数据清理过程的重要步骤,是对数据的一个的标准的处理,几乎所有的数据处理过程都会涉及该步骤。数据转换常见的内容包括:数据类型转换、数据语义转换、数据值域转换、数据粒度转换、表/数据拆分、行列转换、数据离散化、数据离散化、提炼新字段、属性构造、数据压缩等。

数据类型转换

当数据来自不同数据源时,不同类型的数据源数据类型不兼容可能导致系统报错。这时需要将不同数据源的数据类型进行统一转换为一种兼容的数据类型。

数据语义转换

传统数据仓库中基于第三范式可能存在维度表、事实表等,此时在事实表中会有很多字段需要结合维度表才能进行语义上的解析。例如,假如字段M的业务含义是浏览器类型,其取值分为是1/2/3/4/5,这5个数字如果不加转换则很难理解为业务语言,更无法在后期被解读和应用。

数据粒度转换

业务系统一般存储的是明细数据,有些系统甚至存储的是基于时间戳的数据,而数据仓库中的数据是用来分析的,不需要非常明细的数据,一般情况下,会将业务系统数据按照数据仓库中不同的粒度需求进行聚合。

表/数据拆分

某些字段可能存储多中数据信息,例如时间戳中包含了年、月、日、小时、分、秒等信息,有些规则中需要将其中部分或者全部时间属性进行拆分,以此来满足多粒度下的数据聚合需求。同样的,一个表内的多个字段,也可能存在表字段拆分的情况。

行列转换

某些情况下,表内的行列数据会需要进行转换(又称为转置),例如协同过滤的计算之前,user和term之间的关系即互为行列并且可相互转换,可用来满足基于项目和基于用户的相似度推荐计算。

数据离散化

将连续取值的属性离散化成若干区间,来帮助消减一个连续属性的取值个数。例如对于收入这个字段,为了便于做统计,根据业务经验可能分为几个不同的区间:0~3000、3001~5000、5001~10000、10001~30000、大于30000,或者在此基础上分别用1、2、3、4、5来表示。

数据标准化

不同字段间由于字段本身的业务含义不同,有些时间需要消除变量之间不同数量级造成的数值之间的悬殊差异。例如将销售额进行离散化处理,以消除不同销售额之间由于量级关系导致的无法进行多列的复合计算。数据标准化过程还可以用来解决个别数值较高的属性对聚类结果的影响。

提炼新字段

很多情况下,需要基于业务规则提取新的字段,这些字段也称为复合字段。这些字段通常都是基于单一字段产生,但需要进行复合运算甚至复杂算法模型才能得到新的指标。

属性构造

有些建模过程中,也会需要根据已有的属性集构造新的属性。例如,几乎所有的机器学习都会讲样本分为训练集、测试集、验证集三类,那么数据集的分类(或者叫分区)就属于需要新构建的属性,用户做机器学习不同阶段的样本使用。

提示 在某些场景中,也存在一些特殊转换方法。例如在机器学习中,有些值是离散型的数据但存在一定意义,例如最高学历这个字段中包含博士、研究生、大学、高中这4个值,某些算法不支持直接对文本进行计算,此时需要将学历这个字段进行转换。常见的方法是将值域集中的每个值拆解为一个字段,每个字段取值为0或1(布尔型或数值型)。这时,就会出现4个新的字段,对于一条记录来看(通常是一个人),其最高学历只能满足一个,例如字段博士为1,那么其余的字段(研究生、大学、高中)则为0。因此这个过程实际上是将1个字段根据值域(4个值的集合)拆解为4个字段。


6. 数据压缩

数据压缩是指在保持原有数据集的完整性和准确性,不丢失有用信息的前提下,按照一定的算法和方式对数据进行重新组织的一种技术方法。

对大规模的数据进行复杂的数据分析与数据计算通常需要耗费大量时间,所以在这之前需要进行数据的约减和压缩,减小数据规模,而且还可能面临交互式的数据挖掘,根据数据挖掘前后对比对数据进行信息反馈。这样在精简数据集上进行数据挖掘显然效率更高,并且挖掘出来的结果与使用原有数据集所获得结果基本相同。

数据压缩的意义不止体现在数据计算过程中,还有利于减少存储空间,提高其传输、存储和处理效率,减少数据的冗余和存储的空间,这对于底层大数据平台具有非常重要的意义。

数据压缩有多种方式可供选择:

q 数据聚合:将数据聚合后使用,例如如果汇总全部数据,那么基于更粗粒度的数据更加便利。

q 维度约减:通过相关分析手动消除多余属性,使得参与计算的维度(字段)减少;也可以使用主成分分析、因子分析等进行维度聚合,得到的同样是更少的参与计算的数据维度。

q 数据块消减:利用聚类或参数模型替代原有数据,这种方式常见于多个模型综合进行机器学习和数据挖掘。

q 数据压缩:数据压缩包括无损压缩和有损压缩两种类型。数据压缩常用于磁盘文件、视频、音频、图像等。


7. 补足残缺/空值

由于各种主客观原因,很多系统存在残缺数据,残缺数据包含行缺失、列缺失、字段缺失三种情况。行缺失指的是丢失了一整条数据记录,列缺失指的是丢失一整列数据,字段缺失指的是字段中的值为空值。其中空值也分两种情况:

q 缺失值。缺失值指的是的数据原本是必须存在的,但实际上没有数据。例如年龄这个字段每个人都会有,所以如果系统强制验证是不应该为空。

q 空值。空值指的是实际存在可能为空的情况,所以空值不一定是数据问题。例如身份证号这个字段,只有成人之后才有这个字符串,因此也可能存在非成人的用户,所以可能为空。

对于缺失值和空值的填充处理主要包含两种方式:

一是手工填入可能的值;

二是利用规则填充可能的值:某些缺失值可以从本数据源或其它数据源推导出来,这就可以用数据分布的状态和特征,使用众数、中位数、平均值、最大值、最小值填充,或者使用近邻分析甚至更为复杂的概率估计代替缺失的值,从而达到填充的目的,某些情况下也可以直接以未知或unknown填充,这是一种先期不处理而等到后期业务在处理数据的时候再处理的方法。

提示 对缺失数据进行填补后,填入的值可能不正确,数据可能会存在偏置,导致数据并不是十分可靠的。除了明显的可以确定的规则来填充值以外,基于已有属性来预测缺失值是一种流行的方法。假如性别字段部分记录为空,可以将性别字段作为目标变量进行建模分析,对完整样本建模后得出缺失数据性别为男、女的概率,然后进行填充。对于更多的不确定值的数据样本,如果不影响整体计算逻辑的,建议先保持原样;如果会成为计算和建模噪音的数据,则可以采取上述方法进行处理,尽量使其在建模过程的作用消减。


8. 丢弃数据/变量

对于数据中的异常数据,包括缺失值、空值、错误值、不完整的数据记录等,除了使用上面讲的方法进行清洗、转换、提升外,还有另外一种方法——丢弃。丢弃也是提升数据质量的一种方法。丢弃数据的类型包含两种:

q 整条删除,指的是删除含有缺失值的样本。某些情况下,由于各种原因可能存在大量的有某些字段缺失的数据记录,这会导致完整的数据很少,此时需要慎重使用。因此,这只适合关键变量缺失,或者含有无效值或缺失值的样本比重很小的情况。

q 变量删除。如果某一变量的无效值和缺失值很多,而且该变量对于所研究的问题不是特别重要,则可以考虑将该变量删除。这种做法减少了供分析用的变量数目,但没有改变样本量。

提示 数据丢弃或删除操作要慎重执行。一方面,被丢弃的数据很可能存在业务实际意义,而这些意义作为开发人员是不清楚的;另一方面,后期可能会需要针对异常数据进行处理,并成为重要的研究课题。例如,营销领域存在流量欺诈,电商领域存在黄牛订单,银行保险领域存在高风险业务,这些课题对应的底层数据可能都是异常数据。

5#
lseamoon  3级会员 | 2018-9-22 00:57:59 发帖IP地址来自
来填坑辣!
输入数据后需要对数据进行预处理,只有处理得当的数据才能进到数据挖掘的步骤。而处理数据包括对数据数量和质量的处理。我按照少—多—乱来整理。

1 对缺失的数据有添补或删除相关行列方法,具体步骤自己判断(如果数据量本来就不要坚持删除了)
★添补:常用拉格朗日插值或牛顿插值法,也蛮好理解,属于数理基础知识。(pandas库里自带拉格朗日插值函数,而且这个好处是还可以在插值前对数据进行异常值检测,如果异常那么该数据就也被视为需要进行插值的对象)
★删除:这个也好理解,就是对结果分析没有直接影响的数据删掉就好。

2 异常值
这个是否剔除需要视情况而定
★像问题1中视为缺失值重新插值
★删除含有异常值的记录(可能会造成样本量不足,改变原有分布)
★平均值修正(用前后两个观测值平均值)
综上,还是方案一靠谱。
人生苦短,学好python

3 数据量太多,有三种方法:集成,规约,变换
(1)数据是分散的时,这个就是指要从多个分散的数据仓库中抽取数据,此时可能会造成冗余的情况。此时要做的是【数据集成】。
数据集成有两方面内容:
①冗余属性识别②矛盾实体识别
属性:
对于冗余属性个人理解是具有相关性的属性分别从不同的仓库中被调出整合到新表中,而新表中由于属性太多造成冗余,这时可以靠相关性分析来分析属性a和属性b的相关系数,来度量一个属性在多大程度上蕴含另一个属性。(这个用python的pandas库里corr()函数也可以实现),检测出了再将其删除。
实体:(这个是要靠自己甄别源表,所以源仓库里的实体含义要清楚)
a,同名异义——改名字
b,异名同义——删一个
c,单位不统一—换

(2)数据规约
又包括两方面
属性规约和数量规约
①属性规约:就是减少属性个数或合并旧属性成一个新属性,可以特征子集选择(删除不需要作挖掘的属性),主成分分析(通过对方差的决定性大小分析并降维),决策树归纳,向前/向后删除。
具体的如果不了解可以找个实例试一下。

②数量规约:通过选择替代的,较小的数据来减少数据量,包括有参数和无参数。
有参数:建模,并且只需存放模型的参数,例如一些回归模型,用参数来评估数据。
无参数:需要存放实际数据,用图表存放并显示数据,例如用直方图时可把步长设置一定的区间,来衡量区间内的频数,也起到了规约的目的。还有一些聚类(用簇来替换实际数据)。还有抽样(聚类抽样,分层抽样)
——————————————
少和多大概说完了,乱下次再说。
——————————————
当数据太乱时就要进行规范化处理,进行数据变换。
①简单函数变换。比如将非正态的变换为正态分布的,将非平稳序列转换为平稳序列,有时数据的区间十分大时取其对数也能起到压缩的作用。
②规范化。消除指标之间由于量纲等引起的差异。分为最小—最大规范化(线性变换,将其映射到0和1区间内),零—均值规范化(使数据均值为0,标准差为1),小数定标规范化(移动小数位数,将数值映射到-1到1区间)
三种方法都有转化公式。
③ 连续属性离散化。(当要应用的数据挖掘算法要求数据是分类属性形式的时候),包括两个步骤:确定分类数,将连续的属性映射到这些分好类的类别。
方法:等宽(类似于直方图的思想,取特定步长),等频(按相同频数进行划分),聚类
④属性构造。(a,属性添加:比如有质量和体积,可以用公式构造出密度这个属性值;
b,二元化;c,概念分层)
—————————————————————————
暂时这么多,里面有些细节不太好用文字说,用手机端不好编辑公式,如果有错误欢迎指出来,因为在做数据相关的工作,有需要改正和补充的地方会进行修正的。
6#
BreezeDeus  4级常客 | 2018-9-22 00:58:00 发帖IP地址来自

说一个我们爱因互动具体在用的技术吧,用来清洗聊天对话数据还是挺管用滴。

【注:原文在爱因博客

在聊天机器人里,可用的公开对话数据就更少了,比如闲聊类的也就小黄鸡、华为微博数据,而且这些数据也都还不够好。不论是公开数据还是自己抓的各种数据,使用前的清洗都是必须的。清洗数据是个苦活,数据量大时就算投入大量人力也未必有好的产出。本文介绍爱因互动正在使用的一种数据清洗方法,我们称之为Data Purification Framework(简称DPF)。DPF是无监督的,所以基本不需要人力投入,但最终清洗效果还不错。虽然本文名为对话数据清洗,但此方法其实可以用在很多其他场景。

数据清洗框架:DPF

DPF的理念很简单,利用不靠谱的数据训练一个模型,这个模型在训练集上准确度通常都很低(如果训练集上已经完美拟合,那这个方法就不能直接用了)。用训练好的模型把最不靠谱的那些数据(预测与实际差的最远)删掉,然后利用剩下的数据训练新的模型,之后再用新模型把剩下数据里最不靠谱的一些数据删掉,如此重复,直到模型在训练集上达到较高的准确度。这时候被筛完剩下的数据可能比较少了。为了召回一些被早期模型误过滤掉的样本,我们把最新的模型应用到原始的全量数据上,这样去除最不靠谱的数据后会留下更多的数据用于接下来的迭代。之后的迭代逻辑和前面的相同,利用模型清除最不靠谱的数据,再用清洗后的新数据训练新模型。类似此方法的思想在很多地方都出现过,比如一些半监督扩充数据的场景。DPF框架图如下:


这个方法有效的一个关键是用于识别数据靠谱性的匹配模型(图中的Matcher),需要找到合适的匹配模型来统一衡量每个样本点的靠谱性。这个匹配模型不一定和数据清洗后最终被使用的模型一致。

对DPF框架图中的主要组件(下图)做个简单说明。


  • 红色箭头连接一个模型和一个数据集,表示把此模型用于预测此数据集。这里表示使用Matcher1.1预测红框中的数据集。利用预测的匹配值,对红框中数据进行排序,清除掉匹配度最差的一部分数据,剩下的就是蓝框所表示的数据。
  • 蓝色箭头连接一个数据集和一个模型,表示使用此数据集训练出此模型。这里匹配算法使用蓝框数据进行训练获得Matcher1.2。

如果这个过程都在框架的同一列,那么红框的数据就是第一个模型的训练数据(图中的红框数据是Matcher1.1的训练数据)。如果这个过程是跨列的(如框架图中Matcher1.x –> Matcher2.1),那么红框的数据就是原始的全量数据。

下面以清洗小黄鸡对话数据为例来具体说明此清洗框架的整个流程。

清洗小黄鸡对话数据

小黄鸡数据

小黄鸡数据是小黄鸡与用户的聊天qa对,包括了35w+ qa对。除了很多黄暴的样例,还有很多答案与问题压根不匹配的样例。一些样例见下图,每行中左边是问题,右边是答案。我们的初衷是使用小黄鸡数据来训练seq2seq闲聊模型,但直接使用效果很差,而且还容易生成骂人的答复。

选择Matcher模型

在具体清洗流程开始前,还需要确定使用什么模型作为DPF中的Matcher模型。 对于qa对话数据,我们发现dual encoder模型是一个好的选择。dual encoder首先利用RNN把问题和答案都向量化,然后以这两个向量的匹配程度来说明这个问答对的匹配程度。

接下来说明清洗小黄鸡对话数据的具体流程。

清洗流程

训练Matcher1.0,清除噪音数据

在训练Match1.0时,我们把所有的小黄鸡qa对作为正样本,然后随机抽取一些q和其他的a生成相同数量的负样本。从预测准确度来看,Match1.0在训练集上只能到0.75左右,在测试集上大概0.65,很差。

把训练好的Match1.0用于预测其训练集中的所有正样本(也即原始的小黄鸡qa对),并按照预测的匹配概率对qa对进行排序。然后把匹配概率低于某个阈值的qa对全部删掉(如果删除过多,可以设置一个删除的最高比例)。比如在这里我们设置了0.5的匹配阈值。

训练Matcher1.1,进一步清除噪音数据

以上一步清洗后的数据作为正样本,随机产生等量的负样本。利用这些正负样本训练Matcher1.1。把训练好的Match1.1用于预测其训练集中的所有正样本,并按照预测的匹配概率对qa对进行排序。然后把匹配概率低于某个阈值的qa对全部删掉(如果删除过多,可以设置一个删除的最高比例)。这个流程跟上面一样,但这里的匹配阈值可以设置得更高,比如0.6,因为此时训练数据和模型都比Matcher1.0更好了。Match1.1在训练集上的准确度能到0.82左右,在测试集上大概0.7。

训练Matcher1.2 –> Matcher1.x,逐步迭代清除噪音数据

和上面的流程一致,对上面清洗好的数据做进一步的清洗。此时的匹配阈值可以再高点,比如0.7。Match1.2在训练集上的准确度能到0.89左右,在测试集上大概0.76。

这个循环继续,直到Matcher1.x在训练集上的准确度达到预设值(比如0.98),或者被清除的数据量低于预设数量,或者迭代次数达到预设值(比如10次)。在这个过程中,匹配阈值可以设置得越来越高,最高可以到0.9甚至0.95。因为后面模型的精度逐渐变高,所以阈值更高也不会删除很多数据(应该让被清除的数据量逐渐降低)。在小黄鸡数据上,Matcher1.8在训练集上的准确度超过了0.98。它的训练集里的正样本只有清洗后剩下的7w+条qa对。

迭代到这步,其实可以像之前的迭代那样对训练数据进行清洗,然后把剩下的数据作为我们最终的数据结束整个清洗过程。但很多时候我们希望能从已被清洗的数据中再找回一些靠谱的数据。毕竟早期用于清洗的模型本身也并不是那么靠谱。 所以我们可以把Match1.8用于最初的全量数据上,预测它们的匹配概率。这就是框架图里第一列到第二列的连接线。和之前的步骤一样,按匹配概率排序,把低于设定阈值的样本去掉。小黄鸡里如果我们设置阈值为0.9,清洗后可以剩下11w+的qa对。下图中展示了一些匹配概率最低(左上角红框)和最高(右下角蓝框)的样本。每行代表一个样本,格式为问题||答案||匹配概率值。可以看出区分度还是很明显的。

清洗后的结果数据可以作为最终结果返回,也可以进一步进行提纯,把它作为Matcher2.1的训练集,继续迭代……

实际运行时,我们在小黄鸡数据上跑到Matcher1.8就结束了,在微博数据上我们跑到了Matcher3.5,训练集上的准确度达到0.981。

DPF的清洗过程虽然无需人工干预,但每步迭代都需要重新训练模型,在数据量大时整个过程还是很耗时的。一个降低训练时间的方法是每次训练新模型时,把其参数初始化为前一个模型的训练结果。

Seq2seq+Attention模型结果

我们把上面Matcher1.8清洗获得的7.1w+小黄鸡qa数据作为训练集,以单字模式训练seq2seq+attention对话生成模型。

下面是一些模型结果(我们对基本模型做了一些改进,具体请见我们之后的文章)。其中Q表示问题,A表示使用beam search产生的topN答案,A后面的数字表示序号,比如A2表示排名第二的结果。
注:有些候选结果被某些后处理步骤过滤掉了。

7#
网易云  5级知名 | 2018-9-22 00:58:03 发帖IP地址来自

数据清洗是将重复、多余的数据筛选清除,将缺失的数据补充完整,将错误的数据纠正或者删除,最后整理成为我们可以进一步加工、使用的数据。

所谓的数据清洗,也就是ETL处理,包含抽取Extract、转换Transform、加载load这三大法宝。在大数据挖掘过程中,面对的至少是G级别的数据量,包括用户基本数据、行为数据、交易数据、资金流数据以及第三方的数据等等。选择正确的方式来清洗特征数据极为重要,除了让你能够事半功倍,还至少能够保证在方案上是可行的。

数据清洗的一般步骤:分析数据、缺失值处理、异常值处理、去重处理、噪音数据处理。在大数据生态圈,有很多来源的数据ETL工具,但是对于公司内部来说,稳定性、安全性和成本都是必须考虑的。


对于数据值缺失的处理,通常使用的方法有下面几种:

1、删除缺失值

当样本数很多的时候,并且出现缺失值的样本在整个的样本的比例相对较小,这种情况下,我们可以使用最简单有效的方法处理缺失值的情况。那就是将出现有缺失值的样本直接丢弃。这是一种很常用的策略。

2、均值填补法

根据缺失值的属性相关系数最大的那个属性把数据分成几个组,然后分别计算每个组的均值,把这些均值放入到缺失的数值里面就可以了。

3、热卡填补法

对于一个包含缺失值的变量,热卡填充法的做法是:在数据库中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。最常见的是使用相关系数矩阵来确定哪个变量(如变量Y)与缺失值所在变量(如变量X)最相关。然后把所有变量按Y的取值大小进行排序。那么变量X的缺失值就可以用排在缺失值前的那个个案的数据来代替了。

还有类似于最近距离决定填补法、回归填补法、多重填补方法、K-最近邻法、有序最近邻法、基于贝叶斯的方法等。


异常值通常被称为“离群点”,对于异常值的处理,通常使用的方法有下面几种:

1、简单的统计分析

拿到数据后可以对数据进行一个简单的描述性统计分析,譬如最大最小值可以用来判断这个变量的取值是否超过了合理的范围,如客户的年龄为-20岁或200岁,显然是不合常理的,为异常值。

2、3原则

如果数据服从正态分布,在3原则下,异常值为一组测定值中与平均值的偏差超过3倍标准差的值。如果数据服从正态分布,距离平均值3之外的值出现的概率为P(|x-u| > 3) <= 0.003,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。

3、箱型图分析

箱型图提供了识别异常值的一个标准:如果一个值小于QL01.5IQR或大于OU-1.5IQR的值,则被称为异常值。QL为下四分位数,表示全部观察值中有四分之一的数据取值比它小;QU为上四分位数,表示全部观察值中有四分之一的数据取值比它大;IQR为四分位数间距,是上四分位数QU与下四分位数QL的差值,包含了全部观察值的一半。箱型图判断异常值的方法以四分位数和四分位距为基础,四分位数具有鲁棒性:25%的数据可以变得任意远并且不会干扰四分位数,所以异常值不能对这个标准施加影响。因此箱型图识别异常值比较客观,在识别异常值时有一定的优越性。

4、基于模型检测

首先建立一个数据模型,异常是那些同模型不能完美拟合的对象;如果模型是簇的集合,则异常是不显著属于任何簇的对象;在使用回归模型时,异常是相对远离预测值的对象

优缺点:1.有坚实的统计学理论基础,当存在充分的数据和所用的检验类型的知识时,这些检验可能非常有效;2.对于多元数据,可用的选择少一些,并且对于高维数据,这些检测可能性很差。

5、基于距离

通常可以在对象之间定义邻近性度量,异常对象是那些远离其他对象的对象

优缺点:1.简单;2.缺点:基于邻近度的方法需要O(m2)时间,大数据集不适用;3.该方法对参数的选择也是敏感的;4.不能处理具有不同密度区域的数据集,因为它使用全局阈值,不能考虑这种密度的变化。

6、基于密度

当一个点的局部密度显著低于它的大部分近邻时才将其分类为离群点。适合非均匀分布的数据。

优缺点:1.给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理;2.与基于距离的方法一样,这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm);3.参数选择困难。虽然算法通过观察不同的k值,取得最大离群点得分来处理该问题,但是,仍然需要选择这些值的上下界。

7、基于聚类:

基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇。离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类(这个不能保证产生最优结果)。

优缺点:1.基于线性和接近线性复杂度(k均值)的聚类技术来发现离群点可能是高度有效的;2.簇的定义通常是离群点的补,因此可能同时发现簇和离群点;3.产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性;4.聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。


噪音,是被测量变量的随机误差或方差。对于噪音的处理,通常有下面的两种方法:

1、分箱法

分箱方法通过考察数据的“近邻”(即,周围的值)来光滑有序数据值。这些有序的值被分布到一些“桶”或箱中。由于分箱方法考察近邻的值,因此它进行局部光滑。

用箱均值光滑:箱中每一个值被箱中的平均值替换。

用箱中位数平滑:箱中的每一个值被箱中的中位数替换。

用箱边界平滑:箱中的最大和最小值同样被视为边界。箱中的每一个值被最近的边界值替换。

一般而言,宽度越大,光滑效果越明显。箱也可以是等宽的,其中每个箱值的区间范围是个常量。分箱也可以作为一种离散化技术使用.

2、回归法

可以用一个函数拟合数据来光滑数据。线性回归涉及找出拟合两个属性(或变量)的“最佳”直线,使得一个属性能够预测另一个。多线性回归是线性回归的扩展,它涉及多于两个属性,并且数据拟合到一个多维面。使用回归,找出适合数据的数学方程式,能够帮助消除噪声。



利益相关:网易猛犸大数据平台作为一站式的应用开发和数据管理平台,通过大数据开发套件,将数据开发、任务运维、自助分析、数据管理、项目管理等工作通过工作流的方式有效的串联起来,提供敏捷易用的用户操作界面,降低了大数据分析的使用门槛,显著的提高了数据开发工程师和数据分析师的工作效率。猛犸大数据平台在电商、音乐、云课堂学习、企业工业制造等领域已广泛应用,基于持续的需求驱动,通过多行业的业务验证,同时丰富全面的组件,提供完善的平台能力,满足不同类型的业务需求。

在对数据的分析处理过程中,数据的安全重要性不言而喻。猛犸平台底层使用Kerberos认证,实现了数据的安全性和隔离性。除了认证系统,利用Ranger实现了细粒度的权限控制,保证了各个租户只能查看授权访问的表、库和字段。不仅如此,平台还提供审计功能,通过对用户平台行为进行记录、分析和汇报,用来帮助对事故追根溯源,提高了平台的安全性。点击可免费试用

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP