主题:【原创】抛砖!模式识别和机器学习、数据挖掘的区别与联系 -- 永远的幻想
先说点题外话。
很意外,俺一个土鳖第一次写这样的系列文,没想到反映这么好。后面该写什么倒犯难了。本来是想按“有监督”、“无监督”把经典算法大概说说。但是又一想,还是算了。
第一,网文毕竟不是论文,而且贴图表、公式太麻烦;第二,贴出来也就是个书摘文摘了,和每周读书报告并没区别了;第三,我写这个的初衷就是把它当作在西西河的大牛们面前做一次口头报告,是对自己表达能力和对这方面理解程度的一个试验吧。我争取不列公式,看看自己能不能把思路思想用尽量简单的语言阐释清楚,也是对自己掌握程度的一次大暴露,希望有大牛指点下,看看有什么理解不对的地方。
那么,干脆,把本来打算放在最后的参考书目放在前面吧。从每本书说开去,从作者视角思路异同,表达风格,以及自己当时阅读感受,优缺点等等等。是自己写给自己的读书总结,也是给别人留下点路标。
在西西河也看见过大牛列出的书目,比如厚积薄发老大列出的概率论、金融方面的:【原创】聊聊我所知道的概率论教科书和参考书(一),【原创】金融定量分析的习题解答开源运动:序。即使不是数学专业的,也能感觉到那真是博览群书之后的“厚积薄发”。俺这盆面顶多算刚开始和(huo2),比人家那差太远了。这篇题目虽然叫“经典著作”,其实也就是俺人云亦云地跟风看过这么几本之后,小马过河的一点个人意见而已。还是那句话,抛砖而已。
题外话完。
万事开头难。第一本该介绍哪个,或者第一本该看哪个,实在是不好讲。即使是Amazon上的书评,老外也是理工科两极分化严重,每本都有很多人说适合入门用的,也有很多人说不适合的。但是个人认为,第一本一定要能用最清晰的语言,最简单的例子把尽量多的核心概念、术语讲在前面,最好还要有尽可能多的图,这样初学者才能“不怵”这么多概念名词。有了基本概念之后然后再后面反复涉及这些概念,不断深化理解。最后再能覆盖一定的广度和前沿。
因此:第一本书,我推荐《Pattern Classification》。
中文版:
英文影印:
引进的中文版和影印版,和原版都是第2版,但是英文原版后来多次印刷,改正了很多错误。
优点:
1.版本多,好找。不解释。
2.图多,也不解释。
3.一开始就用简单例子把模式识别的流程,和基本概念比如贝叶斯推断、极大似然等等基本概念,以及评价分类能力常用的接收机特性曲线(Receiver Operating Characteristic curve ROC)等等概念提出来了,讲得比较清楚。即使一开始看不明白,但是你知道有这些玩意,以后会多留心。
4.涉及面比较广。虽然成书比较早了第二版是2000年,第一版居然是1973年。但是覆盖的算法和领域比较广泛,不只限于模式识别了,作为概览很不错了。
5.有深度。很多加*的章节之外,还有涉及哲学思想的评注章节,“发人深省”四个字并不为过,而且值得“反复回味”:比如“奥康的剃刀(Occam's razor)”法则,“没有天生优越的分类器”法则,等等等,这个中译本的序言里也提到了。
6.入门的数学要求不高。这点对工科出身的人入门很重要。个人感觉学过概率和线代,入门就够了。当然,随机过程啊,矩阵论啊当然难免会涉及到,但是作者已经尽量淡化数学要求了。
问题和不足:
1.图注简略。图虽多,有时还是难免不懂。
2.有难度。公式不少,而且有时跳步,够工科生啃的。每个章节都有引申部分。传说有的学校前三章就能讲2个月以上的。
3.适合理解理论思路思想,但是想对照编程实践,有点难度。虽然有一些算法的伪代码,但是个人觉得还是太简略了。主要是对数据的描述太少。不过,好消息是——现在有配套的Matlab教程了!
坏消息是——貌似国内没引进-_-!(偶尔说话大喘气一下,哈哈)
感觉如果不是特别有钱,特别痴迷这个,还是算了。别的书有白提供程序的(再次大喘气)。
4.偏预测,轻数据挖掘;在预测里偏分类,轻回归。这倒不奇怪,人家书名写得明白。
但是,即使想做数据挖掘的,我还是推荐先看这个书。因为首先入门阶段,基本概念都是差不多的,而且后面讲到算法性能评价、选择标准等等思想确实值得领会。
这本主要用来领会思想思路,先不要执着于看懂每行公式,每张图。
第一本大概就这样。
后面就不分先后了。因为有的重理论,有的重应用,而且每个牛人都有自己擅长和生疏的领域,能在自己擅长的领域把各种算法串成脉络,讲清楚发展过程和区别联系已经很难得了。
你下面这么说,好象把SL里输出数据(模式表达)也当成
输入数据来考虑了。。这未免胡子眉毛一把抓。容易造成
概念错误。。
识别在于了别,而非预测
*******************************************************
一般都是把ML算法分成两大类:有监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)。我觉得这其实是从输入数据的形式上分的,说这个离不了公式和图表了,不想先说这个。
我觉得让机器学习首先人要有点概念,否则人自己都一头雾水,想让计算机替他思考,怎么可能呢?
以前搞过神经网络和SVM,见过太多的人随便拿几个变量就去预测,效果很是随机游走。我个人感觉,现在机器学习也就是高级点的计量技术……
首先感谢回应。
觉得是我没说清楚。开始稍微引入点符号吧。
输入数据来考虑了。。
1 首先,“输出数据”是不是“模式表达”?比如典型的分类问题:用N个样本(N个样本*p维Predictor 一个矩阵X,加N*1的-1/+1类标记y_target)训练了一个SVM、CART,Adaboost或者RandomForest模型或者模型族,称为M。这些模型M如你所说,是“模式表达”。对于数据挖掘问题,确实可以说这个是“输出数据”。
但是,习惯上说这个M是“训练”出来的“模型”,而不是“输出”出来的“数据”。“输出”通常用在指代模型在未知类别的样本x上拟合的y_est。这个可能是表达习惯的问题吧,习惯说某某算法训练了一个模型M,而不是说输出了数据M。
2.“输出数据”是不是作为“输入数据”。
首先这里的“输出数据”你是想说y_target吧?反正“模式表达”M是肯定不是输入数据的。(未训练的参数模型是个空架子,这个不能算输入吧?)
看来这块真是我说没说清了。细说一下。
对有监督学习,训练的时候,N*p维的X和y_target肯定是都要作为“输入数据”的。
而无监督学习,有2种情况。
比如上面这个分类问题,用KNN,GMM,Cluster,SOM,PCA,ICA来做,训练的时候可以只输入N*p维的X。
但是对于做购物篮分析这种应用,对应的Association Rules和Apriori这种,其实是无所谓y_target的。而你把某一列商品的数据作为y_target,那么他针对这种商品输出的模式,也可以说这是工作于Super模式了。既可以工作于Super也可以工作与Unsuper,只是看你怎样看待输入数据,也就是我说的“从输入数据的形式上分”的意思,看来是表达不当啊。
确实怪我说得不清楚。其实文中不想以Super/Unsuper来区分算法,除了这个原因,还有一个原因。
因为实际使用这些算法时,经常把这两种混起来用。比如可以先用PCA,对N*p维的X降维成N*q (q<p),作为预处理,然后把N*q作为X和y_target输入到SVM之类的算法去;也可以用y_target(比如K个类)把X分成K组,然后每组训练一个GMM。
这样在应用者的角度看,其实是不去管算法是Super还是Unsuper的,或者在这上面走脑子意思不大,知道每种算法擅长干什么才是正经。
工科应用者的兴奋点,对预测问题在于计算开销大不大?预测误差大不大?对数据挖掘,在乎是不是“Off-the-shelf”(算法能不能拿来就能用。一个是对输入数据“不挑食”,变量的幅值用不用规整到一个范围啊,连续还是离散啊,是不是要先标准化啊……这些罗嗦的要求尽量少;一个是模型参数尽量少,也尽量少调整)?还有可解释性好不好。
“别”倒底是不是“非预测”呢?这个我觉得我已经说清楚了啊,看来还得再说说。
这个“别”的工作,在PR的不同领域可以是Classification、detection、recognition、identification...,但是送到ML算法这里的时候都一样的,也就是说y_target是{0,1},{-1,+1},或者{1,2,3...K}这样的类别标记。目的也是一样的,应用的时候(不是训练过程中)给你一个x,让你的模型输出y_est作为你识别出来的类别。你是只知道x,不知道真实的y_target的。这也就是为什么会被放在Prediction里。这真不是我放的,大家都这么说。
之前说过的,如果你的y_target 是[-1,1]这样的连续型变量,那么给你未知的x,输出y_est的“回归”,工作于“新数据”上的时候,也是一样被称为预测。
其实,很多ML算法都是通吃这两种y_target的。很多算法即使你输入的是{-1,+1}的类标记,内部也是当做连续值来处理的,输出的预测结果y_est其实就是个连续值,只不过最后根据符号又变成了{-1,+1}这样的类标记。
这样站在发明算法的人的角度(也包括我这种还要用算法的人)来看,识别、回归和预测有多大区别呢?所以识别是属于预测的,没问题的。
概念不辨不明,再次感谢回应
以前搞过神经网络和SVM,见过太多的人随便拿几个变量就去预测。
其实我在前面说为什么工科人还能混,已经说到这个了,但是没地方展开说了。
那个流程图里的“数据表示”,其实不仅仅是“量化编码”的软硬件需要背景知识,还有“特征选择”其实也是要背景知识的。
针对特定问题下得到的训练数据,构造、选取什么样的特征,直接关乎识别结果,这个比后面用什么样的ML算法还要关键。你的原始特征下是严重不可分的样本,或者是非凸的,你“没这点概念”(这个词用得太恰当了),不进行预处理,就送进一个凸优化寻优的算法,结果是可想而知的。
这就是我推荐的第一本书里提到的“没有天生优越的分类器”定理。没有一个万能方法能通吃各种数据。NN SVM确实分别以“误差低”和“在样本不可分情况下误差低”而著称,但是也不是万能的。
照上文的意思,人脸识别,已经是工程上可以实现的问题?
本來在我們學校BBS看到的轉貼,覺得寫的很有道理,更加確立了自己在機器學習方面的學習慾望~
产品化实现的问题放一起说吧:
像这种识别人身份的技术,统称Biometrics,翻成生物特征鉴别。包括了用人脸,语音,虹膜,指纹,乃至走路的步态等等等
指纹和虹膜从算法到产品做得很成熟了,没啥研究的了。(识别率都是99后面好几个9的那种。)
说话人识别,因为语音主要是频域那块,也很成熟的技术,但是实际测试下来误差还是大,主要是人的语音可能会慢慢改变,生病也会有很大变化,还有模仿的问题,所以一般不单独用来识别身份。
人脸是特征最丰富的,也是最有前途的。但是问题也最多,各种角度,遮挡,等等等。虽然论文里识别率能很高,也早就有产品了,但是主要是放在门口作为门禁,采集正面图像吧。但是研究的还是很多,以后放在公共场所的监控摄像头上可能就不是正面了,可能就有遮挡了……然后从远走到近还会有变化。
而且,用什么特征表示人脸,还是各村有各村的高招儿,没有定论。(不像虹膜指纹里的关键点,语音的频域Mel谱特征,这都是公认的,没得研究了。)
所以随着恐怖分子到处钻,人脸这玩意还有得研究呢
谢谢鼓励啊。敢问什么学校啊,天天关注西西河。本来以为就是在西西河里胡言乱语,我还没来得及往自己别处的blog上贴呢。就被别人转了,自己也赶紧转帖一下吧,哈哈哈。
机器学习,理工科视角不同,先生和教材不同,学生的学习感受和难易程度也不同。以前见过一个帖子,MIT一个做计算机视觉的博士,先花2年多把可能用到的各种数学学了一遍,然后挨个点评……把俺这种工科土鳖看傻了,只好飞快爬走,实在不好意思承认俺其实也和CV沾边的。好像Stanford的风格比较“实用”些?后面会重点谈到Stanford的牛人牛书《the Elements of Statistical Learning》,其实看过这书的人一眼就看出,我前面的例子就有这书里的。我也是以这本书为重点学习的。
我这算是赶紧补上引文出处吧!本来想放最后再说的,但是既然被转了,还是先给出来比较好~
为什么自动化有模式识别,这个应该是计算机系的嘛。我以为自动化就是搞机械啊流水线啊什么的
天津大學BBS數學版,版主挺喜歡來這裡的,把我也給感染了
http://bbs.tju.edu.cn/TJUBBS/tdoc?B=MATHS
多少多少宅,哦不,是斋
在天津只待了很短的时间。临走之前还特意到聂士成像附近看了看。感慨现在大家可以安心读书,不用在八里台拼死血战了。
个人以为他们的长项是在数据挖掘上。
在海量数据上的数据挖掘,动辄就是百万级的数据,存储访问,管理,都涉及数据库和相关的软硬件知识,从软件上的数据库、信息安全,到硬件上做超算的机群的部署,乃至并行计算算法设计。这绝对是计算机系主打了。我们这种外专业的搞这些,只能是用到了就学两下子,不是玩票水平,也是草台班子了。
而作识别呢,对不起,样本少得多了。人脸之类一般用到的库也就是3000 4000人的规模吧,这一人几张图的采集工作已经很不得了了,有的论文用自己采集的数据可能用到的人也就是几十人。即使训练算法的时候故意加入些“不是人脸”的负样本,一般矩阵的规模也就是1万维左右,单个PC的内存还够用,用C++写的程序速度也还能忍受。