掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

实用贴:机器学习的关键环节——数据预处理

众所周知,机器学习算法的表现不仅依赖模型的选择,也和数据本身的质量息息相关。然而,现实世界中数据质量往往并不理想,很多负面的因素如数据丢失、数据噪声、数据冗余、数据维度灾难等严重影响了机器学习的表现。正如在计算器科学与信息通信领域的一句习语:“Garbage in, garbage out!”,错误的、无意义的数据输入计算机,计算机自然也只能输出错误的、无意义的结果。此外,数据预处理可能占用了整个工作流程40%-70%的时间成本,更凸显了数据预处理的复杂性和重要性,接下来我们将介绍目前数据预处理中主要问题,并给出相应的处理方法。


数据缺失


在机器学习算法中,很大一部分都要求数据是完整的,然而,实际应用场景中样本数据中某些维度的缺失是很常见的。如在金融风控领域,很多样本数据的提供者基于个人隐私的考虑并不会提供所有维度的信息(家庭成员信息,个人收入信息等),因此数据缺失问题并不能通过在数据搜集阶段的努力而得以回避。面对数据缺失的问题,主要以下几种数据预处理方法:


01剔除非完整样本:

如果数据样本总量较大,而含有缺失数据的样本占总样本比例较小,第一选择的方法就是剔除这些非完整的样本。然而这种方法虽然简单,但剔除样本的同时也会丢失了一些重要的信息,而且如果样本数目总量有限,亦或者缺失数据样本较多,剔除数据将会影响机器学习的最终表现。


02最大释然填充:

最大释然填充是指根据数据的概率分布函数,通过最大释然估计,对缺失值进行填充。该填充方法估计结果的准确性严重依赖于所假设的概率分布是否符合潜在的真实数据分布,因此需要对当前的应用场景本身有一定的经验知识。然而数据本身的概率分布往往是未知的,如果确实想保留缺失数据其他维度提供的信息,可以采用均值填充或者中位数填充。


03机器学习方法填充:

如上文所述,数据本身的概率分布往往是未知的,而通过机器学习算法对缺失数据进行填充可以避免对数据的概率分布有过多的假设。比如当前样本数据维度较多,可以采用随机森林的方法对缺失数据进行填充,能够缓解特征共线性的影响。



数据噪声


数据噪声是指测量变量中的随机错误和偏差,包括错误值或者偏离期望值的孤立点。在监督学习中,数据噪声既会影响输入特征值,也会影响输出结果,当数据噪声出现在输出结果时,将会引入非常大的偏差。为了应对数据噪声,首先要发现数据噪声,噪声检查比较常见的方法有:


01逻辑筛选:

在面向具体的应用场景时,每一个维度的数据均存在逻辑的合理性,如年龄这个维度要求年龄大于0且小于100(大概率情况下满足),因此可以根据维度的逻辑合理性进行筛选。


02箱线图筛选:

箱线图主要是通过分位数对数据噪声进行筛选,如下图所示,其中Q1为1/4分位数,Q3为3/4分位数,箱体长度 IQR=Q3-Q1,一般而言[Q1-1.5IQR,Q3+1.5IQR]为正常值,  [Q1-3IQR,Q1-1.5IQR]为温和异常值,[Q3+1.5IQR,Q3+3IQR]不在此范围内的值为极端异常值。


03聚类方法筛选:

1)  通过聚类的方法,将类似的取值组成群或者簇,远离群或者簇的点视为离群点。

发现数据噪声后,一般的处理方法是剔除数据噪声,删除数据噪声点。



维度灾难


在机器学习(分类器)中,为了得到更好的分类效果,可以通过增加更多的特征,如下图所示,当特征数开始增加时,分类器的效果确实有显著提升,这是因为特征增加后,样本之间开始变得稀疏,能更容易的找到一个超平面进行分割。然而,当特征不断增加时,分类器的效果会变得越来越好吗?答案是令人沮丧的,并不能,当特征数超过一定值的时候,分类器的效果反而会下降。如下图所示,这种变化的趋势称为“维度灾难”。究其原因,是因为训练样本的数目是有限的,随着特征的增加,样本数据在特征空间会变得越来越稀疏,且样本数据稀疏程度分布也不均匀,最终导致分类器效果变差。当然,如果理论上训练的样本无限多时,“维度灾难”是不会发生,但是现实情况下很难有无限数据进行训练,因此我们一般需要根据应用场景和训练数据的规模进行特征选择和空间转换。


01特征选择:

所谓特征选择是尽可能的识别并移除不相关或冗余特征的过程,其目的是筛选出原有特征集合的一个子集,该子集仍然能够合理解释原有的结果。通过特征选择,降低了特征之间的偶然相关性,防止过拟合发生,提高模型的泛化能力,同时也提高了模型的可解释性。常用的特征选择方法主要包含特征相关性检验、通过信息增益比选择特征(C4.5)、L1正则化方法、随机森林方法等。


02空间转换:

特征选择并非应对“维度灾难”的唯一方法,特征选择是通过在所有特征中选取最有效的特征,而空间转换是通过用M个特征去替换原有的N个特征,其中M个特征是有N个特征组合而成。其中最著名也是最流行的降低维度技术的方法就是主成分分析法(PCA),它去除不相关的维度,对N个原始特征进行线性组合,在保持原始数据方差最大化的基础上,尝试寻找低维的子空间。当然,理论上数据方差最大并不一定代表数据最显著的分类信息。在最新的研究中,越来越多的方法去探索特征之间的非线性关系,其中最典型的的方法包括Roweis的Locally Linear Embedding(LLE)方法[1]和Tenenbaum的Isometric Feature Mapping (ISOMAP)方法[2]。

数据离散化


数据离散化是指在连续属性的值域上,将值域划分为若干离散的区间,并用特定的数值代表每个子区间。 在机器学习中,很多算法都要求对特征数据进行离散化,如C4.5、朴素贝叶斯等。通过数据离散化,可以简化数据结构,提高学习效率;此外,还能提高算法的可阐述性,更容易理解和解释特征对结果的影响。目前数据离散化的方法根据是否包含类的信息分为非监督离散化和监督离散化,非监督离散化(如:分箱法)由于不需要知道样本的分类值,想获得理想化的离散结果比较困难,所以一般采用监督离散化(如基于卡方分布和基于熵的离散化),然而实际的数据集中可能连分类值也没有,为此可以先采用聚类算法人为的为数据集添加类标号,再进行监督离散化。


01分箱法:

分箱法是典型的非监督离散化方法,所谓“分箱“,就是根据该特征的属性值划分子区间,根据划分的标准不同,分为等宽分箱法、等频分箱法以及用户自定义法

a) 等宽分箱法:使数据集在整个属性值的区间上均匀分布,即每个区间的长度一个常量,常量为箱子宽度。

b) 等频分箱法:对数据集进行分箱,使得每个箱中的样本数相同。

c) 自定义分箱法:用户可以根据应用场景需要或者经验自定义划分区间,主要用于观察特定区间内的分布情况。


02基于卡方分布离散化:

谈到基于卡方分布的离散化,首先需要了解一下什么是卡方检验,卡方检验又称为独立性检验,用于解决一个特征的两项或者多项分类的实际观察频数和理论次数分布是否一致的问题。而离散化的要求正是相邻区间分布存在显著差异。基于卡方检验的离散化算法主要有自上而下的卡方分裂算法和自下而上的卡方合并算法。

a) 卡方分裂算法:卡方分裂算法将整个特征的取值空间做为一个区间,然后对该区间进行划分,把一个区间划分为两个相邻区间,划分的方法是计算取值空间中每个值的卡方值,当卡方值最大时,设为分裂点,对分裂点相邻区间进行卡方检验,如果卡方检验显著   ,表示相邻区间分布差异较大,需要分裂,如果卡方检验不显著  ,表示相邻区间分布差异不明显,停止分裂。

b) 卡方合并算法(ChiMerge算法)和卡方分裂算法恰恰相反,ChiMerge算法是一种基于卡方值自下而上的方法, 开始时对特征的取值空间进行排序,每个值属于一个区间,然后计算每一对相邻区间的卡方值,选取卡方值最小的一对相邻区间进行卡方检验, 如果卡方检验显著,区间分布差异较大,停止合并,反之如果卡方检验不显著,区间分布差异较小可以合并。


03基于熵的离散化:

基于熵的离散化也是一种自上而下的分裂算法,首先计算整个特征取值空间的熵,把特征中每个值做为分裂点,将数据分成两部分,寻找一种产生最小熵的分法。在两个区间中,对较大熵的区间继续划分,当分裂效果不显著或者满足用户要求区间个数时停止分裂。

无论是非监督离散化还是监督离散化,异常值对整个离散化过程影响均较大,因此在数据离散化之前有必要进行上文所述的数据噪声处理。当然,数据离散化在带来如此多便利的同时也带来了数据信息的丢失,因此如何最小化信息丢失一直是数据离散化的主要目标。然而最优的数据离散化是一个NP完全问题,目前学术界一直在研究一些替代方法,可以参考[3][4]。



数据样本不均衡


在监督学习的很多应用中,不同类别的先验概率存在非常大的差异,如金融风控领域,绝大部分的样本中,个人的信用都是较好的,只有很少一部分人信用较差,这就是所谓的数据样本不均衡问题,该问题会导致标准的分类学习算法倾向于去选择样本较多的类,使得对于样本较少类的分类结果错误率较高。虽然很多机器学习算法本身针对数据样本不均衡问题进行了处理,但是从数据源进行重新采样来达到样本均衡的更有优势,是的在机器学习的过程中不在依赖具体的算法。

样本重新采样主要分为两类,一类是过采样,即通过复制样本或者增加新样本来增加少数类样本的数量;另一类是欠采样,即删除部分样本来减少多数类样本数量。非启发性的随机过采样会导致过拟合,随机欠采样可能会丢失关键信息,因此,一般采用启发性重新采样方法,目前较为成熟的启发性算法是SMOTE方法[5]和OSS方法[6]


01SMOTE算法:

SMOTE算法的基本思想是对少数类样本进行分析并根据分析结果人工合成新样本添加进数据集中。SMOTE算法的流程如下:

a) 随机选择少数类中的一个样本 ,计算该样本到其他少数类样本的欧氏距离,得到k近邻。

b) 根据数据样本不均衡的比例确认采样倍率N,从该少数类样本的k近邻中随机选择若干个样本

c) 对于每一个随机选出的近邻 ,按照如下公式构建新的样本,将新样本添加进数据集:


xnew=xi+rand(0,1)*|xi-xj|


尽管SMOTE算法提供了一种有效解决样本不均衡问题的方法,但是由于没有考虑多数类节点的分布,将会增加不同类之间的重叠,因此很多基于SMOTE算法的改进算法被提出,如Bunkhumpornpat 的SL-SMOTE算法[6],通过计算少数节点的安全级别(即该节点k近邻中少数类节点的数目),判定该节点是否为数据噪声;Batista等人提出可以将SMOTE算法和数据清洗方法相结合,在采用SMOTE算法增加少数类样本后,采用Wilson Editing算法[8]删除重叠的节点。


02OSS算法:

一般而言,欠采样方法相对于过采样方法不但简单,往往更有效,当然理论上来说,随机欠采样方法可能会丢失部分重要信息,因此,一些方法如OSS方法提供了一种更智能的选择和删除方法,尽量删除冗余和噪声数据。OSS算法的主要思想是认为在少数类样本边界的多数类样本为噪声数据,在进行欠采样时优先剔除。



小结



目前,数据的规模、种类的增长速度越来越快,给数据的分析和处理带来了巨大的挑战,而数据的预处理首当其冲。本文简要介绍了数据预处理过程中的一些常见问题的解决方法,并分析了不同解决方法的利弊。有人曾说过,数据决定了机器学习表现的上限,而所有的机器学习算法只是在逼近这个上限而已,这足以说明数据预处理在机器学习领域的重要性,当然数据预处理作为一项庞大的复杂的工程,还有许多更新更好的方法,希望能和大家一起交流学习。



参考文献



[1] Roweis S, Saul L. Nonlinear dimensionality reduction by locally linear embedding. Science. 2000;290(5500):2323-326.

[2] Tenenbaum JB, Silva V, Langford JC. A global geometric framework for nonlinear dimensionality reduction. Science. 2000; 290(5500):2319-323.

[3] Garcia S, Luengo J, Saez JA, Lopez V, Herrera F. A Survey of Discretization Techniques: Taxonomy and Empirical Analysis in Supervised Learning. IEEE Trans Knowl Data Eng. 2013; 25(4):734-50.

[4] Yang Y, Webb GI, Wu X. Discretization methods. In: Data Mining and Knowledge Discovery Handbook. Germany: Springer; 2010. p. 101-16.

[5] Chawla NV, Bowyer KW, Hall LO, Kegelmeyer WP. SMOTE: synthetic minority over-sampling technique. J Artif Intell Res. 2002;16(1):321-57.

[6] Bunkhumpornpat, C., Sinapiromsaran, K., Lursinsap, C.: Safe-Level-SMOTE: Safe-Level-

Synthetic Minority Over-Sampling TEchnique for Handling the Class Imbalanced Problem.

In: Theeramunkong, T., Kijsirikul, B., Cercone, N., Ho, T.-B. (eds.) PAKDD 2009. LNCS,

vol. 5476, pp. 475-482. Springer, Heidelberg (2009)

[7] Batista, G.E.A.P.A., Prati, R.C., Monard, M.C.: A study of the behavior of several methods

for balancing machine learning training data. SIGKDD Explorations Newsletter 6(1), 20–29

(2004) 

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 营运车判定查询

    输入车牌号码或车架号,判定是否属于营运车辆。

    输入车牌号码或车架号,判定是否属于营运车辆。

  • 名下车辆数量查询

    根据身份证号码/统一社会信用代码查询名下车辆数量。

    根据身份证号码/统一社会信用代码查询名下车辆数量。

  • 车辆理赔情况查询

    根据身份证号码/社会统一信用代码/车架号/车牌号,查询车辆是否有理赔情况。

    根据身份证号码/社会统一信用代码/车架号/车牌号,查询车辆是否有理赔情况。

  • 车辆过户次数查询

    根据身份证号码/社会统一信用代码/车牌号/车架号,查询车辆的过户次数信息。

    根据身份证号码/社会统一信用代码/车牌号/车架号,查询车辆的过户次数信息。

  • 风险人员分值

    根据姓名和身份证查询风险人员分值。

    根据姓名和身份证查询风险人员分值。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future