大数据的陷阱
关于“大数据”,我认为就像当年“云计算”一样,很多人在还没有弄清楚其背后的相关技术之前就纷纷义无反顾的跳进去了。最近准备做一些multimodal routing的后续工作,仅仅是出于兴趣,发现需要用到一些data science领域的东西,产生了一些疑惑,然后翻出了一篇stackoverflow上What is the difference between Big Data and Data Mining问题的回复,说的挺好,要点如下:
Big data is everything
大数据是一个商业术语。现在什么都是大数据,一个U盘可以是一个“私有云”,一块硬盘就可以装下“大数据”。
Data mining is the old big data
在大数据这个词出现以前,同样的东西和事情叫做“数据挖掘”。数据挖掘这个术语也是一个曾经被过度使用的词,但它所用到的具体技术和现在的大数据没什么区别。只是现在市场、销售和推广部门又需要新的概念去忽悠客户了,所以出现了“大数据”,一如曾经出现的商业智能(BI)什么的一样。
Most “big” data mining isn’t big
绝大多数的所谓“大”数据,其实一点也不大。KDnuggets的调查结果是目前进行分析的最大数据集大小平均仅为1到10GB。这比10年前做分析用的数据集当然已经大了很多,但距离EB(等于1024PB,等于1024*1024TB)级还差好远。这样规模的数据集对于很多复杂分析方法来说,已经不小了。
Most “big data” isn’t data mining
现在经常谈论的“大数据”其实都无关数据挖掘,而仅仅是在数据的存储和管理层面。目前,数据量意义上的大数据是真实存在的,比如Google,CERN都拥有巨大规模的数据。大数据的相关技术也是真实存在的,比如Hadoop。但人们通常在使用这些技术的时候头脑并不清醒,缺乏理智。如果规模达不到100个节点,那完全可以不用Hadoop,有的是其它更好的替代方案。目前的绝大多数应用场景只能称为Extract, Transform, Load (ETL)。不同的地方仅仅是它们把数据抽到Hadoop,而不是传统的数据仓库里而已。
Data quality suffers with size
大量数据中的偏见和噪声问题是大数据应用中的两个基本问题。修正偏见、清洗数据都是在开始后面的分析之前先要做的重要任务,但人们却往往忽略它们,而它们本身也的确都是难度很大的工作。
Hadoop != data mining
Hadoop本身不做数据挖掘。但有一些工具尝试对Hadoop中存储的数据进行挖掘和分析,例如Apache的Mahout项目。但实际上Mahout更多的是一个机器学习工具,而机器学习也不等于数据挖掘,它们俩的关系是数据挖掘有时会用到一些机器学习中的方法。Mahout中的一些部分(例如聚类)还远未成熟。关键的原因在于(注意,重点来了):Hadoop适用于线性问题,而绝大多数数据挖掘问题都是非线性的。非线性算法很难不加修改就直接用于处理规模巨大的数据集——你需要仔细设计一种近似的线性算法,并且在近似所带来的精确性降低与可计算性之间寻找平衡。而数据挖掘里面这种非线性问题相当的多,所以目前可以说在Hadoop上进行数据挖掘的实质性工作尚未开始。尽管现在有很多人在做这个,也有很多公司在卖相关的产品,但目前还没见到哪个打上“大数据”标签的版本比“不大数据“的版本更好用。但既然有人想买,那么就会有公司继续卖;既然搞这个能赚学术分,那就会有人继续写paper,无论这些东西是不是真的有用。这就是生活。
当然也有一些成功的例子,比如Google search,CERN,以及图像识别等等。但这些成功案例中无一例外都是基于清洗过的数据来进行挖掘和分析的,这一点请务必注意。