136

机器学习应该准备哪些数学预备知识? - 知乎

 6 years ago
source link: https://www.zhihu.com/question/36324957/answer/254938339?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

机器学习应该准备哪些数学预备知识?

数据分析师,工作中经常使用机器学习模型,但是以调库为主。 自己一直也在研究算法,也裸写过一些经典的算法。 最近在看PRML这类书籍,感觉有点吃劲,主要…
8,102
690,214
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏
海德堡大学 交叉学科计算中心离散与组合优化实验室研究员

利益相关:楼主 以本科应用数学和硕士运筹学、优化理论的背景转到德国海德堡大学读博,主要从事机器学习、计算机视觉的研究,希望自己的一些经验可以对想入门机器学习的朋友们有点借鉴作用。

首先对人工智能、机器学习一个综述:

大话“人工智能、数据科学、机器学习”--综述 - 知乎专栏

笼统地说,原理和基础都在数学这边,当然有很多偏应用和软件使用的技术,例如“深度学习调参”等,这些报个培训速成班就能学会的技术含量不那么高的东西,不在讨论范围内。

这里要讨论的,是如何系统的学习,然后自己能编出这机器学习或深度学习的程序或软件--我想,这才能称为一个合格的机器学习、数据科学家。

1, 微积分(求导,极限,极值)和线性代数(矩阵表示、矩阵运算、特征根、特征向量)是基础中的基础,某篇图像分割1w+引用的神文核心思想便就求解构造矩阵的特征向量;

2, 数据处理当然需要编程了,因此C/C++/Python任选一门(推荐Python,因为目前很多库和Library都是用python封装),数据结构可以学学,让你编程更顺手更高效,但是编程不是数据处理的核心。

当然了,楼主所在的图像处理界,熟练使用matlab或者Python调用opencv库是必要条件,但是again他们只是工具,业余时间自学,多练练就没问题。有同学问用R行不行,补充一点,用什么编程语言很大部分取决于你的核心算法会调用什么已有的库函数,比如楼主的科研里面核心算法往往是MIP(混合整数规划)问题需要调用Cplex或Gurobi库函数,因此C/C++/Python/Java这些和Cplex接口良好的语言都可以拿来用,这时候R就别想了。(更新:最新Gurobi版本支持R)

另外虽然图像处理界一些open-source的code都用C++写的,但是鉴于使用方便都会提供Python的接口,因此需要用到这些code的话,用Python调用比较方便;但是,如果是高阶骨灰级玩家,需要修改甚至自己写源代码,那么还是推荐C/C++,因为他们的速度最快。

通常高校都会有算法类的课程,会概述各类算法的基础和应用,其中包括:精确算法、近似算法、启发式算法、演化算法、递归算法、贪婪算法等待,还有各类优化算法。

算法非常核心,想必大家都听说过算法工程师这个职位。

关于数学模型和算法的区别、联系,参见:

【学界】整数规划精确算法/近似算法/(元)启发算法/神经网络方反向传播等算法的区别与关联

1,概率论+统计(很多数据分析建模基于统计模型)、统计推断、随机过程等

2,线性规划+凸优化(或者只学一门叫numerical optimization,统计、机器学习到最后就是求解一个优化问题)、非线性规划

3,数值计算、数值线代等

当年我是在数学系学的这门课,主要是偏微分方程的数值解。

但我觉得其开篇讲的数值计算的一些numerical issue更为重要,会颠覆一个数学系出身小朋友的三观。(原来理论和现实差距可以这么大!)

Conditional number, ill-conditioned problem,会让你以后的编程多留个心眼。

恭喜你,到这里,你就可以无压力地学习Machine Learning这门课了(其实机器学习,通篇都是在讲用一些统计和优化来做clustering 和 classification这俩个人工智能最常见的应用)。并且你就会发现,ML课中间会穿插着很多其他课的内容。恩,知识总是相通的嘛,特别是这些跨专业的新兴学科,都是在以往学科的基础上由社会需求发展而来。

到这里,其实你已经能看懂并且自己可以编写机器学习里面很多经典案例的算法了,比如regression,clustering,outlier detection。

关于优化类课程的综述,欢迎关注我的专栏:

[运筹帷幄]大数据和人工智能时代下的运筹学 - 知乎专栏

运筹学(最优化理论)如何入门? - 知乎

学到Mid-level,就已经具备绝大部分理论基础了。然后做几个实际项目,就能上手然后就可以“吹嘘”自己是搞机器学习的,就能找到一份工作了。

但是要读Phd搞机器学习的科研,那么高阶课程必不可少,而且同一个topic你需要上好几门课,并且你博士的课题,很可能只是一本书中一个章节里面一小节里讲的算法,去改进他。

比如,楼主的博士课题就是mixed linear programming + discrete graphical models + markov random fields + regression + clustering + segmentation

再高阶的课程,就是比较specific的课程了,可以看你做的项目或者以后的concentration再选择选修,比如:Probabilistic Graphical Models(概率图模型), Integer Programming(整数规划) ,计算机视觉,模式识别,视频追踪,医学图像处理,增强学习,深度学习, 神经网络,自然语言处理,网络信息安全,等等等等。

深度学习:目前非常火,打败了非常多几十年积累起来的经典方法。

增强学习:也很火,游戏AI、自动驾驶、机器人等等,它都是核心。

概率图模型:深度学习之前非常popular的“学习”方法,有严格的数学模型和优美的算法,虽然目前被前俩者盖过了风头,但是依然有它的立足之处。什么?你不知道最近用PGM发了篇Nature,打败了CNN?快看下面:

Robin Shen:如何评价 Vicarious 在 Science 上提出基于概率图模型(PGM)的 RCN 模型?

再比如有用偏微分方程做图像处理的(比较小众),那么这时候你肯定要去学一下偏微分方程了,大都是以科研为主导的。

科研嘛,为了发文章,就是要尝试前人没尝试过的方法,万一效果不错呢,就是一篇好paper了,对吧。

附上顶尖会议排名,共勉:

国际“顶尖”计算机视觉、机器学习会议大搜罗--附排名&接收率

互联网教学资源

书目没有特别推荐的,但是建议看英文原版。

另外直接翻墙Youtube看视频课程,很多国际知名教授都很无私地把自己上课的视频放在youtube上免费学习(搜索我上面列出的科目名字)。如果确实要楼主推荐,那就推荐海德堡大学历史上最年轻的教授 Fred的机器学习视频(我基本都看过):

https://www.youtube.com/playlist?list=PLuRaSnb3n4kSgSV35vTPDRBH81YgnF3Dd

另外一个教授给你上课的时候,开头一般是会推荐书给你的(如果你确实喜欢看书的话)。当然了,翻墙是楼主suppose你们需要拥有的基本生存技能。

(注:以下再推荐一些视频,仅受之以渔,多为graduate course)

1,Machine Learning by Prof. Nando de Freitas, 此视频是其在UBC时13年所录,后来跳槽去牛津计算机系了。

https://www.youtube.com/playlist?list=PLE6Wd9FR--EdyJ5lbFl8UuGjecvVw66F6

2,Deep learning at Oxford 2015 by Prof. Nando de Freitas, 跳槽到牛津所录。

https://www.youtube.com/playlist?list=PLE6Wd9FR--EfW8dtjAuPoTuPcqmOV53Fu

3,Probabilistic Graphical Models by Daphne Koller, 斯坦福大学计算机系教授

https://www.youtube.com/playlist?list=PL50E6E80E8525B59C


更多人工智能、优化理论的知识,尽在

关于入行后就业前景(包括第三条运筹学、算法工程师),参见:

国内(全球)TOP互联网公司、学术界超高薪的揽才计划有哪些? - 知乎

关于机器学习在咨询行业的应用,参见

Data Science/Analytics 出身,可以在咨询行业做些什么?

最后是通往大洋彼岸高薪博士职位,以及人工智能数据科学家的传送门:

欧洲、北美、全球留学及数据科学深度私人定制咨询,从此DIY - 知乎专栏

数学等 2 个话题下的优秀答主

机器之心整理

本文作者依据自身经验给出了一套快速上手的可行方法及学习资源的分类汇总,机器之心在其基础上做了增益,希望对读者有所帮助。

先决条件
机器学习的基础是数学。数学并非是一个可选可不选的理论方法,而是不可或缺的支柱。如果你是一名计算机工程师,每天使用 UML、ORM、设计模式及其他软件工程工具/技术,那么请闭眼一秒钟,忘掉一切。这并不是说这些概念不重要,绝不是!但是机器学习需要一种不同的方法。如今 Python 如此流行的原因之一是其「原型设计速度」。在机器学习中,一种使用几行代码即可建模算法的语言绝对是必要的。

微积分、线性代数、概率论在机器学习几乎所有算法中不可或缺。如果你的数学背景很扎实,请跳过这一章节。如若不然,那么重新温习一下这些重要概念也不错。考虑到理论的数量,我并不建议大家从大部头开始。尽管一开始可以用它查询具体概念,但是初学者先关注简单的话题比较好。网上有很多好的在线资源(比如 Coursera、可汗学院或优达学城),实用且适合各种背景的人群。但是我建议从提纲之类的简明书籍上手,其中所有核心概念均被涉及,次要概念可在需要的时候自行查询。这种方法虽然不够系统,但却避免了这样的缺陷:大量晦涩概念使得没有扎实理论背景的人望而却步。

初学者最好先学习下列内容:

  • 离散型和连续型随机变量
  • 主要分布(伯努利分布、二项式分布、正态分布、 指数分布、 泊松分布、Beta 和 Gamma 分布)
  • 矩估计和最大似然估计
  • 贝叶斯统计
  • 相关性系数和协方差(Correlation and Covariance)
  • 向量和矩阵
  • 矩阵的行列式
  • 特征向量和特征值
  • 矩阵分解(如 SVD)
  • 极限与导数
  • 微分和积分
  • 数值计算与最优化方法

网上有很多免费资源,比如

维基百科上也有很多好资源,对方程、定理等进行了清晰易懂的解释。

机器之心也介绍过许多数学基础与概念:

机器学习主要需要的数学基础就是微积分、线性代数、概率论,我们感觉只需要掌握大学中常见的高数、线性代数、概率论与数理统计三门课程,基本上概念的理解就没什么问题了。如果再学一点数值计算和最优化等,我们基本上就能理解机器学习的学习过程推导。

机器学习方法建议(面向初学者)

开始机器学习的第一步是理解如何评估和改进数据集的质量。管理特征的类别和缺失、归一化和降维(PCA、ICA、NMF)是大幅提高算法性能的基本技术,而且还有助于研究如何将数据集分割成训练集和测试集、如何采取交叉验证来取代传统的测试方法。

机器之心也曾详解过特征工程如 PCA 降维算法的详细理论与推导,当然我们还介绍了其它有关特征的概念:

Numpy:Python 数值计算之王!

使用 Python 时,Numpy 不仅仅是一个库。它是几乎所有机器学习实现的基础,因此了解它的工作原理、关注向量化和广播(broadcasting)是非常必要的。这些技术可以帮助加速大多数算法的学习过程,利用多线程和 SIMD、MIMD 架构的力量。

官方文档已经很完整了,不过,我还建议大家看一下以下资源:

数据可视化

Matplotlib 即使不是纯粹的机器学习话题,了解如何可视化数据集也很重要。Matplotlib 可能是最广泛使用的解决方案:Matplotlib 易用,允许绘制不同种类的图表。Bokeh 和 Seaborne 提供了有趣的替代方案。不必要彻底了解所有包,但是了解每一个包的优点和弱点还是很有用的,可以帮助你选择合适的包。

了解 Matplotlib 细节的资源:《掌握 Matplotlib》,McGreggor D. 著

线性回归是最简单的模型之一,可以把它作为一个优化问题来研究,该问题可通过最小化均方误差而得到求解。该方法虽然有效,但是限制了可利用的可能性。我建议还可以把它当作贝叶斯问题,使用之前的可能性展示参数(比如,高斯分布),优化变成了最大似然估计(Maximum Likelihood Estimation,MLE)。即使这看起来更加复杂,但该方法提供了一个可供几十个其他复杂模型共享的新方法。

Coursera 上介绍贝叶斯统计的课程:

以及这两本书:

  • 《思考贝叶斯》,Downey B. A. 著
  • 《黑客的贝叶斯方法》Davidson-Pilon C. 著

包括线性回归在内,机器之心曾介绍了一些解决回归问题的方法(后文提供了 CART 算法进行回归分析):

通常情况下,Logistic 回归是最佳起始点,也是研究信息论进而了解信息熵、交叉熵和互信息的好机会。类别交叉熵(Categorical cross-entropy)是深度学习分类中最稳定、使用最广泛的代价函数,一个简单的 logistic 回归可以展示它是如何加速学习过程的(与均方差相比)。另一个重要的话题是正则化(Ridge、Lasso 和 ElasticNet)。很多情况下,人们认为它是一种提高模型准确率的深奥方式,但是它的真实意义是更准确,在具体实例的帮助下变得易于理解。我还建议刚开始的时候,把 logistic 回归当作一个简单的神经网络,可视化(以 2D 实例为例)权重向量在学习过程中的移动轨迹。

我还建议本节应包括超参数网格搜索。网格搜索不在没有完整了解的情况下尝试不同的值,而是评估不同的超参数集的性能。因此,工程师可以将注意力集中在可达到最高准确率的组合上。当然还有更加强大的贝叶斯优化方法,即利用先验知识逼近未知目标函数的后验分布从而调节超参数的方法。

支持向量机(SVM)

支持向量机提供了不同的分类方法(包括线性和非线性方法)。该算法非常简单,具备基础几何知识的人也可以学会。不过,了解核支持向量机的工作原理非常有用,因为它会在线性方法失败的时候展示出其真正实力。

一些有用的免费资源:

决策树提供了另一种分类和回归的方法。通常,它们不是解决复杂问题的首选,但它们提供了完全不同的方法,即使是非技术人员也可以很容易理解,该方法还可以在会议或演示中可视化。

集成学习一览

在理解了决策树的动态特性以后,研究集成训练树的集(集成)来提高整体准确率的方法很有用。随机森林、梯度树提升和 AdaBoost 都是强大的算法,且复杂度较低。对比简单的树和提升方法与 bagging 方法采用的树的学习过程挺有趣的。Scikit-Learn 提供了最常见的实现方法,但是如果你想更好地驾驭这些方法,我还是建议你在 XGBoost 上多花些时间,XGBoost 是一个既适用于 CPU 又适用于 GPU 的分布式框架,即使在较大的数据集上也能加速学习过程。

当开始聚类方法的学习时,我的建议是从高斯混合算法(基于期望最大化/EM)学起。虽然 K-均值聚类要更加简单易懂(也是必须要学习的),但是高斯混合算法为我们提供了纯粹的贝叶斯方法,在其他类似任务中也十分实用。其它必学的算法还有层次聚类(Hierarchical Clustering)、谱聚类(Spectral Clustering)和 DBSCAN。这对你了解基于实例的学习或研究 K-近邻算法(既适用于有监督又适用于无监督任务)也是有帮助的。谱聚类的一个有用的免费资源是:

  • 《谱聚类教程》,Von Luxburg U 著

聚类算法是无监督学习中的代表,机器之心也曾详细地介绍过各种聚类方法与实现:

神经网络入门

神经网络是深度学习的基础,你可以在单独的课程中学习神经网络。但是,我认为理解感知机、多层感知机以及反向传播算法的概念也很有帮助。Scikit-Learn 提供了一个实现神经网络的简单方法,但是,开始探索 Keras 也是一个好主意,Keras 是一个基于 Tensorflow、Theano 或 CNTK 的高级架构,允许使用最少的努力对神经网络进行建模和训练。开始神经网络学习的一些好资源:

  • 《人工神经网络基础》Hassoun M 著
  • 《Keras 深度学习》Gulli A.、 Pal S. 著

目前最好的深度学习书籍可能就是:

最后,我们将介绍部分机器之心曾发过的综述性技术文章或论文,并希望这些文章能对大家全面理解各种方法有所帮助:

深度学习,机器学习,人工智能

最近在给几位程序员朋友培训机器(深度)学习,而且10月份刚把数学基础部分培训完,看到这个问题,结合培训的感受,趁热写一点小小的心得体会。

看了一下题主的问题,的确,现在很多想从事于机器学习的朋友都存在类似的困惑,主要是很多相关的书看不懂,尤其是数学部分,包括题主提到的PRML,还有最近的深度学习圣经。不得不说,这些书籍其实都很经典,但经典的书未必都适合每个人,毕竟这些著作其实是有一些门槛的,所以如何把这个门槛降低,或者换一个说法,如何把其中的数学基础用通俗易懂的语言解读出来,也是很有意义的一件事。我在培训当中也是深有体会。

以下我假定读者跟题主情况类似:希望从事于机器学习,但数学多年不用,在阅读算法书籍的过程中,数学部分理解起来有难度。

同时也欢迎业内朋友提供宝贵建议和意见。

对于绝大多数从事于机器学习的人来说,学数学的目的,主要是便于(深入)理解算法的思路。那么问题来了,我们到底要把数学学到什么程度?

我这里举几个例子:

1.线性最小二乘法

大家可以随意搜索一下,相关的文章很多。长篇大论的不少,刚入门的朋友一看到那些公式可能就看不下去了。比如下面的解释:

毫无疑问,这样的解释是专业的,严谨的。事实上,这是深度学习圣经里的解释。我并没有诋毁大师的意思,只是觉得用一个具体的例子来说明,可能会让读者更加容易理解:

小明是跑运输的,跑1公里需要6块,跑2公里需要5块(那段时间刚好油价跌了),跑3公里需要7块,跑4公里需要10块,请问跑5公里需要多少块?

如果我们有初中数学基础,应该会自然而然地想到用线性方程组来做,对吧。

这里假定x是公里数,y是运输成本(β1和β2是要求的系数)。我们把上面的一组数据代入得到这么几个方程:

如果存在这样的β1和β2,让所有的数据(x,y)=(1,6),(2,5),(3,7),(4,10)都能满足的话,那么解答就很简单了,β1+5β2就是5公里的成本,对吧。

但遗憾的是,这样的β1和β2是不存在的,上面的方程组很容易,你可以把前面两个解出来得到一组β1和β2,后面两个也解出来同样得到一组β1和β2。这两组β1和β2是不一样的。

形象地说,就是你找不到一条直线,穿过所有的点,因为他们不在一条直线上。如下图:

可是现实生活中,我们就希望能找到一条直线,虽然不能满足所有条件,但能近似地表示这个趋势,或者说,能近似地知道5公里的运输成本,这也是有意义的。

现实生活当中,有很多这样的例子,想起以前在某公司上班的时候,CEO说我们研发部做事有个问题:一个研发任务,要求三个月做完,因为周期太短,完成不了,就干脆不做,这显然是不对的,要尽全力,哪怕三个月完成了80%,或者最终4个月完成,总比不作为的好。

其实最小二乘法也是这样,要尽全力让这条直线最接近这些点,那么问题来了,怎么才叫做最接近呢?直觉告诉我们,这条直线在所有数据点中间穿过,让这些点到这条直线的误差之和越小越好。这里我们用方差来算更客观。也就是说,把每个点到直线的误差平方加起来:

(如果上面的四个方程都能满足,那么S的值显然为0,这是最完美的,但如果做不到完美,我们就让这个S越小越好)

接下来的问题就是,如何让这个S变得最小。这里有一个概念,就是求偏导数。这里我想提一下,在培训的过程中,我发现机器学习的数学基础课程当中,微积分是大家印象最深刻的,而且也最容易理解:比如导数就是求变化率,而偏导数则是当变量超过一个的时候,对其中一个变量求变化率。如果这个概念也忘了,可以参考我在深度学习回答里那个王小二卖猪的例子。这里就不细讲了:

Jacky Yang:深度学习如何入门?

要让S取得最小值(或最大值,但显然这个函数没有最大值,自己琢磨一下),那么S对于β1和β2分别求偏导结果为0,用一个直观的图来表示:

我们看到这条曲线,前半部分是呈下降的趋势,也就是变化率(导数)为负的,后半部分呈上升的趋势,也就是变化率(导数)为正,那么分界点的导数为0,也就是取得最小值的地方。这是一个变量的情况,对于多个变量的情况,要让S取得最小值,那最好是对β1和β2分别求导(对β1求导的时候,把β2当常量所以叫求偏导),值为0:

看到这个我们就熟悉了,两个变量,刚好有两个方程式,初中学过,那么很容易得出:

其实也就意味着

这个函数也就是我们要的直线,这条直线虽然不能把那些点串起来,但它能最大程度上接近这些点。也就是说5公里的时候,成本为3.5+1.4x5=10.5块,虽然不完美,但是很接近实际情况。

在培训的过程中,一直在思考一个问题,也就是上面提到的那个,机器学习到底要把数学掌握到什么程度?首先我们得搞清楚我们到底要拿机器学习干什么,机器学习本来就是要通过分析现实生活中的数据得出其中的规律,以便为将来各方面提供指导意义。既然是这样,为何不直接从现实中来到现实中去,直接用数据和案例来讲解数学呢。我们显然不是为了学数学才学的机器学习,那就没必要堆砌哪些晦涩的公式了。除非我们要做纯理论研究。

当然,数学的一些理念,思想或者精髓是需要掌握的,其实很多时候,我们都是在做不到完美的情况下,求那个最接近完美的解,别忘了机器学习很多情况下其实是在做拟合,所以说最小二乘法对于机器学习非常重要,这也是我把它当做第一个例子的原因。其实深度学习里的反向传播不也是一样么?刚开始不完美,但我要想办法让它越来越接近完美,预测值与实际值差距越来越小。所谓训练,其实也就是不断追求完美的一个过程。

2.拉格朗日乘子法

听到拉格朗日乘子法这个名字的时候,很多人的第一反应是:这玩意儿是不是很高深啊,先入为主地有了畏难的情绪。但我把它讲完以后,大部分人表示并不难,而且现实生活中,我们经常潜移默化会用到拉格朗日乘子法。甚至可以说,不用拉格朗日乘子法的人生都是不完整的人生。

我们来看一下定义:

虽然这个定义应该说是很简洁明了的,但对于大部分人来说,依然还是有点懵。不太清楚为什么要这么做。拉格朗日到底要搞什么飞机?

我们还是举个例子:某工厂在生产过程中用到两类原材料,其中一种单价为2万/公斤,另一种为3万/公斤,而工厂每个月预算刚好是6万。就像下面的公式:

经过分析,工厂的产量f跟两种原材料(x1,x2)具有如下关系(我们暂且不管它是如何来的,而且假定产品可以按任意比例生产):

请问该工厂每个月最少能生产多少?

其实现实生活中我们会经常遇到类似的问题:在某个或某几个限制条件存在的情况下,求另一个函数的极值(极大或极小值)。就好比你要在北京买房,肯定不是想买什么房子就买什么房子,想买多大就买多大,而是跟你手头的金额,是否有北京户口,纳税有没有满五年,家庭开支/负担重不重,工作单位稳不稳定都有关系。

回到工厂的例子,其实就是求函数f的极值。上面我们提到,极值点可以通过求偏导(变化率为0的地方为极值点)来实现,函数f(x1,x2)对x1,x2分别求偏导,那么得出的结论是:x1,x2都为0的时候最小,单独看这个函数,这个结论对的,很显然这个函数的最小值是0(任何数的平方都是大于或等于0),而且只有x1和x2同时为0的时候,取得最小值。但问题是它不满足上面的限制条件。

怎么办呢?拉格朗日想到了一个很妙的办法,既然h(x1,x2)为0,那函数f(x1,x2)是否可以加上这个h(x1,x2)再乘以一个系数呢?任何数乘以0当然是0,f(x1,x2)加上0当然保持不变。所以其实就可以等同于求下面这个函数的极值:

我们对x1,x2以及λ分别求偏导(极值点就是偏导数均为0的点):

解上面的方程组得到x1=1.071,x2=1.286 然后代入f(x1,x2)即可。

这里为什么要多加一个乘子λ呢,试想一下,如果λ是个固定的数(比如-1),我们也能通过上面的方程式1,2求解得到x1,x2,但是我们就得不到方程式3,其实也就是没有约束条件了。所以看到没有,拉格朗日很聪明,他希望我们在求偏导(极值点)以后,还能保留原有的约束条件。我们上面提到,单独对函数求极值不能保证满足约束条件,拉格朗日这么一搞,就能把约束条件带进来,跟求其他变量的偏导结果放在一起,既能满足约束条件,又能保证是约束条件下的极值。借用金星的一句话:完美!

当然这是一个约束条件的情况,如果有多个约束条件呢?那就要用多个不同的λ(想想为什么),正如最上面的那个定义那样,把这些加起来(这些0加起来也是0)。

机器学习里的数学,我感觉只需要掌握里面这个核心思想即可,就像拉格朗日乘子法,求条件极值---》转化为求(函数+条件)的极值,每一步都很妙。其实我想说的是,体会这种妙处以后,再看SVM的算法,会感觉舒服很多,数学主要是为了让人更好地理解算法,并不是为了数学而学数学。人生苦短,还成天被晦涩的书籍所困扰,“感觉身体好像被掏空”,这样真的好么?

3.朴素贝叶斯

之所以把这个拎出来,是因为我一直想吐槽一下那个公式:

我想吐槽,是因为几乎没有一篇文章解释这个公式是怎么来的。很多文章一上来就是这个

公式。对于已经对条件概率没多少概念的朋友来说,脑子里其实一直有疑问。其实要解释并不难,把P(B)放到左边,除法改成乘法就容易理解多了。

P(A|B) x P(B) = P(B|A) x P(A)

也就是:B发生的概率 x B已经发生的情况下A发生的概率 = A发生的概率 x A已经发生的情况下B发生的概率。

如果这个不好理解,我们还是举个例子:

如上图所示,口袋里有5个球(2个蓝色,3个红色),每次取一个,可能的结果如下图所示:

第一次取出来是蓝色球的概率是2/5,我们把这个概率叫P(A),然后在A发生的情况下,再取出一个红球的概率是多少?显然是3/4,因为只剩下3个红球一个蓝球,这个3/4就是P(B|A),也就是在A发生的情况下,B发生的概率,这叫条件概率。我们把他们相乘得到:

(2/5) x (3/4)=3/10

接着我们换另一个方式算:如果第一次取到红球,第二次取到蓝球。同理,P(B)为3/5,P(A|B)为2/4,两个相乘:(3/5) x (2/4)=3/10

他们是相等的。也就是说:P(A|B) x P(B) = P(B|A) x P(A)

这个并不是特例,看下面的公式:

事实上,P(A and B) 和P(B and A)是一样的,只是一前一后发生的顺序不同。

我们把这个公式P(A|B) x P(B) = P(B|A) x P(A)的P(B)拿到另一边,这就是朴素贝叶斯的公式。

除了上面几个例子,其实还有很多方面,都可以用不那么晦涩的方式去解读。比如高斯分布,很多文章,包括一些经典书籍,一上来就是那个公式:

然而很多人并不太明白,为何要用这样的分布,为什么叫正态分布,而不叫变态分布。其实它是大自然的一种普遍规律。

其实可以用这个图:

这是统计学生两门学习成绩总和(总分200分),横轴是分数,纵轴是所占的比例。我们发现,学霸和学渣都比较少,大部分人都集中在150分左右(很显然,大部分人都是你我这种普通人嘛),如果统计样本足够大,以至于达到无穷,那就变成了钟形曲线。普通人的平均分数,就是高斯分布里的那个μ,也就是均值,而那个σ怎么解释呢?就是你这个曲线越陡,σ越小,这个叫方差。试想一下,如果大家都挤成一坨,成绩都差不多,差别小,也就是方差小,中间的方块占的比例就越高,当然就越陡了。如下图:

另外,还有一些概念,比如正交,很多朋友问起过这个问题:Jacky,向量正交的概念我在大学里学过,但就是不知道为啥要正交?

其实我们要理解正交,可以先理解什么是相交,两条直线相交表明存在一定的夹角,但这个夹角可大可小,如果是0的情况下,他们是在一条线上的(向量都是过原点的,这里我们不考虑不过原点的情况),180度的时候也是在一条直线上,这个两种情况我们都可以认为他们是线性相关的,那么什么时候,最不相关呢,很显然是90度的时候,也就是垂直的时候。除了垂直和平行的情况,夹角在0-90度或者90度到180度之间的情况,相关性介于垂直和平行之间。

我们试想一下,如果我们要把一组数据分解成不同的特征,我们希望每个分量各自具有独立的特点呢?还是希望每个分量,你中有我,我中有你好呢?显然是越无关越好,如果他们之间太“暧昧”,就没有特点了。最好是各个分量,两两互相垂直。当然,垂直是几何上的解释,对于向量来说,更严谨的说法(多维)就是正交。

关于机器学习中数学的通俗化表达,限于篇幅(太长看了也累),先聊到这里,目前还在继续整理当中,想到哪说到哪,思路还不够清晰,希望在本次培训结束以后,能整理出一个完整的版本。同时也请业内朋友多提宝贵意见和建议。

如果在阅读PRML和deep learning的过程中,对有些数学部分不太清楚,也请在评论区留言或者私信给我也可以。请列出具体的内容或对应的书的页数。最近在写一本小册子,也很希望收到朋友们的需求,痛点及反馈。谢谢。

关于数学基础课程列表,几个高票答案总结的很全了,这里我就不重复贴了。不过有人总结了一份文档,里面列出了机器学习中用到的数学基础,虽然没有详细描述,但思路清晰,简洁明了,可以参考:

http://www.cogsci.ucsd.edu/~ajyu/Teaching/Cogs118A_wi10/Refs/basic_math.pdf


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK