五千年(敝帚自珍)

主题:【原创】抛砖!模式识别和机器学习、数据挖掘的区别与联系 -- 永远的幻想

共:💬65 🌺337
分页树展主题 · 全看首页 上页
/ 5
下页 末页
    • 家园 (五)对几本经典著作的评注1

      先说点题外话。

      很意外,俺一个土鳖第一次写这样的系列文,没想到反映这么好。后面该写什么倒犯难了。本来是想按“有监督”、“无监督”把经典算法大概说说。但是又一想,还是算了。

      第一,网文毕竟不是论文,而且贴图表、公式太麻烦;第二,贴出来也就是个书摘文摘了,和每周读书报告并没区别了;第三,我写这个的初衷就是把它当作在西西河的大牛们面前做一次口头报告,是对自己表达能力和对这方面理解程度的一个试验吧。我争取不列公式,看看自己能不能把思路思想用尽量简单的语言阐释清楚,也是对自己掌握程度的一次大暴露,希望有大牛指点下,看看有什么理解不对的地方。

      那么,干脆,把本来打算放在最后的参考书目放在前面吧。从每本书说开去,从作者视角思路异同,表达风格,以及自己当时阅读感受,优缺点等等等。是自己写给自己的读书总结,也是给别人留下点路标。

      在西西河也看见过大牛列出的书目,比如厚积薄发老大列出的概率论、金融方面的:【原创】聊聊我所知道的概率论教科书和参考书(一),【原创】金融定量分析的习题解答开源运动:序。即使不是数学专业的,也能感觉到那真是博览群书之后的“厚积薄发”。俺这盆面顶多算刚开始和(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.偏预测,轻数据挖掘;在预测里偏分类,轻回归。这倒不奇怪,人家书名写得明白。

      但是,即使想做数据挖掘的,我还是推荐先看这个书。因为首先入门阶段,基本概念都是差不多的,而且后面讲到算法性能评价、选择标准等等思想确实值得领会。

      这本主要用来领会思想思路,先不要执着于看懂每行公式,每张图。

      第一本大概就这样。

      后面就不分先后了。因为有的重理论,有的重应用,而且每个牛人都有自己擅长和生疏的领域,能在自己擅长的领域把各种算法串成脉络,讲清楚发展过程和区别联系已经很难得了。

      通宝推:南寒,
      • 家园 我觉得……

        我觉得让机器学习首先人要有点概念,否则人自己都一头雾水,想让计算机替他思考,怎么可能呢?

        以前搞过神经网络和SVM,见过太多的人随便拿几个变量就去预测,效果很是随机游走。我个人感觉,现在机器学习也就是高级点的计量技术……

        • 家园 说到点子上了

          我觉得让机器学习首先人要有点概念,否则人自己都一头雾水,想让计算机替他思考,怎么可能呢?

          以前搞过神经网络和SVM,见过太多的人随便拿几个变量就去预测。

          其实我在前面说为什么工科人还能混,已经说到这个了,但是没地方展开说了。

          那个流程图里的“数据表示”,其实不仅仅是“量化编码”的软硬件需要背景知识,还有“特征选择”其实也是要背景知识的。

          针对特定问题下得到的训练数据,构造、选取什么样的特征,直接关乎识别结果,这个比后面用什么样的ML算法还要关键。你的原始特征下是严重不可分的样本,或者是非凸的,你“没这点概念”(这个词用得太恰当了),不进行预处理,就送进一个凸优化寻优的算法,结果是可想而知的。

          这就是我推荐的第一本书里提到的“没有天生优越的分类器”定理。没有一个万能方法能通吃各种数据。NN SVM确实分别以“误差低”和“在样本不可分情况下误差低”而著称,但是也不是万能的

    • 家园 永远兄好文

      您要是方便的话,能加点参考书目,就更加功德无量了。

    • 家园 (四)可解释性和数据挖掘

      从这节开始,打算把ML算法的概貌描绘一下。

      ML领域发展特别快,几乎所有的论文都声称自己弄出一种新算法。看论文多了之后我的体会是,如果心里没有几条线索,就分辨不出这一堆算法的区别与联系,最后的结果是学会一堆“支离”的算法,学习了苹果只知道这是苹果,给个鸭梨就不认识了,给个苹果梨就更不明白是什么东西了。至于应用时,更不知道哪种算法更适合自己的问题。

      一般都是把ML算法分成两大类:有监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)。我觉得这其实是从输入数据的形式上分的,说这个离不了公式和图表了,不想先说这个。

      从ML的目的和用途来分,可以分成预测(Prediction)和数据挖掘(Data Mining)。我觉得对应用来说,这么分更有意义些。

      这两大类算法的核心区别就是:预测问题更重视算法的预测能力(Predictive Power),数据挖掘问题更重视算法的可解释性(Interpretability)。

      预测之前说过了,针对的目标变量如果是离散的类别标记,比如医学上的某种病的阴性阳性,或者人的身份编号,就叫分类(Classification);如果针对的连续的变量,比如股价,房价,就叫回归(Regression)。

      预测能力很容易理解,我们只关心train set上训练好的算法在test set上面误差、误分类率要尽可能低。也就是说,模型给出的预测要尽可能地接近实际结果。

      可解释性就要好好说说了。简单说就是,我们更关心输入的p维变量之间的联系,或者算法产生的预测是哪几个变量起了主要作用,也就是说,算法给出预测结果的根据是什么。

      比如商业智能(BI)上常见的购物篮分析(Market Basket Analysis)就是个典型的看中可解释性的数据挖掘问题。因为直接有“钱景”,所以几乎每个讲统计的,讲数据挖掘、机器学习的,甚至讲数据库应用的书,都要提到这个事,现在各个购物购书网站也都在做这个事。

      零售商从积攒的海量顾客账单中可以“挖掘”出什么呢?首先,分析哪几种商品容易同时出现在顾客的购物篮里,商场就可以把这些看起来风马牛不相及的东西放在一起,方便顾客购买;另一方面,分析客户办会员卡时留下的个人信息,可以分析出经常光顾本商场的是那些特征的人,这样对外投放使广告便更加有的放矢,可望吸引更多这些类型的人来。

      流行的做法是每张账单作为1个p维向量,对应所有p种商品。买了置1,没买置0。N张账单就组成了一张N*p的值为0-1的表格。用流行的Apriori算法从数据中“挖掘”购物模式。比如一个support = 0.03,confidence = 0.87的Rule:

      {花生酱,黄油,果酱}=>{面包}

      这就说明,如果一个顾客同时买了前三种东西,那么他同时买面包的可能性是87%。而这种同时买4种东西的顾客,在总顾客中占3%。

      这个模式看起来平淡无奇,可是有时有很奇怪的模式被挖掘出来,忘了从哪里看到的一个例子:

      {尿布,奶粉}=>{啤酒,刮胡刀}

      把这4个放一起确实提高了销量,原因后面再说。

      而对客户身份信息的挖掘结果比如说是:

      support = 0.13,confidence = 0.8

      {在家讲英语,有住房,职业是professional}=>收入大于$40000。

      那就赶紧针对这些人,在他们经常出没的地方做广告吧!

      注意看这些“模式”,前面的括号里只有2 3个“变量”,远远小于总共p个变量。也就是说,我们做出的预测,只依赖于所有p个变量中特定几个变量。

      如果我说这就是可解释性。恐怕大家还是不明白。嗯,佛教上阐释概念,有“表诠”和“遮诠”的说法。为了说明一个概念,表诠就是说“它是什么”;遮诠却不说“它是什么”,而是说“它不是什么,不是什么……”。嗯,下面再和不具备可解释性的算法比一下就知道了。

      比如还是N*p的矩阵,如果我想分析什么东西导致了买面包,我把其他p-1种东西 +1个截距项一共N*p做为X,面包N*1作为Y,做个最小二乘:

      Beta = (X’*X)-1*X’*y

      这个结果Beta意味着什么呢?有了这个Beta,给我任何一个1*(p-1)的账单x,都能给出买面包与否的预测值y_est = x* Beta。

      但是,看着这个回归出来的p维的Beta,我不能像之前那样,简单说出对买面包来说是哪几种别的商品起了更重要的作用,也就没法想出提高销量的方法了。

      这就是预测能力和可解释性的区别。

      预测能力就是输出结果的准确度,而可解释性是可以用来帮助人们理解模式背后的原因。比如从前面那个{尿布,奶粉}=>{啤酒,刮胡刀}的购物模式,再配合顾客的年龄和性别,就最后推断出,可能是妻子在坐月子时,年轻父亲们被打发出来购物的。进而可以重新设计实验或者进行改进:不但把这已发现的4种商品摆一起,而且把其他年轻父亲可能会买的东西也摆过来试试。

      医学上也是这样。不是特别关注用已有的p项的因素(行为习惯、实验条件、检查化验结果)去准确预测疾病,而更关注如何从p个因素中发现是哪几种因素组合更容易导致疾病,进而可以改进实验设计,改进检查,乃至改进预防和治疗的方案。传统上统计学里作为因素分析(Factor Analysis)问题来研究,而数据挖掘使用的方法就更多,涉及的更广。而且数据挖掘也不仅仅是用来进行变量选择和重要性分析,可以用树、图、层次聚类之类直观的结构,描述变量之间的复杂依赖关系。

      前一段有个书叫《小趋势》(microtrends)的,里面举了美国社会统计学家统计出来的许多看起来奇妙的小众人群,用来描述当今的美国社会。甚至进而有针对性地设计竞选宣传策略,左右选举结果。这都属于看中可解释性的数据挖掘了。

      总结一下预测和数据挖掘的区别:

      预测是偏重得到决策结果,数据挖掘是偏重分析决策原因和过程

      预测问题主要是在生物特征鉴别(人脸,语音,指纹,虹膜)、机器视觉、目标跟踪这些领域,直接代替人进行决策。在商业数据,医学数据里,需要解决数据挖掘问题,给人提供参考

      之所以要费劲区分预测和数据挖掘,因为天下没有免费的午餐,一种算法预测精度高了通常很难具备太好的可解释性。要针对具体的应用问题选择合适的算法,就要明白自己更需要的哪种能力。很多算法同时具备一定的预测准确度和可解释性,仅从算法形式上很难分清,还是应该从应用背景上来分析。

      个人最后发点谬论:一个应用问题到底是预测还是数据挖掘,说到底是你有没有能力改变数据来源,或者重新设计输入数据?针对图像的,你一定是在既定的传感器硬件条件下设计算法的;散户炒股,你的数据源也是有限的,所以这些都是预测问题,而且预测准了就够了。而商业销售数据、医学实验数据,你是可以改变销售策略,改变实验条件的,而且,你的目的不仅是分析现有数据,更在于是后面应该采取什么行动

      站在工科来侃理科,熟悉预测却偏要来侃数据挖掘,一头汗啊。

      • 家园 唯了别识。把识别一定要说成预测,这个很别扭啊
      • 家园 一点建议

        你下面这么说,好象把SL里输出数据(模式表达)也当成

        输入数据来考虑了。。这未免胡子眉毛一把抓。容易造成

        概念错误。。

        识别在于了别,而非预测

        *******************************************************

        一般都是把ML算法分成两大类:有监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)。我觉得这其实是从输入数据的形式上分的,说这个离不了公式和图表了,不想先说这个。

        • 家园 关于Prediction和Classification

          首先感谢回应。

          觉得是我没说清楚。开始稍微引入点符号吧。

          你下面这么说,好象把SL里输出数据(模式表达)也当成

          输入数据来考虑了。。

          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}这样的类标记。

          这样站在发明算法的人的角度(也包括我这种还要用算法的人)来看,识别、回归和预测有多大区别呢?所以识别是属于预测的,没问题的。

          概念不辨不明,再次感谢回应

          • 家园 继续探讨

            多谢回复这么长的帖子。。

            先简短回一个,写多了资本家不乐意。:)

            这么说吧,比如我给你一图片(X), 让您的视觉系统=M,你对我说,

            "我predict这是一桌子(Y)." 这像话吗?

            对人这个M来说,桌子就是桌子,是个识别问题,说成prediction

            大概现在PR在识别方面还是不成熟,做不到~100%识别。所以要说用M-pr来预测,图X,大概有85%是桌子,12%是椅子,3% 其它。

            你说的X, Y 都是输入,这个从trainning的操作上可以说没错,但是从PR概念上这样很容易混淆。尤其如果是对不太了解的人写的介绍性文字,尽量概念清楚些,你的读者看着也明白些,right?

            首先,“输出数据”是不是“模式表达”?比如典型的分类问题:用N个样本(N个样本*p维Predictor 一个矩阵X,加N*1的-1/+1类标记y_target)训练了一个SVM、CART,Adaboost或者RandomForest模型或者模型族,称为M。这些模型M如你所说,是“模式表达”。对于数据挖掘问题,确实可以说这个是“输出数据”。

            这些M们还真是第一次见。。我说的模式表达就是Y.

            “别”倒底是不是“非预测”呢?这个我觉得我已经说清楚了啊,看来还得再说说

            别=difference. 了别可以说是classification..

            确实怪我说得不清楚。其实文中不想以Super/Unsuper来区分算法,除了这个原因,还有一个原因。

            因为实际使用这些算法时,经常把这两种混起来用。比如可以先用PCA,对N*p维的X降维成N*q (q<p),作为预处理,然后把N*q作为X和y_target输入到SVM之类的算法去;也可以用y_target(比如K个类)把X分成K组,然后每组训练一个GMM。

            这样在应用者的角度看,其实是不去管算法是Super还是Unsuper的,或者在这上面走脑子意思不大,知道每种算法擅长干什么才是正经。

            S or U-S,有个外界knoeledge 介入的问题。从理论研究上来说,比如同样两个人脸识别的系统,一个是S, 一个是 U-S。都能达到比较高的识别率。那么U-S的价值要高。为什么?因为这个U-S很可能是个普适的系统。

            从这个角度来说,所有S,U-S混合的系统,都不能称为是 un-supervised 系统,而变成S了。

            工科思维确实很偏重实用,不过我想概念清楚还是重要。所以和你探讨一下

      • 家园 精彩!得宝吱一声。
      • 家园 讲得好,赞一个!

        工业上注重data mining,就是因为有大量数据,需要找出问题、解释问题,然后决定下一步的行动计划。现在这东西在军事上也开始应用了,美军用data mining发现游击队放IED的规律,据说效果不错。

      • 家园 能介绍几本书么?

        中文的好象比较少?英文的也行。

      • 家园 外行说两句

        看过一个讲用机器代替人读乳腺检查X光片的报道,据说准确率比人高,还快,还便宜。

      • 家园 好贴
      • 家园 个人更喜欢super/unsuper的分法。

        数学上简单直接,一目了然,但怎么解释这个结果,就看个人功力了。

分页树展主题 · 全看首页 上页
/ 5
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河