数据分析方法


      在人工智能和机器学习日渐火热的现在,数据的更要性显得愈加突出。甚至有人说,各大公司在机器学习算法上的差距并不大,数据量才是真正的门槛。我在此前的项目中也对此深有感触,劳心劳力各种调试模型和参数,反而是直接把数据量增大几倍对模型效果的提升更大。好些年前互联网上的数据就已是海量了,问题在于,如何大海捞针般的从这些数据中得到有价值的信息?数据挖掘可以明确我们关注的方向,从中挖掘到大量原始数据。机器学习可以分析数据的内在关联,生成我们想要的结果。但如何把原始数据变成符合规范的、高质量的机器学习模型所需的输入数据,这就是数据分析的用武之地了。

      数据分析最初来源于统计学,毕竟统计学就是一门与数据直接打交道的学科。但随着各机器学习方法的崛起,数据分析也增加了许多新的方法以为机器学习服务。而深度学习虽然对数据预处理的要求降低了,深度神经网络能自动对图像数据作各种处理,但对图片质量的审查和增强仍然能提高学习的最终效果。那么如何进行数据分析呢?

      在数学上两个命题等价,我们就叫说它们互为对方的“充要条件”。同样,我们想从一堆数据中学习一个概念,理想的情况也是这些数据能充分且必要的代表此概念,使两者完全等价。也就是说,数据涵盖的范围限于一定领域,不会超出此概念之外;且数据不存在任何额外的偏向性,不会只代表此概念下一个更小的范围。当然,这样的理想情况难以达到。但为了接近它,我们要对数据进行“异常值”过滤,以限制数据范围;还要对数据进行“偏向性”分析,以明确数据中隐含的额外概念。此外,出于工程上可操作性的考虑,为了加速模型的训练、增强模型的效果,我们还可以对数据进行精简、并了解数据集的各项属性以指导之后的数据增强。


 

      由于数据集往往数量庞大,用人力排查异常值非常困难。靠谱的方式有两种:使用统计学的方法;根据基准模型的训练结果。统计学方法,可用来找出那些缺失关键信息或较为极端的数据。比如要分析各地的房价数据,那么缺失地域的数据可以直接删掉了;对于一些远超出当地平均房价的数据,我们可以认为是统计时出现了失误,也进行删去。要筛选出极端数据,对于线性分布的连续量,可以采用1.5倍四分位距的判定方式,即:将数据有小到大排序后,取1/4位置的数据值为A,3/4位置的数据值为B,A-B即为四分位距,将值小于A-1.5*(A-B)、大于B+1.5*(A+B)的数据判为异常;对于指数分布的连续量,则可以先取log后做如上处理。

      根据基准模型的训练结果能更深入的找出异常数据,这也要求基准模型有一定的准确性。所谓基准模型,就是已经可以用但较为基础的模型。用数据集对基准模型进行训练后,将那些拟合效果最差的部分数据筛选出来,对它们进行人工或者程序验证。这一招对于图像数据最为好用,因为难以用统计学方法分析图像的异常,而人一般一眼就能看出一张图像是否正常,异常图像往往也占比较小。


      其次,数据的“偏向性”在所难免,我们能做的一是尽量减少,二是了解模型的偏向性(适用范围)。“偏向性”存在的本质原因,是由于训练集的数量少于总集。两者的数量级差别越大,偏向性就越多越明显。由于各事物的属性众多,人们有时还难以察觉。比如物理学中,我们平时所见的各类力学现象都可以被牛顿力学解释,但这些现象却都隐含着“宏观”、“低速”的偏向性,在了解了相对论、量子力学后,我们才知所见之狭隘。又比如,进行猫狗图像识别的训练时,训练集中拥有数万张猫狗的各角度照片,看起来已经够区分猫狗了。可事实上猫狗的品种众多,国际爱猫联合会承认42个猫咪品种,而世界犬业联盟则收录了 340 种狗狗(可能是因为狗的驯化历史更长)。某些品种间的猫狗长相区别很大,这数万张图片难以对所有的品种进行充分训练,也就必然对某一部分品种存在偏向性。

      所以说,技术是中立的,模型一般也是中立的,但喂给模型的数据并不是。也这是为什么众多数据科学家呼吁数据集应保持开放,因为在公共安全等敏感领域中,数据集隐含的偏向就意味着实质性的歧视。扩大数据集的规模、针对性调整数据集的结构能够减少数据的偏向性,但有时现实条件也无法做到。这时至少可以承认用这些数据集训练的模型存在限制范围,无法在某些条件下正常发挥作用。


 

      对数据集进行精简往往也必不可少,这又可分为两部分:对特征的精简,对数据样本的精简。数据集拥有样本、特征两个维度,以互联网用户信息为例,一个样本是指一位用户,一条特征是指用户的一项属性/兴趣。在互联网广告推荐、点击率预估算法中(也就是App给你推送广告、新闻等所使用的算法),用户信息数据集的绝大部分特征都是离散量,比如婚姻状况、学历、地理位置、兴趣等,甚至年龄看似是个连续量,但为了训练的准确性,还是得看成离散量。这之中“兴趣”又有多个消息源,可以细分成成千上万种类别,是对用户进行预测的主要特征。而这么些个离散量,在训练前都要进行“one-hot”独热编码处理。比如地理位置按城市算的话,那就得把“地理位置”这一个特征拆分成多个(具体数量为数据集中出现的所有城市),当前用户所在的城市特征值设为1,其它的城市设为0。这样一来,总的特征数量也变成了上万个,如果用户样本有上百万个的话,那么总数据量级就变成了 百万*万=百亿,这比起图像甚至视频的数据量都不逞多让了。

      首先要保存这样的数据量都不容易了,为此我们可以采用“稀疏矩阵”。稀疏矩阵是指矩阵中的0元素格式远多于非0元素,且0元素的分布没什么规律。程序对稀疏矩阵进行存储时,只会保存其中非0元素的值和坐标。在进行矩阵运算时,对于稀疏矩阵的相乘也有很多优化。接下来再对稀疏矩阵进行精简,毕竟这上万个特征里,很可能有很多特征下就没多少非0元素(有效值),实际上也没什么用。为此,可以使用基准模型对其进行训练(比如LightGBM),得出各特征的重要程度,从排名第一的特征开始对重要性进行累加。当和超过一定大小时(如99%),将剩余的特征全部舍弃。其次,在此基础上还可再进行“PCA”主成分分析。即各特征之间并不是相互独立的,比如喜欢摇滚的用户也很可能喜欢足球。通过综合各关联特征进行加权,有望得到一个新的特征(主成分)来取代它们,从而进一步减少特征数量。

      而要精简数据样本,对于互联网用户信息的例子,可以使用“聚类”分析。所谓聚类,也就是有一些数据样本非常类似,在数据空间中的距离很近,可以认为属于一类。为了定义一个合适的样本“距离”,在此之前我们还需要对各特征进行缩放。如果使用小范围聚类,只把靠的非常近的样本看做一类,那可以直接从每一类中只取一个最靠近聚类中心的样本作为代表,其余的样本全部舍弃;如果使用大范围聚类,可以把样本的类别作为一个新的特征加入到数据集中(这就不是出于精简样本的目的了),有望提升训练结果。对于图像数据,则可以从图像尺寸、图像亮度等方向上进行分析,考虑把图像尺寸过小、亮度过明或过暗等低质量图像进行舍弃。另外,使用卷积神经网络训练图像时,往往在训练时还会对图像进行尺寸归一化和数据增强,比如随机水平翻转、随机裁剪等。所以在数据分析阶段,明确图像的尺寸分布、图像核心特征分布,有助于在训练时选取合适归一化尺寸和数据增强方法。


 

      数据分析的上述方法,其实不仅适用于数据挖掘、机器学习领域,同时也与诸多其它研究和工作领域有关。老师需要分析学生的成绩单,秘书需要整理数据报表,研究员需要分析实验数据。甚至我们每一个人在日常生活中做决策时,也会不自觉的综合过去的所见所闻。在我们遇见、听见一个新事物/情况时,也会下意识的对其进行分析:“这个东西理所当然、没啥特别的”,“这属于极端情况、一般不会这样”,“什么?竟然还有这种事”;也会难以意识到自己所了解信息的“偏向性”,遇到不同的意见时不会去深入思考,直到自己所认为的“特例”越来越多的出现。在机器学习发展壮大的今天,了解它背后的原理,其实也正是我们深入了解自己的一种方式~

 

 



猜你喜欢

转载自blog.csdn.net/wlkdb/article/details/80466530