“数据挖掘就是我的就是我的,你的也是我的”,悉尼·布雷内
使用数据预处理工具箱通常很关键(来源:Anete-Lusina,pixels)
从数据不足和缺失值到不平衡和异常值,准备好数据机器学习(ML)是至关重要的。其中一些数据清理或预处理步骤的范围有限,仅适用于特定场景或特定数据类型。其他的是更通用和广泛适用的概念。
I .规模很重要,即使在数据科学领域也是如此
当涉及到创建预测性机器学习(ML)模型以很好地推断新数据时,您需要大量良好、干净的数据。反过来,可访问的训练数据的大小将在一定程度上决定您可以建立的模型的类型——可解释与反箱、线性与非线性、可实现的非线性程度,以及最终其预测外推至其训练期间从未见过的数据的程度。
考虑到这一点,有时将数据科学项目视为属于不同的“数据经济”层是有用的,每个层都由数据大小的任意界限来设定:
在数据世界里,有数据亿万富翁、数据百万富翁,但也有穷困潦倒的数据“百富翁”和数据“十富翁”。在我攻读生物医学博士期间,我很大程度上属于后一类——一个不幸的数据匮乏者,不断试图获取更多的数据
有什么解决方案来处理几乎没有足够的数据来训练你的 ML 模型?
虽然“不够”数据的定义模糊不清,但通常情况下,观察数据的数量(以患者为例)比变量或特征的数量(以患者年龄、性别、身高、体重为例)要多得多。
下一步是看看是否有更多的可用数据。这很可能需要克服获得它的障碍,或者与它的产生相关的成本(比如在实验室或野外进行更多的实验)。不管你的额外数据收集追求的结果如何,应用数据扩充是有价值的,尤其是图像。
为了在计算机视觉中建立分类器或对象检测模型,图像增强通常会增加价值。有多种途径来增加现有的图像数据:以多种方式转换图像捕捉额外的不同观点,使用生成对抗网络(GANs)来合成更多的数据使用现有的图像作为种子,或者有时只是复制粘贴现有的图像。这可以搭配创意 ML 模型训练。通常,我们使用某种形式的转移学习或微调来利用在其他不相关的大型图像数据集上构建和优化的预训练人工神经网络。这种微调预训练模型的一个典型例子是 ResNets 和几个候选人可以在模型动物园找到。几个小组已经报告了使用这种数据扩充结合迁移学习方法的破纪录结果。
这种数据扩充解决方案对结构化的表格数据同样有效吗?(结构化数据具有定义的特征或列,每个特征或列都有不同的含义,例如房子的大小、房间的数量等)。最近在这个领域有一些研究,一些创新的解决方案似乎有效。然而,对于表格数据,您必须在很大程度上依赖于在模型训练级别解决数据不足的问题,并且仅对模型的广泛适用性做出谨慎乐观的声明。
对于只有几十行的结构化表格数据,通常工作良好的 ML 模型是线性模型及其正则化表兄弟(如 lasso、ridge 或 elastic net)的版本。
二。数据及其不平衡性
在他最近的一次演讲中,吴恩达强调了数据质量比数量更重要。延伸一下,初步看来,看起来你可以访问数万甚至数百万的数据观察。但是,如果大部分数据或图像文件只属于一种或一类,那么在庞大的多维数据宇宙中,只有很小一部分被采样。有了这样的图像数据集,我们之前讨论过的那种数据转换将部分抵消这个问题。
结构化的表格数据,其行(=数据观察值)只属于一个类(我们这里说的是机器学习分类器模型),将保证重新调整或重新平衡。有几种方法可以解决这种数据不平衡的问题,目标是用来自所有不同类的实例同等地训练 ML 模型。
因此,欠采样方法从主要类别中无用的行(例如,来自正常、健康个体的数据),或者过采样方法合成较少代表类别的额外行(例如,来自人群中糖尿病患者的数据)。混合技术使用不同比例的过采样和欠采样。这些优雅的数据重平衡方法中的绝大多数都是在 python 包不平衡学习中实现的。令人鼓舞的是,这个包可以与最流行的基于 python 的 ML 工具箱 scikit-learn 无缝协作,并且正在积极开发中。
三世。价值缺失问题
具有多个字段或要素的结构化表格数据可能包含不同比例的缺失值或空值。解决数据中的这种空白,没有一个 ML 算法会接受它作为输入,通常需要复杂的技巧。
如果在一个字段或行中有太多的缺失值,比如 75%或更多,直接的解决方法是删除或丢弃有问题的行或列。告诫是,“如果你能负担得起的话”。例如,如果有很大一部分值缺失的列恰好对您的预测或模型很重要,那么它就需要被回收。这种永不删除的数据特征和那些只包含一小部分缺失值的数据特征可以从仔细的数据插补中受益。
有时,一些特征中缺失值存在的原因可能是已知的。例如,希望隐藏其社会行为方面的人比其他人更有可能留下部分数据生成问卷未填写。这种知识可以用来主观地填充这种缺失的值字段。
分类和连续值数据列都有几种插补或数据填充方法。缺失的类别值最好通过将 NA 映射到不同的类别或级别来弥补。对于连续值,计算训练数据剩余值的某种平均值并使用它来估算缺失值通常非常有效。
然而,在更高的复杂程度上,有一些软件包可以让你预测并通过在其他特性上应用 ML 方法来估算缺失值。
四世。用未标记数据训练 ML 模型
一个完全不同的挑战是没有标签。运行到数万甚至数百万行的大型数据集可能没有标签。在没有目标变量 Y 标签的情况下,训练 ML 模型有意义吗?嗯,是也不是。在大量未标记点中至少有少量标记数据的数据集中,半监督学习是一个可行的选择。
使用未标记数据的另一种方法,特别是如果它是图像或文本(情感预测),是请求注释或标记。只要能够满足预算和数据隐私的考虑,在亚马逊 MTurk 上众包图像或文本标签任务是可行的。也有越来越多的公司提供定制的数据标签服务。
非监督学习是一种间接但潜在有用的尝试,可以用未标记的数据来完成。虽然这很少产生任何目标变量预测,但它很可能揭示数据中开创性的、深刻的内在结构。零售数据集中客户群或聚类的存在说明了这个问题。
五、离群值是数据世界的坏鸡蛋
最后但绝不是最不重要的,经常遇到的数据挑战是数据中异常值的存在。这些代表了数据巢的“坏鸡蛋”。要扔掉这些坏鸡蛋,一个三管齐下的策略通常是有效的— (a)检测异常值,(b)尝试理解创建它们的过程,以及(c)决定如何处理它们。
在单变量或单一特征数据的情况下,极大或极小的值通常构成异常值。有正式的方法来寻找这样简单的异常值。但是对于多维数据,检测异常值突然变得具有挑战性,因为在最佳技术上没有普遍接受的共识。一种合理的主观方法包括使用主成分分析(PCA)压缩特征列,然后绘制前两个或三个主成分,以直观地发现任何异常值。
还存在基于线性模型的标准统计方法。偏离平均值几个标准偏差的模型残差或误差可能表明存在异常值。如果您正在寻找一个基于 python 的软件工具箱来完成所有这些工作, PyOD 提供了一个有意义的起点。
或许,真正有用但有时有点哲学意味的一步是下一步——调查异常值的来源。例如,在数字表中发现无意义的字符串或其他奇怪的字符可能表示数据输入错误。但是,真正的异常值不是简单的测量误差。相反,这些意味着“很少发生”的价值观,原因可能不明显。异常值检测的一种形式,称为异常检测,用于识别欺诈交易或虚假产品列表。
第三步,在发现这样一堆神秘的离群值后,你到底能做什么?一个显而易见的解决方案是删除它们,然后继续处理剩余的(希望是干净的)数据。另一个是 winsorize 极值。进行 winsorize 时,选择一个阈值,如 90 %,然后通过将其余值设置为阈值内的最高值来修整它们。
处理离群值的另一种方法是假装它们不存在,并继续使用它们。不管是好是坏,一些最大似然模型比其他模型更少受到极值存在的影响。很多时候,魔鬼就在细节中,很难找到一个放之四海而皆准的方法来发现和处理异常值。老生常谈,不足为奇,经验为王。
除了上面讨论的与数据相关的问题,有时可能需要标准化、规范化和转换表格和图像数据,过滤信噪比等。其中许多是特定于图像、视频、文本和表格的。这些及其解决方案将在本文的第二部分深入讨论。