Murphy的《机器学习》是不是比Mitchell的《机器学习》更适合入门

机器学习入门的书单(数据挖掘、模式识别等一样)转
(写在前面)昨天说写个机器学习书单,那今天就写一个吧。这个书单主要是入门用的,很基础,适合大二、大三的孩子们看看;当然你要是大四或者大四以上没看过机器学习也适用。无论是研究智能还是做其他事情,机器学习都是必须的。你看GFW都用机器学习了,咱是不是也得科普一下。
(全文结构)其实,我想了想,学一门学科,列出一堆书,评论来评论去的,其实对初学者用处不大;他都不知道这些是啥,你就开始一顿评论,只能空留一堆冷线而已。那我就首先说说机器学习都是干些啥的?它有哪些基本内容吧。
(这货是干啥的?)机器学习,也叫数据挖掘、模式识别;其定义很多。但大白话的说,机器学习要做的就是,现在有一些数据(比如你人人网好友和他们的发言),我们要对数据进行处理,希望从数据中得到我们想要的信息(比如这些好友哪些和你投缘)。从上面的例子,我们可以看出机器学习其实是对人类智能的模仿,也是实现人类和更高智能的必经之路。
(这货都有些啥?)那他他大体上有哪些内容呢?
(颇难的机器学习理论,数学小白退散)
第一部分,机器学习的底层理论:机器学习的底层理论有一些,比如推理与规划、近似可计算理论、正则化、提升理论、核方法、当然还有大名鼎鼎的统计机器学习理论等等。这部分内容不是初学者学的。
一是这些理论其实是在实践中总结的,没有基础的机器学习方法是不能明白理论的;二是这些理论需要的数学很高,您那高等数学啥的就别提了,这些理论至少也得有泛函分析的一般知识、优化理论的一般知识、矩阵理论的一般知识、高等概率论、随机分析等等的数学基础。三是这些理论对于大部分只是想用一下机器学习方法的人,我觉得毫无意义;您要只是想用一下机器学习,这些理论对您估计看过全当娱乐。
(机器学习主要方法,数学小白也可以看过来了耶)
第二部分,机器学习方法:这部分才是初学者应该学的,也是必须学的。
(按照数据形式,给了大体情况)他按照对数据处理可以分成如下几个部分:
1.监督学习,也就是你的数据都已经处理的很好了,哪些数据是哪种情况都分清楚了。
2.非监督学习,你的数据太原始了,全是一堆数,都不知道哪个是哪个情况。
3.半监督学习,因为监督学习效果好,但是数据要求太高;非监督学习效果不咋地呀,但对数据要求低;那么我们折中一下,先标注一部分数据,然后用监督学习对其他未标注数据进行标注,如果算法产生的准确率在某个参数以下,则将这个数据给人来标准。
4.迁移学习:比如我们现在有种方法,用在了图书之间的相似分析上,那么这个方法可不可以用在人人网上用户的相关分析上呢?这就是迁移学习。
5.强化学习:根据环境反馈进行学习。
6.“各种乱入学习”:其实,还有很多奇葩的学习方法不是以上五种比较常见的学习方法,他们大体上都是各种奇葩的想法,加上各种有爱的数学理论推导而成。因为还不是十分的成熟,所以初学者也不必太纠结这部分。
(我们一般处理的数据,都是啥样的呢?)
我们处理的数据,一般来说是表状的,说白了,就是——每一条数据就是一个向量(前几天看到有个孩子说向量是有方向的,我觉得特无语,=
=!,现在就连物理学里面的向量你都想象不出他的方向了,虽然向量可以想象成几何形体,这是分析的基础,但是不要拘泥于几何)。既然每一条数据是一个向量,那么很显然所有数据构成了一个向量空间。这个向量空间一定要有一定的抽象想象能力,不光是欧式空间,还可能是拓扑空间。。。马上你就会知道为啥了。
那知道了如上内容。我们看看机器学习最基础最核心的有哪些方法,当然如果你看的书里面超出这个,请不要惊讶,我只是列举了非常非常常用而常见的方法。
(最常见的机器学习方法 = 基础方法 * 拓展方法 *
应用领域)
(基础方法)
1.关联分析:现在数据是一条条的销售记录,我们要找出其中哪些商品经常被一起买,这个到时候会有两个主要方法:Apriori方法,主要就是剪枝,和他相识的有AIS和STEM,其中STEM是针对SQL语言使用的关联分析算法;FP-growth,主要是建立一个树,通过这个结构加速算法;还有垂直关联挖掘、数组方法。
2.决策树:有一个叫读心术的应用,他不断让你提供你心中所想的人的信息,进行不断的推演最终找到你所想的人。这个应用看似神奇,其实说白了用决策树就可以大概做一个。决策树就是一颗树,树的每个边上都有条件,根节点是起始节点,叶节点是结果节点;从根节点,不断的依据边上的信息移动到相应的树节点上,直到叶节点,给出结果。这就是决策树。决策树是一大类算法,主要有ID3、C4.5等等。
3.感知器:还记得我刚才说的向量空间么?每一个向量都可以表示为空间中的一个点,那如果我们可以找到一条直线把所有点分为两部分,一部分都是A类,另一部分都是B类。那么我们以后还有一个点,我们只要看他在直线的哪边就可以直接判定他的类别。感知器是一大类算法,算法太多了,不一一枚举。
4.支持向量机:感知器的升级版。如果学过泛函的同学,都知道完备的内积空间就是Hilbert空间,核方法可以在Hilbert空间上进行。支持向量机就是使用了间隔最大原则和核方法来对感知器进行改进,从而得到相对好的效果。支持向量机,是一大类算法。
5.反馈神经网络:感知器的升级版。感知器是一个线性函数,如果多个线性函数互相嵌套,而且使用非线性动力提供复杂的向量空间曲面描述,我们会得到比感知器更好的效果。=
=!提问支持向量机和反馈神经网络杂合是啥?
6.神经网络:其实神经网络包括反馈神经网络。之所以把反馈神经网络单独提出来,是因为用的太多,而且他是继承感知器的。但是神经网络本身可是一个非常非常非常非常丰富的一大大大类算法,而且错综复杂。我尝试分个类吧,主要有层次网络、时延神经网络、耦合神经网络、自组织神经网络、递归神经网络(和时延神经网络有点像,但是在连续和离散量上有些许的不同,连续可用模拟电路实现)、径向基函数网络(这个其实是正则化的网络,一般用的RBF网络就是反馈神经网络T-正则化)、集成神经网络、模糊神经网络、玻尔兹曼机(使用退火算法的一种网络)、概率神经网络等等等等等等。当然还有神经场理论,需要微分几何的知识,属于机器学习的基础理论,初学者可以无视。当然还有人试图设计神经网络计算机,初学者也可以无视。当然神经网络可是很神奇的,他连PCA、ICA、LDA(线性判别分析)、LDA(隐藏地理特来分布)啥的都可以用神经网络学习。
统计判决方法:统计判决方法,是依据统计理论设计的统计判决理论。其实,统计判决是很实用的理论,而且其中包含的很多方法都在各个机器学习领域应用,比如最小化最大损失、贯序判决、参数估计等等。朴素贝叶斯就是其中的一个。这也是一大类算法。
8.贝叶斯网络:推理和规划理论支持的一个理论。
9.序列分析方法:就是分析一个序列的学习。语言就是一个文字的序列,所以诸如隐马尔科夫方法啥的。
10.逻辑回归:如果你学习过生态学,你对逻辑方程和逻辑回归就毫不陌生,其实这个和感知器是一个尿性的东西。他和隐马尔科夫模型的学习可以用到一个叫最大熵的原则。其实最大熵原则是可以在信息论下被用变分法中的柯西-拉格朗日方程推出来的,这也是Duda的《模式分类》后的一道习题。
11.聚类方法:我们有一堆数据,我们想知道他们自己之间的哪些是一类。也是一大类方法,常用的有:k-均值、层次聚类、密度分布聚类、模型聚类、图聚类算法(包括蚁群聚类)。
12.数据处理方法:比如主成分分析(PCA)、线性判决LDA、独立分析ICA等等。
13.其他:抱歉,我虽然写了一些,但觉得基础中的基础,貌似好像还不止这些,归纳起来貌似有些困难。不过其实主要的应该就是如上了吧。欢迎补充。
(拓展方法)
1.在线化:因为我们知道,现在的数据都是不断的来,不断的更新。但由于数据巨大,我们不能每更新一次,我们就重新计算一次,所以让算法对增量有办法的方法叫在线化。基础方法都可以查到他们的在线化方法。
2.分布式和并行化:这个还是针对大数据,提供以上所有基础方法的分布式和并行化方法。
3.修正过拟合方法:由于以上基础方法中大部分都存在过拟合问题,说白了就是对数据中的噪声进行了拟合,使得学习效果变差,本来应该得到的信息是y=x+1
而现在得到的信息是y=(x^100+1)/(x^99+1)+1。。显然后一种得到的太过于精密,反而效果不好了。以上大部分基础方法都可以用修正过拟合的方法来修正。其中正则化就是一个比较好的方法。
4.各种数学乱入的方法:没错,你没看错,各种数学乱入呀。比如模糊数学乱入,产生一堆新方法:模糊SVM、模糊神经网络啥的。再比如比较综合的数学乱入,商空间和粒运算啥的。再比如李群:李群机器学习。再比如微分几何乱入,有什么流形学习。这些我觉得,看过全当娱乐吧。
(应用方法)
1.应用到图,摇身一变为图挖掘。
2.应用到数据库和数据仓库中,摇身一变为数据挖掘。
3.应用到社交网络中,摇身一变为网络科学。
4.应用到自然语言处理中,摇身一变为统计自然语言处理(多有错误,全当娱乐)。
5.应该到你的领域。。。。摇身一变。。。。
第三部分:机器学习应用:学以致用,就不多说了。
(书单这货在这呢!)
其实,我觉得,你要是真的能对机器学习有个大体脉络的了解,书单也无所谓。你照着上面的东西,百度出一些博客看看,可能更适合你。或者你去找一些论文,也行。那我这里就推荐几本入门的吧。
其实,我觉得,你在亚马逊检索机器学习,第一页的书我应该是全看了,第二页的书大部分都看了,第三页亦然。。。。。你也可以这么做。。。
曾经写过的这方面的书单:
如果你非要推荐的话:
1.Duda的《模式分类》。其实我个人更喜欢《现代模式识别》这本书,但是由于国人的崇洋媚外情绪实在太严重,确实国内很多书抄袭现象严重、基本上出书目的就是为了出书,根本不是给人看到。但也不能否认国内也很多好书!
2.《现代模式识别》(第二版),真心是好书,在我个人看法,完胜Duda那本无疑。
3.Mitchell的《机器学习》。
4.第一本和第二本,数学都需要很多,买书或者借书,请务必看清前面序言中的关于数学知识部分的说明,否则您就只有一个劲的补数学了。第三本其实数学需要的不多,但内容太少,而且涉及一些浅显的机器学习理论,也比较麻烦。这倒不如《机器学习引论》(An
Introduce To Machine Learning),这本可以说用了最少的数学知识,讲了一些内容,也很薄,很好看。
其实,够了。为啥呢?因为问我看哪方面书的人挺多的(因为我觉得我成天就看书、看论文啥的)。
但他们反复的问,貌似你推荐他们几本,他们看了看或者没看,就又要你推荐。。。
说句心里话,学习哪一门新科目,都不是一帆风顺的。你觉得你之前完全没有基础,200多页的机器学习书,你可以用一个下午秒杀,那我觉得你。。。太有爱了。
所以说白了,书不是重要的,重要的是你的决心,你到底要不要学这门学科!你要是抱着半吊子的心态,那果断你可以不用看了,因为半吊子的决心是不会学明白任何一门学科!你要是想学,就咬紧牙,坚持看,反复看,反复查。。。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。听说数据分析对数学要求很高,我早都忘记了,蓝瘦香菇! 没关系,跟着何博士一起重学数理基础,40讲课程让你轻松踏上数据科学之路!拼团低至299元!http://wxa11ff./group/58fdd7ba6ed6b6
> 看完《机器学习》的总结与心得
& & & & & 《机器学习》 by 周志华
作者的回复
读者敬启 &每章自限不超过25页,否则很难期望一般学生在课下认真阅读。因此,内容必需有所选择。希望让读者看到ML大致全貌,并在各分支不偏颇地为后续深入打下基础。教科书不是工程实践手册,深度学习目前“道理清楚”的东西很少,没多少能写进基础教科书的
另外,读后若只看到若干种方法,那么还没得到本书的精华。不妨放一段时间后再读。这本书是可以在理解机器学习的不同阶段多读几遍的,虽主要面向入门读者,但也兼顾了其他层次。不同境界的读者会有不同的收获,感觉可能也不一样
周老师主页的读者敬启部分内容
初学机器学习易陷入的一个误区,是以为机器学习仅是若干种常用方法的堆积,于是把目光仅聚焦在具体算法的推导和编程实现上;待到实践中拿出所学,却往往发现效果不尽如人意。其实,现实世界问题千变万化,少有照搬书本之法就能奏效之时。一个问题,常可从多种视角抽象;同一种方法,亦常可从多种视角导衍。现实中更多时候,需依据问题条件对已知方法进行改造融通方能有效。须知,方法是“死”的,思想才是“活”的。欲行此道,则务须把握方法背后的思想脉络。无论创新科研还是应用实践,皆以此为登堂入室之始;然而初学者得之甚难。因此,本书在有限的篇幅中更侧重于这个方面,冀望辅助读者奠造进一步学习精进的视野心法,而对一些读者稍下工夫就易自行弄清的冗细则惜墨不赘。
对我来说,可能因为偏向做工程应用,所以总结心得时更容易偏向方法论。
但在看书时我有特别注意去了解模型背后的核心思想和基本思路,但就目前而言,可能理解的程度还不够深。
以下是正文
这段时间利用下班晚上和周末在家的时间把《机器学习》看了一遍,总的来说,除了前两章是基础,其余章节都是介绍模型方法,应用场景、理论推导、优化过程、算法等,每章都可独立阅读而不受其他章节影响。
如果只是每一章都看完,顶多就是了解了一种方法,相互之间是割裂的,这样当碰到一个实际问题,仍然无法思路完整的求解,因而有必要在阅读时就要有意识甚至刻意的建立起知识架构。实际上,所谓的机器学习,是面对一个具体的问题,从给定的数据中产生模型的算法,也就是说脱离了实际问题谈机器学习算法是毫无意义的。
参考本书的章节内容,加上自己在读书、工作中的一些理解,简单总结一下基于机器学习的一般性问题解决方法。
前面提到,脱离实际问题谈机器学习是毫无意义的,那么在给定数据集(所谓大数据)和具体问题的前提下,一般解决问题的步骤可以概括如下:
1、数据抽象
将数据集和具体问题抽象成数学语言,以恰当的数学符号表示。这样做自然是为了方便表述和求解问题,而且也更加直观。
2、设定性能度量指标
机器学习是产生模型的算法,一般来说模型都有误差。如果模型学的太好,把训练样本自身的一些特点当成所有潜在样本具有的一般性质,这种情况称为过拟合,这样的模型在面对新样本时就会出现较大误差,专业表述就是导致模型的泛化性能下降。
与之相对的是欠拟合,模型对样本的一般性质都没学好,这种情况一般比较好解决,扩充数据集或者调整模型皆可。
而一般来说无论是机器学习还是现在很火的深度学习,面对的主要问题都是过拟合。那么为了保证模型的泛化能力足够强,必须要有衡量模型泛化能力的评价标准,也就是性能度量的设定。
很显然不同的性能度量会导致不同的评判结果,好的性能度量能够直观的显示模型的好坏,同时也能看到不同模型,或者模型的不同参数下对解决问题的程度好坏。
进一步,有的问题可以直接基于设定的性能度量直接做最优化,得出该问题的一般求解模型。
比如回归任务最常用的性能度量就是均方误差,目标就是让均方误差最小,这就直接转化成了一个最优化问题。
其他一些常用的有错误率与精度、查准查全率、ROC与AOC等。
当然更为重要的是,仅仅设定好性能度量是不够的,不同模型或者不同参数下得到的性能度量结果一般是不同的,一般来说不能简单的比较结果,而应该基于统计假设检验来做效果判定。也就是说通过比较检验的方法,我们就可以判断,如果观察到A比B好,在统计意义上A的泛化性能是否优于B,以及这个判断的把握有多大。
3、数据预处理
之所以要做数据预处理,是因为提供的数据集往往很少是可以直接拿来用的。
可能的情况有:
样本某些属性值缺失
有未标记样本
样本的属性太多
样本量不足
没有分出测试集和验证集
不同类的样本数相差比较大
不同类的样本数相差比较大
这就是所谓类别不平衡问题。举个例子,样本里有998个反例,2个正例,如果一个模型对任何的新样本都预测为反例,那么它的精度为99.8%,虽然很高,但没有任何价值。
这种情况使用的基本策略是再缩放,具体方法则是采样。通过不同的采样方法来使类别达到平衡。
没有分出测试集和验证集
再说第五种情况,为了方便训练和验证模型好坏,数据集一般会以9:1或者其他合适比例(比例选择主要基于实际问题)分为测试集和验证集。如果给定的数据集只是已经标记好的样本,那么划分时必须保证数据集和测试集的分布大致均匀,这就涉及到具体的划分算法了。
样本量不足
第四种情况一般图像问题比较常遇到,如果样本量不足,不够模型来学习,效果自然很差。常见的方法一般有两种:
基于原数据集做扩充。比如对于图片,可以做各种处理,比如旋转、crop、对比度、亮度等基于像素值的调整,使得一个样本能够生成多个样本,从而达到扩充数据集的目的。
通过人工标注生成样本。比如大名鼎鼎的ImageNet数据集就是通过全球众包完成的,当然这个不仅耗时长,人工成本也很高,需谨慎考虑。
样本的属性太多
对于第三种情况,如果样本属性太多,为了保证模型的泛化性能足够强,则理论上必须保证数据集包括有所有属性的所有值,而这随着属性数目以及属性值是呈指数上升,很有可能达到天文数字,不仅难以计算,在现实情况也不可能收集到这么多的样本。
从数学角度看,每个样本的属性可以看成向量,属性数目是向量的维数,解决第三种情况一般有两种方法:
特征选择比较好理解,就是选择有用相关的属性,或者用另外一种表达方式:选择样本中有用、跟问题相关的特征。事实上这也很正常,并不一定样本的所有属性对具体问题都是有用的,通过一定的方法选择合适的特征可以保证模型更优。常用的方法大致分三类:过滤式、包裹式和嵌入式。
所谓的降维,即是多属性意味着是高维空间,在很多时候可以等价的映射到低维而不丢失主要信息。从空间映射的角度看,我们可以通过主成分分析PCA(线性映射)和核化主成分分析(非线性映射)来达到降维的目的。(补充:PCA是无监督降维方法,线性判别分析LDA则是监督降维防范)
有未标记样本
现实情况下往往很多数据集都有大量的未标记样本,有标记的样本反而比较少。如果直接弃用,很大程度上会导致模型精度低。这种情况解决的思路往往是结合有标记的样本,通过估计的方法把未标记样本变为伪的有标记样本。基本的方法有主动学习和半监督学习两种方法。
样本某些属性值缺失
样本的属性值缺失是很常见的一种情况。比如做书籍、视频、音乐等的个性化推荐时,需要用户对不同种类的偏好或评价。而用户不一定听过所有种类的歌,也不一定做出了评价。这就需要通过他已产生的样本数据和与之相类似的用户的数据来恢复和补全。
从原理上讲,这和压缩感知根据部分信息恢复全部信息是有类似的。
常用的方法涉及到协同过滤、矩阵补全等技术和方法。
总的来说,数据预处理是一个非常重要的过程,实际上数据预处理往往会和模型选择结合在一起。
4、选定模型
在数据集完美的情况下,接下来就是根据具体问题选定恰当的模型了。
一种方式是根据有没有标记样本考虑。
如果是有标记样本,可以考虑有监督学习,反之则是无监督学习,兼而有之就看半监督学习是否派的上用场。
无监督学习方法主要提到的是聚类。随机选定几个样本,通过一定的算法不停迭代直至收敛或者达到停止条件,然后便将所有样本分成了几类。
对有监督学习而言,根据最终所需要的输出结果
如果涉及到分类,可以参考的模型有线性回归及其非线性扩展、决策树、神经网络、支持向量机SVM、规则学习等
如果是回归问题,可以认为是分类的连续形式,方法便是以上模型的变种或扩展
如果涉及到概率,可以参考的有神经网络、贝叶斯、最大似然、EM、概率图、隐马尔科夫模型、强化学习等
5、训练及优化
选定了模型,如何训练和优化也是一个重要问题。
如果要评估训练集和验证集的划分效果,常用的有留出法、交叉验证法、自助法、模型调参等
如果模型计算时间太长,可以考虑剪枝
如果是过拟合,则可通过引入正则化项来抑制(补偿原理)
如果单个模型效果不佳,可以集成多个学习器通过一定策略结合,取长补短(集成学习)
模型训练好之后,自然就是应用,针对未知样本做预测、推荐等。
最后再简单谈一下神经网络。本书中神经网络仅仅是作为一个章节叙述,包括经典的BP算法。
但技术书籍的推出总是落后于当前技术发展的。《机器学习》上市的时间,已经是深度学习大行其道了。
多层的神经网络伴随的往往是大量参数的计算和对大数据的渴求。随着互联网的发展,人们产生的数据呈爆炸式增长,这使得大数据集越来越多,同时以NVIDIA为代表推出的基于GPU的机器的计算能力大幅提高,这使得应用多层神经网络解决实际问题成为可能。尤其是在ImageNet竞赛中基于卷积神经网络的模型以大幅优势夺冠后,无论是学术界还是工业界,都投入大量人力财力研究和应用。以前认为人工智能不可能击败围棋的论点也在今年AlphaGO战胜李世石不攻自破,AlphaGO赖以成功的基础就是几千万名家的对战棋谱(数据集)和多层神经网络(模型),当然还包括了强化学习和评估网络等辅助下棋策略。
一个非常有趣的事实是,神经网络在经历了几次寒冬后,科学家们为了保证科研成果能够更大概率的发表,启用了新名词深度学习。(因为神经网络使用的trick太多,以neural network为关键词的paper拒稿率很高)所以从本质上讲,深度学习可以简单的认为是很深层的神经网络。
文/yangzhiqi(简书作者)原文链接:。著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
转载请注明: &
or分享 (0)给机器学习初学者的建议 - 互联网 - ITeye资讯
相关知识库:
本文译自康奈尔大学信息科学系助理教授David Mimno写的《Advice for students of machine learning》,Mimno先生总结了一些对于机器学习学生/初学者的建议,强调理论与实践相结合,要有耐心和毅力,并提出了深入研究一篇论文的方法。希望对读者有所帮助。
原文地址:
Mimno先生主页:
下面是译文正文:
题名:给机器学习初学者的建议
作者:David Mimno
译者:
最近我的一个学生问我学习机器学习的建议,于是我写下了这篇文章,此文偏向于我个人的经验,但我还是要概括一下。
我现在最乐意推荐的入门书籍是Kevin Murphy的书《机器学习》()
你可能也想读
Chris Bishop的《模式识别和机器学习》(译者注:,经典书籍,豆瓣评分9.6)
Daphne Koller的《概率图模型》()
以及David Mackay的《信息理论:推理与学习算法》()
任何你学习的关于线性代数和概率论/统计学的知识都会有所帮助。
Strang的《线性代数概论》()
Gelman,Carlin,Stern和Rubin的《贝叶斯数据分析》()
Gelman和Hill的《用回归和多级/分层模型进行数据分析》()
等,这些都是我喜欢的书籍。
不要想着一开始就获得某个知识的所有方面,尽量从多个不同的资源去阅读对同一个知识的描述。
没有什么比你自己亲自尝试更重要。选择一个模型,然后实现它,将它与其它开源实现进行比较,想一想,是不是有什么使程序工作的计算或者数学上的技巧呢?
读一些论文。我在读研究生的时候,早上和晚上都有20分钟在公交车上,我包里总是带着一篇有趣的论文,公交不是重点–真正起作用的是我每天能花大约半小时在阅读(这些论文)上。
选择一篇你喜欢的论文,然后花一个星期深入研究它,无时无刻不想着它,回忆每个公式的形式,花点时间散步并琢磨每个变量是如何影响结果的,不同的变量是怎样相互影响的。想一想公式6是如何得到公式7的--作者常常省略中间步骤和代数细节,你可以将步骤补充完整。
要有耐心和坚持。记住冯·诺伊曼所说的,“in mathematics you don’t understand things, you just get used to them.”。
本文来自:

我要回帖

 

随机推荐