数据挖掘领域主要包括以下方面:基础理论研究(规则和模式挖掘、分类、聚类、话题学习、时间空间数据挖掘、机器学习方法,监督、非监督、半监督等)、社交网络分析和大规模图挖掘(图模式挖掘、社区发现、网络聚类系数估计、网络关系挖掘、网络用户行为分析、网络信息传播、社交网络应用,社交推荐(信息、好友等))、大数据挖掘(算法的并行、分布式扩展、多源异构数据融合挖掘等)。数据挖掘应用(医疗、教育、金融等)。研究热点是大数据挖掘、社交网络和大规模图挖掘。
数据
下面,在说一下什么是大数据挖掘,它跟传统的方法其本质区别是什么?大数据挖掘可以分为三点:算法的扩展、分布式框架开发、多源数据融合分析。通过阅读KDD’13,KDD’14,几篇KDD’15的big data session中的文章,几乎百分之百的文章都提到了算法的scalability。由此可见,现今大数据挖掘与传统算法的本质区别在于算法的可扩展性。换句话说挖掘,现在研究的算法在不仅仅能处理小规模数据集,当数据增加时也具有较大范围内的适合。算法的扩展,我理解为两个方面:scale out-纵向扩展以及scale up-横向扩展。纵向扩展最要在算法底层、良好的数据结构设计或者并行设计方面。横向扩展主要指算法的分布式技术实现(自己编写分布式算法或者基于现有分布式框架实现)。这里所说的“大数据”,在不同的挖掘领域(文本、图结构、机器学习、图像)所对应的数据量是不同的。对文本来说,几百万个样本可能就是“大数据”;对机器学习来说,千万个样本,几十维、几百维(MB/GB)就是“大数据”;对大规模图挖掘来说,千万级节点、亿级边(GB),也是“大数据”;对图像数据,百万级图像(TB)完全可以称得上“大数据”。那么,要做算法的可扩展性是不是必须用到并行技术、分布式编程技术?答案是一般需要,但并不绝对。算法如果做到了极致,单台计算机也能处理“大数据”问题,比如:TurboGraph: A Fast Parallel Graph Engine Handing Billion-Scale Graphs in a Single PC. 文章仅仅在一台计算机上利用线程并行(多核)实现了计算机集群完成的工作。有些文章是用MATLAB来完成的实验(Comparing apples to oranges: a scalable solution with heterogeneous hashing、Fast Flux Discrimination for Large-Scale Sparse Nonlinear Classification、Online Chinese Restaurant Process)、有些文章是利用hadoop集群来完成实验、有些是利用C/JAVA语言编写分布式程序实现、有些是利用多核CPU的多线程并行实现。可见,算法的实现方式不重要,重要的是算法具有scalability。多源数据融合以及挖掘分析也可以称得上大数据挖掘,可能不见得数算法据集有非常大,但是通过多种数据的融合发现了之前完成不了的事情、或者之前完成效果不好的事情。比如:heterogeneous hashing文章用了两个异构数据集(text、image)进行relation-aware分析。特别是微软亚洲研究院在KDD’13 上的U-Air: When Urban Air Quality Inference Meets Big Data,这篇文章就是融合了5个数据集(气象数据、空气质量数据、POI数据、路网数据、扩展轨迹数据),利用传统的数据挖掘方法进行了融合分析,得到了较好的效果并进行了商业应用。附注:个人认为算法也应该考虑扩展性,在面临数据集增加时,看看是否还会能达到高效地预测结果。
总结:在大数据研究中,更多的是偏理论算法的研究。可以这样说,数据挖掘本身就是跟数据打交道,在特定情况下(数据集较大时或不断增加时),数据挖掘的任何一个研究点都可能会遇到“大数据”问题。所以,真正需要做的是找准一个问题,利用传统方法进行挖掘,并测试在大规模数据集下传统算法是否可行,如果不可行,提出算法的改进版或者自己动手实现一个新的、具有可扩展性的算法,这就是大数据研究的过程(也包括异构数据融合分析)。