![4a5742f6c9a3e1390c564a78835e61ba.png](https://i-blog.csdnimg.cn/blog_migrate/87397673bae60025c264fc943851023f.jpeg)
文章来源:Li C. Preprocessing Methods and Pipelines of Data Mining: An Overview[J]. arXiv preprint arXiv:1906.08510, 2019.
摘要-数据挖掘是关于从现有数据集中获取新知识。 但是,现有数据集中的数据可能分散,嘈杂,甚至不完整。尽管在开发或微调数据挖掘模型上花费了很多精力,以使它们对输入数据的噪声更加健壮,但它们的质量仍在很大程度上取决于其质量。本文从数据挖掘流程的概述开始,其中简要介绍了数据挖掘任务中的过程。然后概述了数据预处理技术,包括获取,清洗,探索,建模,可视化。本文讨论了详细的预处理方法及其对数据挖掘模型的影响。
1. 介绍
数据挖掘是一个知识获取过程:它从各种数据源获取数据,最后将数据转换为知识,从而提供对其应用领域的洞察力。数据挖掘流程是端到端数据挖掘系统的典型示例:它们是所有数据挖掘过程的集成,可以直接将知识从数据源传递给人类。
数据预处理的目的是使数据更易于数据挖掘模型处理。数据质量可能会对数据挖掘模型产生重大影响。可以认为,数据和特征已经设置了可以获取的知识的上限,并且数据挖掘模型仅近似于上限。发明了各种预处理技术,以使数据满足模型的输入要求,提高预测目标的相关性,并使模型的优化步骤更容易。
从自然界获得的原始数据通常格式不正确。问题包括缺失值的出现(例如,患者未进行所有检查),重复项(例如,年收入和月收入),离群值(例如,年龄为负1)以及矛盾(例如,数据集中的性别是男性且已怀孕)。尽管现有的预处理技术不能保证解决所有这些问题,但它们至少可以纠正其中的一些问题并提高模型的性能。
数据类型和数据分布通常在发送到数据挖掘模型之前进行转换。数据转换的目的包括使数据满足模型的输入要求,消除数据的噪声,并使数据的分布更适合在模型训练步骤中应用优化算法。
数据挖掘模型的输入可能是巨大的:它们可能有太多的维度或数量巨大,这将使数据挖掘模型在传输和存储数据时难以训练或引起麻烦。数据缩减技术可以通过对维度进行缩减(称为维度缩减)或对数据量进行缩减(称为实例选择和采样)来减少问题。
为了实现对数据的预处理,Python和R是最受欢迎的工具。使用scikit-learn 和PreProcess 之类的大量程序包,即使不考虑其细节,也可以实现本文涵盖的大多数预处理算法。
在以下部分中,将介绍数据挖掘流程主要过程。从第2节开始,我们将重点介绍数据预处理工作中的步骤:第3节将介绍数据清洗中使用的技术,而第4节将介绍数据转换技术。在最后一节中,将讨论数据缩减技术。
2. 数据挖掘流程
数据挖掘流程是数据挖掘任务中所有过程的集成。尽管大多数数据已经存在于数据库,数据仓库或其他类型的数据源中,但应采取各种步骤以使人们更容易理解它们。数据挖掘流程的说明如图1所示。一般而言,关键过程包括获取,清洗,探索,建模,可视化。这些过程称为“ OSEMN”。但是,请注意,流程在现实世界中不是线性过程,而是一项连续且长期的任务。清洗和建模过程中的方法必须进行测试和改进,获取过程可能必须适合于不同种类的数据源,并且数据的可视化和解释可能必须针对其听众进行调整,从而满足听众的需求。在本节的其余部分,将讨论这些过程的详细信息。
![a6ee19ddfaf2fa859242e025e24013c5.png](https://i-blog.csdnimg.cn/blog_migrate/2f28a2d023f00d29493fa16f9122a146.jpeg)
A. 数据获取
获取数据是数据挖掘中最基本的步骤,因为数据本身决定了数据可能包含的知识。数据库和数据仓库是数据的主要来源,可以使用查询语言(通常是SQL)来获取结构化数据。数据仓库是专门为组织,理解和利用数据而设计的:它们通常是与运营数据库分离的系统,具有时变结构以及使后续分析工作容易进行的结构,并且大多数重要的是,非易失性。
可以将获取的数据存档为文件,并直接用于后续过程。它们也可以重新格式化并存储在数据库或数据仓库中,以备将来进行数据挖掘任务时使用。
在过去以及现在,在大多数情况下,无论如何获取数据,我们都将数据获取步骤视为获取数据集的过程。但是,如今,新数据正以极快的速度生成:每天每一秒钟都会创建大量数据。某些服务,例如民意监测和推荐系统,确实需要新生成的数据:它们对准时性有强烈的要求。在这种情况下,“流”的概念比数据集更为重要。流是数据的实时表示。在这个概念下,开发了可以在线运行的模型和算法。对于流挖掘任务,数据获取的目标不再是获取数据集,而是获取实时输入源。
B. 数据清洗
清洗是关于数据的清洗和预处理,目的是使数据具有统一的格式并易于建模。 至于数据清洗的详细概念和技术,读者可以参考本文的以下部分,因为其中大部分将在数据预处理概述中介绍。
C. 数据探索
在对数据建模之前,人们可能想了解数据的基本分布,变量之间的相关性以及它们与标签的相关性。可以在此步骤中进行假设。例如,人们可能认为吸烟与肺癌高度相关。这些假设很重要,因为它们将为数据挖掘任务中的其他过程提供指示,包括帮助选择合适的模型,并帮助证明您在解释数据时的工作合理性。
探索数据和验证假设的工具通常是统计分析和数据可视化。统计分析为我们提供了假设不正确的理论概率,即显着性水平,而数据可视化工具(例如ggplot 和D3 )给我们带来了有关数据分布的印象,有助于人们从概念上验证他们的假设。另外,在可视化步骤中可能会发现在假设步骤中被忽略的新模式。
D. 数据建模
数据源中存在基础模式,通过建模,可以使用数据挖掘模型显式表示模式。对于数据挖掘任务,建模通常会将数据分为训练集和测试集,从而可以在相对“新”的数据集上对模型的准确性进行评分。如果模型包含超参数,例如K近邻居(KNN)模型中的参数k,则将创建交叉验证集以获取最佳的超参数集。
对于大多数数据挖掘模型,需定义损失函数为。通常,如果模型表现良好损失函数值低。此外,它通常具有特殊的功能,例如凸度,这使得基于梯度的优化算法的效果更好。通过可训练的参数,模型的训练步骤是调整参数,以便它的训练数据损失更低。具体定义函数的损失取决于模型本身和任务。分类任务中的回归均方误差和交叉熵是通常采用的损失函数。数据挖掘模型种类繁多;他们的任务包括聚类,分类和回归。模型的复杂性也各不相同:简单的模型(例如线性回归)仅具有少量参数,少量的数据将使训练步骤收敛,而复杂的模型(例如AlexNet)具有数百万个参数,并且它们的训练也需要庞大的数据集。但是,复杂并不意味着更好:应根据任务的预测目标,数据集大小,数据类型等来确定模型。有时,有必要对一个数据集运行不同的模型并找到最合适的数据挖掘模型。
E. 挖掘知识可视化
尽管先前的步骤通常是纯科学,但解释步骤却更具人文性。 可以从输入数据中提取知识,但是要花费更多的时间才能说服人们接受这些知识。 尽管复杂的统计数据和模型使工作看起来更加专业,但对于外行而言,图表,表格和正确解释的准确性使其更易于理解和接受。 此外,诸如讲故事和表达情商等社交技能也很重要:此过程与人有关,而不与数据有关。
3. 数据清洗
从自然界获得的数据通常格式不正确。一些问题(例如异常值)可能会影响数据挖掘模型并产生有偏差的结果。例如,离群值可能会通过使数据的分布实质上失真而影响K-Means聚类算法。如果不处理其他问题,将无法通过模型来分析数据,例如数据向量中的非数字(nan)值。为了解决该问题,发布了数据清洗技术,包括缺失值处理和离群值检测。它们使收集的数据适合作为模型的输入。
A. 缺失值处理
值丢失是数据集数据不完整的一种典型类型。大多数数据挖掘模型将无法容忍其输入数据的缺失值:这些值不能用于比较,不能用于分类,也不能用于算术算法。因此,有必要在将数据集推入数据挖掘模型之前处理缺失值。处理缺失值的最简单方法是丢弃整个样本。如果缺失值在数据集中的比例不重要,则此方法有效,但是,如果缺失值的数量不适合忽略,或者每个属性的缺失值的百分比不同,则使用缺失值将大大减少数据集的数量,丢弃的样本中包含的信息将无法利用。处理缺失值的另一种方法是填充它们,有多种方法可以找到合适的值来填充缺失值,其中一些方法如下。
1)使用特殊值表示缺失:有时缺失值本身具有某些含义。例如,在患者的医疗报告中,缺少尿酸值意味着患者未通过肾功能检查。因此,使用诸如负1之类的某个值是有意义的,因为它们可以像正常值一样操作,同时在数据集中具有特殊含义。
2)使用属性统计信息进行填充:可以从缺失值的相应属性中的非缺失值中获取诸如均值,中位数或众数之类的统计信息。据说对于偏斜的数据集,中位数将是一个更好的选择。但是,此技术并未考虑样本的其他非缺失属性。
3)预测具有已知属性的值:如果我们假设,属性之间存在相关性,则可以将填充缺失值建模为预测问题:使用其他样本作为训练数据来预测具有非缺失属性的值。预测方法包括回归算法,决策树和K-Means。
4)分配所有可能的值:对于分类属性,给定示例E,其中m的缺失值包含m个可能值,则可以用m个新示例替换E1,E2,... Em。这种缺失值填充技术假定该示例中的缺少属性无关紧要。因此,可以是其域中的任何值。
在工作中,对十个数据集测试了不同的缺失值填充技术,以运行简单和扩展的分类方法。结论表明,C4.5决策树方法表现最佳,忽略具有缺失值的样本,分配所有可能的值也表现良好,而以模式填充这些值表现最差。但是,由于数据集的特征,缺失值填充技术的性能可能会有所不同。结果,大多数技术都值得尝试进行数据挖掘任务。
B. 异常值检测
离群值是指与大多数其他样本有很大距离的数据样本。尽管这种罕见情况并不一定意味着错误(例如,年龄= 150),但是大多数异常值是由测量错误或错误记录引起的,因此,忽略很少出现的情况不会带来很大的危害。尽管某些模型对异常值具有鲁棒性,但是在数据预处理工作中仍建议使用异常值检测。
基于统计的离群值检测算法是最常用的算法之一,它们假设数据为基础分布[12],并将对应的概率密度低于某个阈值的数据示例视为离群值。由于在大多数情况下基本分布是未知的,因此正态分布是很好的替代,其参数可以通过数据的平均值和标准偏差来估计。如(1)所示,马氏距离是两个数据样本之间与标度无关的距离。可以通过比较每个样本之间的马氏距离和所有样本的平均值来确定异常值。箱形图作为另一种基于统计的离群值检测技术,可以通过绘制下四分位数和下四分位数来给出离群值的图形表示。
![59e0b46faa14909749aaedf7579b1560.png](https://i-blog.csdnimg.cn/blog_migrate/f92d2fad1e6fce887e0e7d5cdd87a306.png)
在不假设数据分布的情况下,基于距离的离群值检测算法可以通过分析每两个样本之间的距离来检测离群值,从而确定离群值。简单的基于距离的离群值检测算法不适用于大型数据集,因为对于m个维度的n个样本,其复杂度通常为O(n2m),并且每次计算都需要扫描所有样本。 然而,基于扩展单元的离群值检测算法保证了数据集体积上的线性复杂度,并且不超过三个数据集扫描。 实验表明,该算法最适合维数小于4的数据集。
有时,考虑到时间和空间局部性,离群值可能不是一个单独的点,而是一个很小的簇。 基于聚类的离群值检测算法将较小的聚类视为离群聚类,并通过删除整个聚类来清洗数据集。
4. 数据转换
数据在不同属性中的表示形式有所不同:有些是分类的,而有些是数字的。对于分类值,它们可以是标称值,二进制或序数;对于数值数据,它们还可以具有不同的统计特征,包括平均值和标准偏差。但是,并非所有类型的数据都能满足数据挖掘模型的要求。同样,数据属性之间的差异可能给随后的数据挖掘模型优化工作带来麻烦。数据转换涉及修改数据的表示形式,以使其有资格成为数据挖掘模型的输入,并使数据挖掘模型的优化算法更容易生效。
A. 数字化
分类值在自然界中广泛存在,某些操作(例如计算组之间的熵)可以直接在分类数据上完成。但是,大多数操作不适用于分类数据。因此,应该将分类数据编码为数字数据,使其符合模型的要求。采用以下编码技术进行数字化。
• 一键编码:将分类数据的每个可能值视为一个维,并将1用作样本所属类别的维,否则为0。
• 顺序编码:对于分类数据的每个可能值,为其分配唯一的数字索引。
• 定制编码:定制编码基于为特定任务设计的规则。例如,word2vec 是一种编码,可以在考虑单词含义的情况下将一个单词转换为300维向量。
通常,一键编码适用于可能值较少的分类数据;如果可能的值太多(例如英语单词),则编码的数据集将庞大且稀疏。顺序编码不会产生巨大的输出,但是编码数据不像一键编码数据那么容易分离。定制编码,如果经过精心设计,通常可以在某种任务上表现良好,但是对于其他任务,应重新设计编码,并且其设计可能会花费很多精力。
B. 离散化
有时采用离散化数据来满足模型输入的要求,例如朴素贝叶斯(Naive Bayes),要求其输入是可数的。而且,它可以消除噪音。数据离散化不一定会使数据分类,而是使连续值可数。数据的离散化可以通过无监督的学习方法来实现,例如将数据放入等宽或等频率的时隙中,这被称为合并或聚类。一些监督学习方法,例如决策树,也可以用于数据离散化。
C. 归一化
由于不同的属性通常采用不同的单位制,因此它们的平均值和标准偏差通常不相同。但是,数值上的差异会使某些属性看起来更“重要”,而其他属性则没有。这种印象可能会对某些型号造成麻烦;典型的例子之一是KNN:较大的值会强烈影响距离比较,从而使模型主要考虑属性倾向于具有较大的数值。此外,对于神经元网络模型,不同的单位系统也将对梯度下降优化方法产生负面影响,迫使其采用较小的学习率。为了解决上述问题,发布了多种标准化方法,以下列出了其中一些。
1) Min-max规范化:Min-max规范化用于将属性从其范围[lb,ub]映射到另一个范围[lbnew,ubnew];目标范围通常为[0,1]或[-1,1]。对于具有值v的样本,归一化值v'如(2)所示。
![a3b53869a9b22cf7b70d91edddfbf1d4.png](https://i-blog.csdnimg.cn/blog_migrate/420933f4b63ef83645d6b427a26766de.png)
2) Z分数归一化:如果属性的基础范围未知或存在异常值,则最小-最大归一化是不可行的,或者可能会受到严重影响。 另一种标准化方法是对数据进行转换,以使其平均值为0,标准差为1。 给定属性的均值μ和标准偏差σ,则转换表示为(3)。
![bf7e38ff3a4836735e13f742c29cbfdb.png](https://i-blog.csdnimg.cn/blog_migrate/cd3053473437438d1497d870ab64c8cd.jpeg)
注意,如果μ和σ未知,则可以用样本均值和标准差代替它们。
3) 十进制缩放规范化:实现规范化的一种更简单的方法是移动数据的浮点数,以使属性中的每个值的绝对值都小于1,如(4)所示进行转换。
![8c0d6450b657ab4d91b575626561708c.png](https://i-blog.csdnimg.cn/blog_migrate/9f8c305359cf2ea300b46c76d3de2ddf.jpeg)
在某些情况下,不同的属性具有相同或相似的单位系统,例如RGB彩色成像的预处理。 在这些情况下,没有必要进行标准化。 但是,如果不能保证,仍建议对所有数据挖掘任务进行标准化。
D. 数值变换
数据集上的转换可以帮助获取其他属性。通过转换获得的这些特征对于某些具有较高拟合潜力的数据挖掘模型(例如神经网络)可能并不重要。但是,对于参数较少的相对简单的模型,例如线性回归,转换后的特征确实可以帮助模型获得更好的性能(如图2所示),因为它们可以提供属性之间关系的其他指示。转换对于科学发现和机器控制也必不可少。
![5ec062a8274735b9c2b34e871fa30ecd.png](https://i-blog.csdnimg.cn/blog_migrate/b2efb88af90f0961879644269c18e22c.png)
通常,给定属性集{a1,a2,…,ap},数值变换可以表示为(5)。 从理论上讲,f可以是任何函数,但是,由于输入数据是有限的,因此f可以采用多项式形式。
![61327836a7bb99fe66a5ed5be816249b.png](https://i-blog.csdnimg.cn/blog_migrate/10540b8621c3d73d20e051c4dac0613a.png)
f的常用表示形式包括基于多项式的变换,基于近似的变换,秩变换和Box-cox变换。变换公式中的参数可以通过主观定义(对于人们非常了解属性和标签之间的关系的情况),粗暴搜索或通过应用最大似然方法来获得。
5. 数据降维
数据仓库或数据集中的数据量可能很大,在执行数据挖掘任务时会给数据存储和处理带来困难,而并非每个模型都需要大量的数据来训练。另一方面,尽管数据可能具有很多属性,但可能存在不相关的特征以及特征之间的相互依赖性。数据缩减是一种有助于减少数据集的数量或维数或两者兼有的技术,从而使模型的学习过程更有效,并帮助模型获得更好的性能,包括防止过度拟合问题并修复歪斜的数据分配。
A. 尺寸缩小
降维技术是关于降低数据样本的维数,从而减少数据的总大小。由于减少了样本的属性数量,因此其中包含的信息较少。一个好的降维算法将保留更多的常规信息:这可能会使模型变得更加难以拟合。
一些降维技术对数据集进行降维转换,生成新的数据样本,这些样本具有比以前更少的属性。转换具有不同的标准。主要成分分析称为PCA,可以在保持最大数据方差的同时减小数据量。这是通过将矩阵A =(a1,a2,...,ap)T乘以数据集X并保持前k个维度(ai代表归一化特征向量对应于第i个最大值,来实现的数据集协方差矩阵的特征值)。相比之下,线性判别分析(LDA)则是为了最大程度地提高成分分离等级的成分轴。 LDA的实现与PCA相似;唯一的区别是它将协方差矩阵替换为样本的分散矩阵。图3给出了PCA和LDA之间差异的图形说明。在相对更多的情况下,LDA优于PCA。当数据量较小或数据采样不均匀时,PCA可能会优于LDA 。其他降维算法包括因子分析(假设较低维的基础分布),投影追踪(测量非高斯性的方面)和小波变换。
![b27634e4302eff7b033f68a6cadb9867.png](https://i-blog.csdnimg.cn/blog_migrate/ec929dd0044011e9b07dcb30fe0076cd.jpeg)
特征选择是另一种降维技术:它是从数据集中删除无关或相关的属性,同时保持其他相对独立的属性不变。特征选择不仅仅是简单地选择与变量预测具有更大相关性的特征,还应考虑属性之间的关系:目标是找到足够好的特征子集进行预测。特征选择方法可以分为以下三种类型。
•过滤器:根据属性级别标准直接选择功能,包括信息增益,相关性得分或卡方检验。 筛选方法未考虑数据挖掘模型。
•包装器:根据其在数据挖掘模型中的性能,使用技术搜索潜在的子集。 为了减少时间消耗,发布了贪婪策略,包括前向选择和后向消除。
•嵌入式:将特征选择嵌入到数据挖掘模型中。通常,对不同属性的权重将充当特征选择。一个典型的例子是线性回归中损失函数的正则项,称为Lasso回归(对于L1正则化)和岭回归(对于L2正则化)。
B. 实例选择和采样
实例选择和采样都是通过减少数据量,寻求以最小的性能损失来训练模型的机会,同时基于选择(或删除)实例的不同标准来实现数据的减少。
大多数实例选择算法基于微调分类模型。为了帮助模型做出更好的决策,发布了压缩算法和编辑算法。假定它们在分类中的贡献不大,凝结会将位于类别相对中心区域的样本删除。例如,压缩最近邻居通过将所有会导致错误的样本添加到K最近邻居分类器中来选择实例。 Edition算法会删除接近边界的样本,希望为分类器提供更平滑的决策边界。相关的算法包括基于聚类的算法来选择聚类的中心。
与实例选择方法相比,采样是减少实例数量的更快,更轻松的方法,因为采样方法几乎不需要复杂的选择算法:它们仅专注于减少数据样本的数量。最简单的抽样技术是随机抽样,即从数据集中随机收集一定数量或部分样本。对于偏斜的数据集,分层采样更适用,因为它考虑了来自不同类别的标签的出现频率,并为选择了不同标签的数据分配了不同的概率,从而使采样的数据集更加平衡。
6. 结论和展望
数据挖掘是一种从数据集中发现更多信息的技术,可以集成为一条流程,其中获取,清洗,探索,建模和解释是关键步骤。数据挖掘流程的目的是解决现实问题,包括回顾过去和预测未来。在每个步骤中使用的特定技术应谨慎选择,以使流程具有最佳性能。
数据挖掘模型的成功取决于适当的数据预处理工作。未经预处理的数据可能采用不合适的格式输入模型,从而导致模型的优化算法不稳定,由于噪声和离群值而对模型的性能产生重大影响,并在模型的训练过程中造成性能问题。通过精心选择预处理步骤,可以减少或避免这些问题。
数据类型转换技术以及缺失值处理技术使模型可以处理不同类型的数据。通过应用规范化,不同属性的单位系统将更加统一,从而降低了优化算法错过全局最小值的可能性。对于更简单的模型,数值转换可以为模型提供更丰富的特征,从而增强模型发现特征与标签之间更多基础关系的能力。对于模型的过度拟合问题,降维技术通过减小特征的维数来帮助模型找到有关样本的更一般的信息,而不是过于详细的特征,从而消除了一些不重要的信息。对于模型训练的性能,降维技术和实例选择技术都将通过减少数据总量来提高训练性能。
思考与讨论:本文对大数据挖掘的数据预处理流程进行了全面的综述,文中回顾的都是经典方法,虽然没有一些突破性的创新方法的介绍,但是本文中的方法对于大数据挖掘实验都是必经之路,这些经典方法的学习是后续提高的基础。从数据获取,数据清洗,数据探索,关系建模,挖掘知识可视化几个角度对大数据进行挖掘,缺少其中一个步骤都有可能导致数据挖掘信息不正确,因此每一个部分的基本方法都需要学习。