R语言数据挖掘实战系列(4)——数据预处理
数据预处理一方面是要提高数据的质量,另一方面是要让数据更好地适应特定的挖掘技术或工具。数据预处理的主要内容包括数据清洗、数据集成、数据变换和数据规约。
一、数据清洗
1.缺失值处理
一般来说,缺失值的处理包括两个步骤,即缺失数据的识别和缺失值处理。在R语言中缺失值通常以NA表示,可以使用函数is.na()判断缺失值是否存在,另外函数complete.cases()可识别样本数据是否完整从而判断缺失情况。在对是否存在缺失值进行判断之后需要进行缺失值处理,常用的方法有删除法、替换法、插补法等。
(1)删除法
根据数据处理的不同角度可分为删除观测样本、删除变量两种。删除观测样本又称为行删除法,在R中可通过na.omit()函数移除所有含有缺失数据的行,这属于以减少样本量来换取信息完整性的方法,适用于缺失值所占比例较小的情况;删除变量适用于变量有较大缺失且对研究目标影响不大的情况,意味着要删除整个变量,在R中可通过data[,-p]来实现,其中data表示目标数据集,p表示缺失变量所在的列。
(2)替换法
变量按属性可分为数值型和非数值型,二者的处理办法不同:如果缺失值所在变量为数值型,一般用该变量在其他所有对象的取值的均值来替换变量的缺失值;如果为非数值型变量,则使用该变量其他全部有效观测值的中位数或者众数进行替换。
(3)插补法
在面对缺失值问题,常用的插补法有回归插补、多重插补等。回归插补法利用回归模型,将需要插值补缺的变量作为因变量,其他相关变量作为自变量,通过回归函数lm()预测出因变量的值来对缺失变量进行补缺;多重插补法的原理是从一个包含缺失值的数据集中生成一组完整的数据,如此进行多次,从而产生缺失值的一个随机样本,R中的mice函数包可以用来进行多重插补。
2.异常值处理
在异常值处理之前需要对异常值进行识别,一般多采用单变量散点图或是箱型图来达到目的。在R中,使用函数dotchart()、boxplot()实现绘制单变量散点图与箱型图。
表4-1 异常值处理常用方法
异常值处理方法 | 方法描述 |
删除含有异常值的记录 | 直接将含有异常值的记录删除 |
视为缺失值 | 将异常值视为缺失值,利用缺失值处理的方法进行处理 |
平均值修正 | 可用前后两个观测值的平均值修正该异常值 |
不处理 | 直接在具有异常值的数据集上进行挖掘建模 |
很多情况下,要先分析异常值出现的可能原因,再判断异常值是否应该舍弃,如果是正确的数据,可以直接在具有异常值的数据集上进行挖掘建模。
二、数据集成
数据集成就是将多个数据源合并存放在一个一致的数据存储中的过程。
在R中,数据集成是指将存储在两个数据框中的数据以关键字为依据,以行为单位做列向合并,可通过函数merge()实现,基本形式为merge(数据框1,数据框2,by='关键字'),合并后的新数据自动按关键字取值的大小升序排列。
实体识别
实体识别是从不同数据源识别出现实世界的实体,任务是统一不同数据源的矛盾之处,如同名异义、异名同义、单位不统一
冗余属性识别
数据集成往往造成数据冗余,如同一属性多次出现、同一属性命名不一致,导致重复。
有些冗余属性可以用相关分析检测。给定两个数值型的属性A和B,根据其属性值,用相关系数度量一个属性在多大程度上蕴含另一个属性。
三、数据变换
数据变换主要是对数据进行规范化处理,连续变量的离散化以及变量属性的构造,将数据转换成“适当的”形式,以满足挖掘任务及算法的需要。
简单函数变换
简单函数变换就是对原始数据进行某些数学函数变换,如平方、开方、取对数、差分运算等。简单的函数变换常用来将不具有正态分布的数据变换成具有正态分布的数据。
规范化
为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。
数据规范化对于基于距离的挖掘算法尤为重要。
(1)最小-最大规范化:也称为离差标准化,是对原始数据的线性变换,将数值映射到[0,1]。这种方法的缺点是若数据集中且某个数值很大,则规范化后各值会接近于0,并且将会相差不大。若将来遇到超过目前属性[min,max]取值范围时,会引起系统出错,需要重新确定min和max。
(2)零-均值规范化:也叫标准差标准化,经过处理的数据的均值为0,标准差为1。这种方法是当前用得最多的数据的标准化方法,但是均值和标准差受离群点的影响较大,因此通常需要进行修改。首先用中位数M取代均值,其次用绝对标准差取代标准差。
(3)小数定标规范化:通过移动属性值的小数位数,将属性值映射到[-1,1],移动的小数位数取决于属性值绝对值的最大值。
连续属性离散化
(1)离散化的过程
连续属性的离散化就是在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。所以,离散化涉及两个子任务:确定分类数以及如何将连续属性值映射到这些分类值。
(2)常用的离散化方法
常用的离散化方法有等宽法、等频法和(一维)聚类。
等宽法:将属性的值域分成具有相同宽度的区间、区间的个数由数据本身的特点决定,或者由用户指定,类似于制作频率分布表。
等频法:将相同数量的记录放进每个区间。缺点是对离群点比较敏感,倾向于不均匀地把属性值分布到各个区间。
(一维)聚类:包括两个步骤,首先将连续属性的值用聚类算法进行聚类,然后再将聚类得到的簇进行处理,合并到一个簇的连续属性值并做同一标记。聚类分析的离散化方法也需要用户指定簇的个数,从而决定产生的区间数。
属性构造
为了便于提取更有用的信息,挖掘更深层次的模式,提高挖掘结果的精度,需要利用已有的属性集构造出新的属性,并加入到现有的属性集合中。
小波变换
小波变换是一种新型的数据分析工具,具有多分辨率的特点,在时域和频域都具有表征信号局部特征的能力,通过伸缩和平移等运算过程对信号进行多尺度聚焦分析,提供了一种非平稳信号的时频分析手段,可以由粗到细地逐步观察信号,从中提取有用信息。
能够刻画某个问题的特征量往往是隐含在一个信号中的某个或者某些分量中,小波变换可以把非平稳信号分解为表达不同层次、不同频带信息的数据序列,即小波系数。选取适当的小波系数,即完成了信号的特征提取。
(1)基于小波变换的特征提取方法
基于小波变换的特征提取方法有:基于小波变换的多尺度空间能量分布特征提取、基于小波变换的多尺度空间的模极大值特征提取、基于小波包变换的特征提取、基于适应性小波神经网络的特征提取。
表4-2 基于小波变换的特征提取方法
基于小波变换的特征提取方法 | 方法描述 |
基于小波变换的多尺度空间能量分布特征提取方法 | 各尺度空间内的平滑信号和细节信号能提供原始信号的时频局域信息,特别是能提供不同频段上信号的构成信息。把不同分解尺度上信号的能量求解出来,就可以将这些能量尺度顺序排列,形成特征向量供识别用 |
基于小波变换的多尺度空间的模极大值特征提取方法 | 利用小波变换的信号局域化分析能力,求解小波变换的模极大值特征来检测信号的局域奇异性,将小波变换模极大值的尺度参数s、平移参数t及其幅值作为目标的特征量 |
基于小波包变换的特征提取方法 | 利用小波分解,可将时域随机信号序列映射为尺度域各子空间内的随机系统序列,按小波包分解得到的最佳子空间内随机系数序列的不确定性程度最低,将最佳子空间的熵值及最佳子空间在完整二叉树中的位置参数作为特征量,可以用于目标识别 |
基于适应性小波神经网络的特征提取方法 | 基于适应性小波神经网络的特征提取方法可以把信号通过分析小波拟合表示,进行特征提取 |
(2)小波基函数
小波基函数是一种具有局部支集的函数,并且平均值为0,小波奇函数满足Ψ(0)=∫ψ(t)dt=0。常用的小波基有Haar小波基、db系列小波基等。
(3)小波变换
(4)基于小波变换的多尺度空间能量分布特征提取方法
应用小波分析技术可以把信号在个频率波段中的特征提取出来,基于小波变换的多尺度空间能量分布特征提取方法是对信号进行频带分析,再分别以计算所得的各个频带的能量作为特征向量。
四、数据规约
数据规约可以产生更小的但保持原数据完整性的新数据集。数据规约的意义在于:降低无效、错误数据对建模的影响,提高建模的准确性;少量且具有代表性的数据将大幅缩减数据挖掘所需的时间;降低储存数据的成本。
属性规约
属性规约通过属性合并来创建新属性维数,或者直接通过删除不相关的属性(维)来减少数据维数,从而提高数据挖掘的效率、降低计算成本。属性规约的目标是寻找出最小的属性子集并确保新数据子集的概率分布尽可能地接近原来数据集的概率分布。属性规约的常用方法有:
合并属性:将一些旧属性合为新属性;
逐步向前选择:从一个空属性集开始,每次从原来属性集合中选择一个当前最优的属性添加到当前属性子集中。直到无法选择出最优属性或满足一定阈值约束为止;
逐步向后删除:从一个全属性集开始,每次从当前属性子集中选择一个当前最差的属性并将其从当前属性子集中消去。直到无法选择出最差属性为止或满足一定阈值约束为止;
决策树归纳:利用决策树的归纳方法对初始数据进行分类归纳学习,获得一个初始决策树,所有没有出现在这个决策树上的属性均可认为是无关属性,因此将这些属性从初始集合中删除,就可以获得一个较优的属性子集;
主成分分析:用较少的变量去解释原始数据中的大部分变量,即将许多相关性很高的变量转化成彼此相互独立或不相关的变量。
数值规约
数值规约通过选择替代的、较小的数据来减少数据量,包括有参数方法和无参数方法两类。有参数方法是使用一个模型来评估数据,只需存放参数,而不需要存放实际数据,如回归(线性回归和多元回归)和对数线性模型(近似离散属性集中的多维概率分布)。无参数方法需要存放实际数据,如直方图、聚类、抽样。
(1)直方图
属性A的直方图将A的数据分布划分为不相交的子集或桶。如果每个桶只代表单个属性值/频率对,则该桶成为单桶。通常,桶表示给定属性的一个连续区间。R中用函数hist()绘制直方图,用以说明变量取值的分布情况。
(2)聚类
聚类技术将数据元祖(即记录,数据表中的一行)视为对象。它将对象划分为簇,使一个簇中的对象相互“相似”,而与其他簇中的对象“相异”。在数据规约中,用数据的簇替换实际数据。该技术的有效性依赖于簇的定义是否符合数据的分布性质。R中常用的聚类函数有hclust()、kmeans(),前者在使用系统聚类法时使用,后者为快速聚类的函数。
(3)抽样
抽样也是一种数据规约技术,它用比原始数据小得多的随机样本(子集)表示原始数据集。抽样类型有:有放回简单随机抽样、无放回简单随机抽样、聚类抽样、分层抽样等。用于数据规约时,抽样最常用来估计聚集查询的结果。在指定的误差范围内,可以确定(使用中心极限定理)估计一个给定的函数所需的样本大小。通常样本的大小s相对于N非常小。
(4)参数回归
简单线性模型和对数线性模型可以用来近似给定的数据。(简单)线性模型对数据建模,使之拟合一条直线,在R中使用函数lm()即可实现。
对数线性模型:用来描述期望频数与协变量(指与因变量有线性相关并且探讨自变量与因变量关系时通过统计技术加以控制的变量)之间的关系。对数线性模型一般用来近似离散的多维概率分布。
五、R语言主要数据预处理函数
表4-3 R主要数据预处理函数
函数名 | 函数功能 | 所属函数包 |
lm() | 利用因变量与自变量建立线性回归模型 | 通用函数包 |
predict() | 依据已有模型对数据进行预测 | 通用函数包 |
mice() | 对缺失数据进行多重插补 | mice函数包 |
which() | 返回服从条件的观测所在位置 | 通用函数包 |
scale() | 对数据进行零-均值规范化 | 通用函数包 |
rnorm() | 随机产生服从正态分布的一列数 | 通用函数包 |
ceiling() | 向上舍入接近的整数 | 通用函数包 |
kmeans() | 对数据进行快速聚类分析 | 通用函数包 |
dwt() | 对数据进行小波分解 | waveslim函数包 |
princomp() | 对指标变量矩阵进行主成分分析 | 通用函数包 |
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。