看着刚进实验室的师弟师妹们的迷茫,虽然也与他们进行过一些零散的交谈,但是都不够系统。因此,根据自己的经历给出学习数据挖掘的一些建议,大家可以根据自身的情况,具体问题具体分析,作为参考。希望在上一届的基础上,走的更深,走的更远。
一. 读研与数据挖掘基础
首先介绍一下大家都比较关心的几个问题,包括我们组的研究方向是什么,论文相关问题,大数据与工作相关问题,上海户口问题几个方面。
1. 我们组的研究方向是什么
我们组大的研究方向是数据挖掘,论文的研究方向是推荐算法。要注意大的研究方向,论文的研究方向与工作方向的区别和联系。
2. 论文相关问题
读研究生免不了会思考一个问题,读研的意义是什么?我自己认为读研的最大意义是训练自己系统化的严谨的分析思维能力。在导师给定论文研究方向后,如何确立更细的研究方向,如何检索资料,如何阅读英文论文,如何提出自己的创新点,如何做实验,如何写论文,如何修改论文,如何投稿,如何退修,如果是国际会议,还要去做英文口头报告,与同行交流等,这些问题都是需要自己去思考的。
3. 大数据与工作相关问题
数据挖掘属于大数据专业吗?当然属于。现在大数据找工作相对还是比较理想的。关键是要学习哪些课程呢?以前给大家推荐了很多的书籍,但是效果却恰恰相反,因为实在太多了根本看不完,更不知阅读书籍的顺序,浅尝辄止,最后一本书也没有看完,研究生就结束了。
(1)最低保障书籍
无论将来做什么,熟练掌握一门编程语言,一个数据库,数据结构,算法都是必备的。
《高性能MySQL》
《数据结构与算法分析:Java语言描述》
《算法》:http://book.douban.com/subject/19952400/
(2)Python与机器学习
《集体智慧编程》
《社交网站的数据挖掘与分析》
《数据挖掘:概念与技术》
Python官方文档:https://www.python.org/
Scikit-Learn官方文档:http://scikit-learn.org/stable/
(3)Java相关书籍
《Java开发实战经典》
《Java Web开发实战经典》
《Java虚拟机规范》
Java SE:http://docs.oracle.com/javase/8/docs/api/
Java EE:http://docs.oracle.com/javaee/6/api/
(4)Hadoop与Spark书籍
《大数据日知录:架构与算法》
《Hadoop权威指南》
《大数据Spark企业级实战》
《Scala编程》
Hadoop官方网站:http://spark.apache.org/
Spark官方网站:http://spark.apache.org/
Scala官方网站:http://www.scala-lang.org/
说明:认准目标,耐住性子,一步一步往前走。要把上面推荐的书籍硬着头皮读完,数据挖掘基本也就算是入门了。
4. 上海户口问题
上海户口属于积分制,如果想要在校期间就拿到,那么唯一的方式就是参数每年的研究生数据建模比赛,并且获奖。获奖比例还是很高的。其实,好好学习Python,买本数学建模的书籍看完,看几篇近些年来的获奖论文,比赛时硬着头皮钻研一道题目并且写好论文,基本上都可以获奖。
二. 数据挖掘进阶
数据挖掘涉及多个方向,但是通常从数学统计,数据库和数据仓库,机器学习三个方向来进行研究。当我想学习一个方向的时候,最希望做的事情就是让别人给我列出一个书单。因为我也会给你们列出一个书单,让你们慢慢研究吧。
1. 数学统计
(1)理论数学:复变函数,实变函数,泛函分析,拓扑学,积分变换,微分流形,常微分方程,偏微分方程等。
(2)应用数学:离散数学(集合,逻辑,组合,代数,图论,数论),具体数学,张量分析,数值计算,矩阵论,逼近论,运筹学,凸优化,小波变换,时间序列分析等。
(3)概率:概率论,测度论,随机过程等。
(4)统计:统计学,多元统计,贝叶斯统计,统计模拟,非参数统计,参数统计等。
2. 数据库和数据仓库
《数据库系统概念》
《数据库系统实现》
《数据仓库》
《分布式系统:概念与设计》
3. 机器学习
通信原理;数据挖掘;机器学习;统计学习;自然语言处理;信息检索;模式识别;人工智能;图形图像;机器视觉;语音识别;机器人学等。(这方面的经典书籍都可以看看,后面慢慢补充)
4. 其它书籍
(1)Linux
(2)网络原理,编译原理,组成原理,
(3)JVM
(4)UML
(5)软件工程
(6)设计模式
(7)云计算与Docker
(8)并行计算
(9)需求分析
三. 学习与方法
作为一名软件工程师,需要熟练掌握的工具,如下所示:
(1)博客
除了学习之外,更要思考和总结,把还没有忘却的记忆缓存序列化成为文字,记录在博客中。
(2)语言
大数据常用的语言包括Java,Scala,Python。如果一定要选择精通一门语言,自己选择Scala,同时深度学习JVM。(3)开发工具
自己选择IntelliJ IDEA用于Java和Scala的开发,Eclipse用于Python的开发。
(4)GitHub
每天都要坚持编程,主动参与开源项目。
(5)Linux
工作常用的是Ubuntu 12.04 LTS。
由于时间原因,上面总结的还比较粗糙,算是第一个版本吧,后面还会继续深度总结和完善。