漫谈数据挖掘从入门到进

做数据挖掘也有些年头了,写这篇文一方面是让我写篇文,朋友作为数据挖掘方面的参考,另一方面也是有抛砖引玉之意,希望能够和一些大牛交流,相互促进,让大家见笑了。 
######################################### 
更新部分 
######################################### 
Q&A: 
Q:学习,最近在看集体智慧编程,楼主可否推荐下数学基础的书? 
A:我数学本身也不好 自己也在偷偷补 因为看的不多也不能给出个提纲式的建议 只能给您列下我近期看过和在看的觉得不错的书 您看做参考吧 
1.矩阵方面 Kaare Brandt Petersen的《The Matrix Cookbook》 网易公开课中的《麻省理工公开课:线性代数》 
2.概率论与数理统计方面 JohnA.Rice 的《数理统计与数据分析》《统计建模与R软件》 
3.微积分方面 网易公开课中的《麻省理工学院公开课:单变量微积分》 

其实您只要有了 
1.概率论与数理统计以及其他统计学基础 
2.扎实的线性代数功底 
3.微积分(如果能学习下实变函数和泛函分析就更好了) 
这几方面的基础 基本上机器学习的大部分算法您都具有了其数学基础 
如果您觉得我说的太泛 可以先看看《模式分类》这本书的附录中的数学基础 这样您就大体有个印象了 
推荐两篇我认为写的不错的相关博客 http://blog.sina.com.cn/s/blog_6833a4df0100nazk.html 
http://www.cnblogs.com/LeftNotEasy/archive/2010/12/05/mathmatic_in_machine_learning_1_regression_and_gradient_descent.html 

######################################### 
入门: 

数据挖掘入门的书籍,中文的大体有这些: 
Jiawei Han的《数据挖掘概念与技术》 
Ian H. Witten / Eibe Frank的《数据挖掘 实用机器学习技术》 
Tom Mitchell的《机器学习》 
TOBY SEGARAN的《集体智慧编程》 
Anand Rajaraman的《大数据》 
Pang-Ning Tan的《数据挖掘导论》 
Matthew A. Russell的《社交网站的数据挖掘与分析》 

很多人的第一本数据挖掘书都是Jiawei Han的《数据挖掘概念与技术》,这本书也是我们组老板推荐的入门书(我个人觉得他之所以推荐是因为Han是他的老师)。其实我个人来说并不是很推荐把这本书。这本书什么都讲了,甚至很多书少有涉及的一些点比如OLAP的方面都有涉猎。但是其实这本书对于初学者不是那么友好的,给人一种教科书的感觉,如果你有大毅力读完这本书,也只能获得一些零碎的概念的认识,很难上手实际的项目。
 

我个人推荐的入门书是这两本:TOBY SEGARAN的《集体智慧编程》和Ian H. Witten / Eibe Frank的《数据挖掘 实用机器学习技术》 
《集体智慧编程》很适合希望了解数据挖掘技术的程序员,这本书讲述了数据挖掘里面的很多实用的算法,而且最重要的是其讲述的方式不是像Han那种大牛掉书袋的讲法,而是从实际的例子入手,辅以python的代码,让你很快的就能理解到这种算法能够应用在哪个实际问题上,并且还能自己上手写写代码。唯一的缺点是不够深入,基本没有数学推导,而且不够全面,内容不够翔实。不过作为一本入门书这些缺点反而是帮助理解和入门的优点。



推荐的另一本《数据挖掘 实用机器学习技术》则相对上一本书要稍微难一点,不过在容易理解的程度上依然甩Han老师的书几条街,其作者就是著名的Weka的编写者。整本书的思想脉络也是尽可能的由易到难,从简单的模型入手扩展到现实生活中实际的算法问题,最难能可贵的是书的最后还稍微讲了下如何使用weka,这样大家就能在学习算法之余能够用weka做做小的实验,有直观的认识。



看完上述两本书后,我觉得大体数据挖掘就算有个初步的了解了。往后再怎么继续入门,就看个人需求了。 
如果是只是想要稍微了解下相关的技术,或者作为业余爱好,则可随便再看看Anand Rajaraman的《大数据》以及Matthew A. Russell的《社交网站的数据挖掘与分析》。前者是斯坦福的"Web挖掘"这门课程的材料基础上总结而成。选取了很多数据挖掘里的小点作为展开的,不够系统,但讲的挺好,所以适合有个初步的了解后再看。后者则亦是如此,要注意的是里面很多api因为GFS的缘故不能直接实验,也是个遗憾



如果是继续相关的研究学习,我认为则还需要先过一遍Tom Mitchell的《机器学习》。这本书可以看做是对于十多年前的机器学习的一个综述,作者简单明了的讲述了很多流行的算法(十年前的),并且对于各个算法的适用点和特点都有详细的解说,轻快地在一本薄薄的小书里给了大家一个机器学习之旅。


进阶: 

进阶这个话题就难说了,毕竟大家对于进阶的理解各有不同,是个仁者见仁的问题。就我个人来说,则建议如下展开: 

视频学习方面: 
可以看看斯坦福的《机器学习》这门课程的视频,最近听说网易公开课已经全部翻译了,而且给出了双语字幕,更加容易学习了^_^ 

书籍学习方面: 
我个人推荐的是这样:可以先看看李航的《统计学习方法》,这本书着重于数学推导,能让我们很快的对于一些算法的理解更加深入。有了上面这本书的基础,就可以开始啃一些经典名著了。
 

这些名著看的顺序可以不分先后,也可以同时学习: 
Richard O. Duda的《模式分类》这本书是力荐,很多高校的数据挖掘导论课程的教科书便是这本(也是我的数据挖掘入门书,很有感情的)。如果你不通读这本书,你会发现在你研究很多问题的时候,甚至一些相对简单的问题(比如贝叶斯在高斯假设下为什么退化成线性分类器)都要再重新回头读这本书。
 

Christopher M. Bishop的《Pattern Recognition And Machine Learning》这本书也是经典巨著,整本书写的非常清爽。
 

《The Elements of Statistical Learning》这本书豆友有句很好的吐槽“机器学习 -- 从入门到精通”可以作为这本书的副标题。可以看出这本书对于机器学习进阶的重要性。值得一说的是这本书虽然有中文版,但是翻译之烂也甚是有名,听说是学体育的翻译的。


Hoppner, Frank的《Guide to Intelligent Data Analysis》这本书相对于上面基本经典巨著并不出名,但是写的甚好,是knime官网上推荐的,标榜的是解决实际生活中的数据挖掘问题,讲述了CRISP-DM标准化流程,每章后面给出了R和knime的应用例子。


项目方面: 
事实上,我觉得从进阶起就应该上手一些简单的项目了。如果不实践只是看书和研究算法,我觉得是无法真正理解数据挖掘的精髓所在的。打个简单的比方,就算你看完了C++ Primer、effective C++等等书籍,如果自己不写C++,那么自己也就会停留在hello world的级别。实践出真知非常切合数据挖掘这门学科,实际上手项目后才会发现什么叫"80%的准备,20%的建模",real world的问题我认为并不是仅仅靠modeling就能很好的解决的。详细的可以看看《Guide to Intelligent Data Analysis》就能略知一二。如果上手做推荐或者一些简单的项目,也可以考虑用用mahout,推荐的入门手册是《mahout in action》。项目问题说来话长,有时间会以CRISP流程为引单独作文,这里也就不详谈了。

软件方面: 
我常用而且推荐的软件有如下,这里只是简单的列出,以后有时间再详细分析和写出入门: 
Weka Java的软件,可以集成到自己的项目中
Orange 一个用python写的数据挖掘开源软件,界面做的很漂亮,可以做图形化实验,也可以用python调用编程。
Knime 和Orange类似,特点是可以集成weka和R等开源软件
 
SAS的EM模块以及R 还有最最经典的matlab大大 
这里有篇文有简要的介绍http://www.oschina.net/question/12_14026 

再往后: 

再往后的其实就是我就是觉得是学数学了,然后就是深入读一些你感兴趣的topic的书籍和paper,接项目,做项目了。发展有数据分析师或者去专门的企业做数据研究员,当然混学术界的我就不清楚了。


数据挖掘七步走:

  

Step1.商业理解  

     就是商业问题的理解了,那么如何更好的理解“老大”提出的商业问题困惑呢?我觉得思维导图倒是个不错的选择,当然自己要想更好的理解“老大”的意思还需要进一步的沟通,商业问题的理解关系到这个挖掘项目的价值,甚至成败,所以在这块大家要显得“外向”一些,多交流、多沟通、多了解这个商业问题背后的东东;  
 

step2.字段提取 

      接下来就是需要提取的字段,也就是数据挖掘的宽表,这点就要和企业的DBA人员多多交流,看数据库中各个维度的表格都有什么字段,主要关联的主键有那些,那么如何选取字段呢?这就需要自己把自己与“老大”共同讨论的思维导图拿出来看看,这样就有提取那些字段的感觉了,这部分大多数的提取是自己对商业问题的感觉或者一些前辈的经验; 

Step3.数据的ETL  

      数据的ETL,这部分一般的时间占数据挖掘项目的70%左右,为什么数据的ETL如此重要呢?万丈高楼平地起,如果连地基都是“豆腐渣工程”的话,那么再华丽的楼房也没人愿意掏腰包;嘿嘿,开个玩笑;数据的ETL主要是一些异常值、空值(miss值)、错误数值的处理,这部分一般需要根据数据自身的分布、简单的统计知识、该字段体现的业务特点、自己的经验进行的,也就是这一部分的处理主要是统计知识+项目经验+业务特点;  

 

Step4.变量选择  

      建立模型所需要的变量如何选?当然目标变量(Y)一般都是事前设定好的,那么X如何找呢?大多数都是应用相关分析、特征选择、描述性的统计图表(分箱图、散点图等),这里我只想说一句算法是死的,有时候我们根据算法得出来的X对Y没有影响,但在实际的业务中影响却很大,所以大家不要过于依赖算法、工具,我曾经因为这点,被人批了,555~~~~~ 


  

Step5.数据挖掘建模 

      建立数据挖掘模型,这块是许多同行相当痴迷的地方,我也不例外,记得大学毕业去北京的时候,就在咨询公司研究算法什么的,后来经过leader的几次谈话,自己才慢慢走出了误区;一句话,我们追求的是模型带来的效益,所以没那么多时间去玩模型、搞算法;但是作为数据挖掘从业者,最基本的应该是了解各种算法的原理,还有一些数据挖掘模型参数的意义,比如在spss clementine中就有自定义和专家两个供大家选择,所以掌握一些参数的意义也是有必要的,大家可以上网下一些人大数据挖掘的视频教程,里面讲的比较详细; 

  

Step6.模型评估  

       模型评估,大部分都是借助数据挖掘自带的评估模型来做,什么准确度、收益率等,理论上很完美,实际中就一定有疗效吗?非也!有时候模型跑出来的信息很诡异的,建模人员都无法知道这个结果如何去解读,这时我倒是觉得可以从模型中选取一部分人群来做一下简单的调研,或许能获得更多数据背后的东西,也能为自己的片子多几分数据解读的色彩,何乐而不为呢? 

  

Step7.模型可视化展示  

      模型可视化展示,可视化一直是一些数据服务公司所追求的东东,也是我们从业人员一种传达信息的方式,对于一个专题的数据挖掘模型,我相信大家都能通过一些图表、表格或者更炫的PPT搞定,打个岔,我常常遇到这样的问题,在对多维度做交叉分析时,因为涉及许多数据维度的钻取而很难展现给决策者,这时可以用水晶易表来做动态的展示,但是遇到更复杂的逻辑呢?大家不难发现现在大部分的数据分析系统或者叫运营体系的分析维度都是作为一个content展现给使用者,从数据从业者的角度来看,这只是从不同维度对数据进行了切割而已,谈不上真正的数据可视化,路漫漫兮修远兮!业务、维度、用户交互三者融合才是王道;  


你可能感兴趣的:(Data,mining)