传说中的数据挖掘工程师,究竟是做什么的?
数据挖掘,从字面上理解,就是在数据中找到有用的东西,哪些东西有用就要看具体的业务目标了。最简单的就是统计应用了,比如电商数据,如淘宝统计过哪个省购买泳衣最多等。
进一步,可以基于用户的浏览、点击、收藏、购买等行为推断用户的年龄、性别、购买能力、爱好等能表示一个人的画像,就相当于用这些挖掘出来的属性来刻画一个人,这些还是最简单的东西,更深层次的比如预测(股票预测),但是比较难。
1、数据挖掘的过往
说到数据挖掘。往往与机器学习离不开。比如分类、聚类、关联规则挖掘、个性化推荐、预测、神经网络、深度学习等。
很多年前说人工智能AI(比如产生式系统、专家系统等,好像现在提得比较少了),90年代AI到了瓶颈阶段,机器学习是一个突破口,现在机器学习又遇到了瓶颈阶段,深度学习又是一个突破口(其实神经网络出来了很久,但是为什么中间一段时间沉寂了,在70年代左右出现了低潮(根据评论修改),我归结是两点:
第一,神经网络就像一个黑夹子一样,很多东西不透明,模型的解释性不强,以及当时没办法处理非线性分类问题(后面多层感知器便可以对非线性问题进行拟合,如解决XOR问题)。参数过多,训练复杂,容易出错,容易过拟合,无法保证全局最优,加上很多问题无法用数学方法证明(个人理解)等等。
科学家和工程师还是有区别的,科学家都想把一个问题归结为数学问题,然后证明出来,他们就会认为是有意义的,数学上证明其有效往往比做千百个实验说明其有效要好些吧,工程师往往更在乎效果与结果),直到后来出现了BP算法。
第二,得益于现在的大规模计算工具,能够处理PB级别的数据了。总之现在人工智能还远没达到人类的水平,最后结果会怎样,这个暂时不设想。
目前正处于大数据时代,很多企业拥有巨大的数据,比如阿里拥有消费数据、百度拥有搜索数据,腾讯拥 有社交数据,消费数据与搜索数据都可以直接变现形成商业模式,而社交数据暂时还无法直接变现,至少企鹅现在还在探寻中。举个例子,你的朋友圈,qq空间到处是广告,你是不是很讨厌?
数据有了,还有个重要的方面,处理数据的能力,也就是数据处理工具,能够处理这么大的数据量,二者不可或缺,缺一谈什么大数据都是耍流氓。
2、数据挖掘工程师应具备的技能
首先你数学知识肯定要扎实吧。统计与概率论是最基本(也有人说现在的机器学习是统计学习,确实有道理)、微分与积分肯定要知道、数学公式要看的懂吧,进阶阶段最优化,随机过程等。建议去看看机器学习十大算法与一些深度学习的东西,多看大牛的博客。
其次,作为一个工程师,肯定要会写代码吧。不懂写代码的工程师都是扯淡,不要写代码的数据挖掘与机器学习,那是研究员,懂得一门高级语言与一门脚本语言就差不多了(如JAVA或C++,Python或R,个人推荐Java与Python,因为像Hadoop、Spark、Hive、MPI之类的都对Java提供了很方便的接口,Python写脚本很爽),还需要懂得Linux、Shell、SQL,这都是个人意见,至少在阿里,用java+sql+python+shell,阿里有个很牛逼的东西,叫做ODPS,现在叫MaxCoupute,可以去阿里云官网查查相关资料。
对于你所说的excel、SAS、SPSS,数据分析人员专用,因为工程师嘛,编程语言还是必须的。
另外是工具,会用就行。对于是否需要学习hadoop、hive之类的,个人意见是只要知道用,然后怎么用,怎么在上面实现一些算法,怎么去优化自己写的程序就差不多了,它们只是工具,而且更新得很快,就说hadoop吧,我还没完全搞明白,就逐渐被spark取代了,记住,这些只是工具而已。推荐个加深你数据挖掘功力的东西weka(单机版的)与mahout(分布式的,有基于hadoop与spark),都是开源的。
最后,对于工作是否需要设计新算法,我觉得在企业还是没有要求这么高。除非你觉得自己很牛逼,想向google看齐,但是设计一个好的算法并能解决实际问题的算法,不是一朝一夕的,个人观点,很多算法可以想出来,最大的问题就是怎样去证明其正确,其有效。想到企业中去,多看看google与ms工程性的文章,想研究就多看看学术大牛的文章,比如ICML,IJCAI,KDD,NIPS,CVPR等。大部分工作是,将已有的机器学习与数据挖掘算法应用到具体的实践中,根据业务场景与数据特点对算法进行改造或者调整等。
举个例子,你在淘宝上买一件衣服,系统怎样向你推荐你感兴趣的并且和这件衣服搭配的裤子或者饰品,这就是数据挖掘工程师的一方面工作。
3、常用的知识点介绍
对于数据挖掘与机器学习,也不是小小的几百字能说清楚的,所以再补充一些想从事机器学习与数据挖掘的需要学习的知识点:
1)Basis(基础):
MSE(均方误差),LMS(最小均方),LSM(最小二乘法),MLE(最大似然估计),QP(二次规划),CP(条件概率),JP(联合概率),MP(边缘概率);
Bayesian Formula(贝叶斯公式),L1 /L2(L1/L2正则,以及更多的,现在比较火的L2.5正则等);
GD(梯度下降),SGD(随机梯度下降),Eigenvalue(特征值),Eigenvector(特征向量),QR-decomposition(QR分解),Quantile (分位数),Covariance(协方差矩阵)。
2)常见分布:
离散型分布:贝努利分步/二项分布;负二项分布;多式分布;几何分布;超几何分布;泊松分
连续型分布:均匀分布;正态分布/高斯分布;指数分布;对数正态分布;Gamma分布;Beta分布;狄利克雷分布;瑞利分布;柯西分布;韦伯分布
三大抽样分布:卡方分布;t-distribution;F-分布
3)数据预处理:
缺失值填充;离散化;映射;归一化/标准化)。
4)采样:
简单随机采样;离线等可能K采样;在线等可能K采样;等比例随机采样;接受-拒绝采样;重要性采样;马尔科夫蒙特卡罗采样算法。
5)聚类:
K-Means;K-Mediods;二分K-Means;FK-Means;Canopy;谱聚类;混合高斯模型-期望最大化算法解决;K-Pototypes;基于划分;基于层次;基于层次;基于密度;基于密度和基于网格;2014年Science上的密度聚类算法等。
6)聚类效果评估:
纯度;芮氏指标;调整的芮氏指标;规范化互信息;F测量等。
7)分类&回归:
线性回归;逻辑回归;多分类逻辑回归;广义线性模型;岭回归/L2正则最小二乘回归;正则最小二乘回归;随机森林;决策树;梯度下降决策树;分类回归树;近邻;支持向量机;核函数;多项式核函数;高斯核函数;径向基函数;字符串核函数;朴素贝叶斯;贝叶斯网络/贝叶斯信度网络/信念网络;线性判别分析;集成学习;自适应增强;最大熵模型。
8)分类效果评估:
混淆矩阵;精确度;召回率;准确率;F得分;ROC曲线;AUC面积;Lift曲线;KS曲线。
9)概率图模型:
贝叶斯网络/贝叶斯信度网络/信念网络;马尔科夫链;马尔科夫模型;最大熵马尔科夫模型;条件随机场;马尔科夫随机场。
10)神经网络:
人工神经网络;误差反向传播;HN;循环神经网络;回声状态网络;长短记忆神经网络;CW-RNN;时钟驱动循环神经网络等。
11)深度学习:
自动编码器;堆叠自动编码器;稀疏自动编码器;去噪自动编码器;收缩自动编码器;受限玻尔兹曼机;深度信念网络;卷积神经网络;词向量学习模型。
12)降维:
线性判别分析/Fish线性判别;主成分分析;独立成分分析;奇异值分解;因子分析法。
13)文本挖掘:
向量空间模型;词向量学习模型;词频;词频-逆向文档频率;互信息;期望交叉熵;二次信息熵;信息增益;信息增益率;基尼系数;x2统计量;文本证据权;优势率;潜在语义分析;基于概率的潜在语义分析;潜在狄利克雷模型;统计语言模型;神经概率语言模型;连续词袋模型;Skip-gram等。
14)关联挖掘:
Apriori;频繁模式树生长算法;AprioriAll;Spade。
15)推荐引擎:
基于人口统计学的推荐;基于内容的推荐;协同过滤;基于用户的协同过滤推荐;基于项目的协同过滤推荐。
16)相似性与距离度量:
欧式距离;曼哈顿距离;切比雪夫距离;闵可夫斯基距离;标准化欧氏距离;马氏距离;余弦;汉明距离/编辑距离;杰卡德距离;相关系数距离;信息熵;KL散度/相对熵等。
17)最优化:
无约束优化:变量轮换法;模式搜索法;可变单纯形法;梯度下降法;牛顿法;拟牛顿法;共轭梯度法。
有约束优化:近似规划法;可行方向法;罚函数法;乘子法。
启发式算法:模拟退火算法;遗传算法
18)特征选择:
互信息;文档频率;信息增益;卡方检验;基尼系数。
19)异常点检测:
基于统计;基于距离;基于密度;基于聚类。
20)基于学习的排序:
Pointwise:McRank;
Pairwise:RankingSVM,RankNet,Frank,RankBoost;
Listwise:AdaRank,SoftRank,LamdaMART;
21)工具:
MPI;Hadoop生态圈;Spark;BSP;Weka;Mahout;Scikit-learn;PyBrain…以及一些具体的业务场景与case等。