首发于数据说
带你读机器学习经典(一): An Intro to Statistical Learning

带你读机器学习经典(一): An Intro to Statistical Learning

0. 前言 - 我为什么要写这一系列文章?

自从上个月回答了【如何看待「机器学习不需要数学,很多算法封装好了,调个包就行」这种说法?】以后,我收到了很多朋友的评论和私信,希望我能谈谈新手如何快速入门机器学习。

为了给大家一个比较客观公正的建议,我特地去买了几本广受好评的机器学习入门书籍:

  1. An Introduction to Statistical Learning with Applications in R - Gareth J. et al.
  2. Python Machine Learning - Sebastian Raschka
  3. Programming Collective Intelligence (集体编程智慧) - Toby Segaran
  4. 机器学习 - 周志华
  5. 统计学习方法 - 李航

最近我阅读了上面的书籍,想和大家分享一下我的主观评价。在每本书的总评后,我会对每一本书分章节进行一个梳理,并提供一些自己的感悟,希望能对大家的入门带来一些帮助。

这一系列的文章形式为阅读笔记,需要结合教材一起阅读。我对知识点的顺序进行了一些调整,将相关的内容合并到了一起。有疑问的小伙伴可以评论或者私信我

作为系列文章的第一篇,我会先带着大家梳理 ISL的第1,2章。

1. 综合评价 - ISL

相信正在机器学习苦海中遨游的朋友们肯定都听过大名鼎鼎的The Element of Statistical Learning, 这本频率学派的统计学习“圣经”被大家叫做ESL。据说百分之九十五的人读完前三章就放弃了,因为书中大量的数学公式和矩阵推导。我手头的09年的第二版有厚厚的700多页,像一块砖头。虽然这本书叫做统计学习而不是机器学习,但大量的模型和理念在两个领域是想通的。因此在文中我也会大量使用统计学习的思路和约定俗成,而不是纯粹的机器学习

ISL正是基于满足更广大阅读人群的目的而推出的。ISL是ESL的入门版,不仅大量的去除了繁复的数学推导,还加入了R编程的部分,方便大家可以尽快上手。在序言中,ISL作者也分享了他对于统计学习的看法:作者认为大家可以循序渐进,不必追求一口吃成个胖子,也没有必要在入门时就追求完全掌握ESL这种进阶书籍。

ISL的优点

  1. 在去掉了大量的数学推导的部分,仅保留了统计学习的核心观点。完整阅读该书可以保证读者对统计学习的思路有一个基本的了解。
  2. 每章都辅以配套的R练习题,读者可以在掌握理论后迅速在数据上进行实践。
  3. ISL的电子版是免费的:点击下载,纸质版不知道国内引进了没有。
  4. 书的结构安排合理,使读者有循序渐进之感。全书共十章,算上练习题后也不过400页--初学者不会望而生畏。700页的ELS和1000页+的MLAPP感到非常惭愧:)


ISL的缺点

1. 缺失了一些重要的机器学习章节。但考虑到这本书叫做统计学习导论,勉强可以理解。

  • 比如神经网络及衍生的深度学习等。
  • 对于非监督学习,只有一章。
  • 对于一些基础的理论没有涉及,如VC维等。

2. 代码和实验都是基于R,工业界比较常用的还是Python。但考虑到R和Python都很简单,且大部分时候都有现成的Library,瑕不掩瑜:)

3. 为了避开过多的数学部分,导致部分重要理论显得不能自洽。我理解作者是为了照顾读者的阅读感,但对于数学部分的保留显得该书引入公式非常突兀。个人感觉可以至少加上从何处引入该公式,让有能力的读者可以在课后继续阅读。

4. 统计学习更强调一个结果是否显著,而机器学习更在意结果是否有效,统计学习的严谨性可能会使某些读者觉得有吹毛求疵之感。

综合评价下来该书是一本不可多得的好书,建议大家都入手一本。如果囊中羞涩,也可用电子版,内容完全一样:)

2. 书籍导读 - Chapter 1 - Introduction

ISL的第一章更像是前言,并未涵盖太多的内容。第1-5页主要介绍本书中所使用的数据集(工资,股票,基因三个数据集),同时捎带着提及了一些基础概念,如监督学习和非监督学习。

第5-6页讲了统计学习的历史,还顺带提及了一句自从机器学习火了以后,统计学习才成了统计学的一个重要分支。其实从侧面页描述了一个统计学习和机器学习的不同点,那就是机器学习的侧重点还有强化学习等,但统计学习的重点主要就是传统的监督和非监督学习。

第一章的6-9页作者谈及了写ISL的初衷,也就是为了将统计学习带到更广大的受众群中。作者提到了写作该书时的四个基本原则,也是很有趣的观点:

  • 很多统计学习算法可以应用到跨领域学科中,这些算法大有可为。
  • 统计学习算法不该被当做“黑箱”模型,在使用时也要多加评估。任何算法都有擅长和不擅长的领域,切勿以偏概全。
  • 虽然我们应该理解模型的本质,但我们不该要求每个人都像数学家一样的对模型有深度了解
  • 在理解了模型的意义后,我们期待读者可将其应用到不同领域。

9-13页包括了本书的数学符号规范,目标读者群,以及所使用的数据集。

3. 书籍导读 - Chapter 2 - Statistical Learning

这一章开始介绍了很多统计学习的基本概念,比如predictor和response,这些概念相对应机器学习中的attributes和label。同时作者在这一章介绍了很多贯穿全书的重要思想。

2.1. What is Statistical Learning? 15-20页 & 2.2. Assesing Model Accuracy - 29-42页

2.1.1. 首先作者给出了一个基本公式Y = f(X) +\epsilon \qquad (2.1)来表示一种变量间的映射关系。在此作者点明了统计学习的本质就是估计(estimate)一个映射函数\hat{f}(X),从而将X映射到Y。此处我们可以暂时肤浅的理解为X就是你要学习的特征,而Y是相对应的预测。

举例,你想通过一个人的年龄,性别,学历来预测Ta的收入,那么此处的X就是年龄,性别,和学历信息,而Y就是相对应的收入。通过很多个例(很多人的信息与他们的收入),也叫做训练数据。我们希望从训练数据中学到一个映射函数\hat{f}(X)使我们得到精确的(年龄,性别,和学历)与收入Y之间的关系,从而达到预测的目的。

但很不幸,此公式中的\epsilon (噪音)是一个独立于X且均值为0的随机误差,这个随机误差植根于数据本身(intrinsic noise),无法由优化映射函数可以克服。这也解释了为什么通过学习我们只能估计映射函数\hat{f}(X),而不能说得到了准确的f(X),因为我们无法规避噪音对学习模型的影响。如果一个人告诉你他训练出了百分之百准确的模型,这人大概是民科跑不了!

统计学中的约定俗成,如果一个值或者一个函数是估计值,我们要加上“\hat{}”来区别对待。这也是为什么上文中大部分的函数上方均有"小帽子"。

如何评估和选择统计学习模型是个很大的话题...涉及了很多领域。我们最常说的一句话是--这取决于你用了什么模型处理了什么数据。比较常见的评估标准有模型准确率(Accuracy), 召回率(Recall),精度(Precision),ROC曲线等。在不同的情况下,评估标准各不相同。再继续深入之前,想先介绍两个有趣的定理:

  • 没有免费午餐定理(No free lunch theory):从周志华老师的书中引述他引述Wolpert的一段话。“no free lunch直译为“没有免费的午餐”,意思是没有付出,就没有收获。Wolpert and Macready在1997年提出了No Free Lunch Theorems(没有免费的午餐理论),该理论用于比较两种优化算法之间的关系,即如何确定一种算法比另外一种算法好”。 --《机器学习》。这句话用人类能听懂的语言说就是...没有任何一种算法模型可以在所有可能数据集上表现最优在选择模型时,要根据问题定义和数据特定选择最适合的算法,在很多情况下深度学习并不比线性回归更好用。因此不要迷信算法,要先了解问题和数据,再开始准备模型。
  • 奥卡姆剃刀定理(Occam's razor):颇有哲学意味的定义为“如无必要,勿增实体”。用通俗的语言来说,如果两个模型A和B对数据的解释能力完全相同,那么选择较为简单的那个模型。奥卡姆剃刀定理对于机器学习的意义在于它解释了机器学习中常常遇到一个现象:过拟合(over-fitting),同时给出了一种模型选择的方向。就像上文提到的,如果简单的线性回归和复杂的深度学习在某个问题上的表现相似,那么我们应该选择较为简单的线性回归。但读者应该注意,奥卡姆剃刀定理只是一种对于模型选择的指导方向,不同的选择方向如第八章会说到的集成学习(Ensemble Learning)就给出了近似相反的选择标准。现实世界是非常复杂的,切勿滥用。

在第二章中,ISL主要介绍了一种常用语回归问题评估模型表现的方法(29-33页),即计算均方误差(Mean Sqaured Errors),也叫做MSE。这个评估方法非常的简单粗暴,假设我们有相对应的一组数据[X_0^2,Y_0],其中X_0^1是人的年龄=30岁,X_0^2入职时间=3年,Y_0代表她的实际月收入为4500。此时你有一个经过训练的映射函数\hat{f}(X_0) = 100X_0^1+20X_0^2+1500,带入[X_0^2,Y_0]后会发现\hat{f}(X_0) = 4560,比真实值Y_0(也就是4500)大了60。由此补充MSE的定义:\begin{split} MSE &= Ave(Y_0-\hat{f}(X_0))^2\\ &= \frac{1}{N}\sum_{i=1}^{N}{(Y_i-\hat{f}(X_i))^2} \end{split}

我们将上面的例子中的\hat{f}(X_0) = 4560Y_0=4500带入MSE得到MSE = \frac{1}{1}(60)^2 = 3600。如果我们还有其他的数据,如另一个人的年龄、入职时间,及收入,假设我们算出对于这个人来说她的误差值为20,那么综合两人的数据我们对于映射函数\hat{f}(X)的评估值就会MSE = \frac{1}{2}(60+20)^2 = 3200在有大量数据的情况下MSE会趋近于映射函数的真实表现

量化评估的意义在于你可以直观的对比两个映射函数在训练数据集上表现,也叫做拟合程度,这是我们选择模型的重要依据。当然,量化评估的方法不仅仅有MSE一种。在后面的章节中我们还会学习为什么不能在仅仅用训练数据来评估一个模型的优劣。

在第二章的结尾(37-42页),作者介绍了两种常见的学习模型:贝叶斯分类器(Bayes Classifier)和K-近邻分类器(K-Nearest Neighbors)。作为家喻户晓的两种分类器,我就不浪费篇幅再赘述。但此处值得一提的是,ISL提到了一个重要的观点,在大数据量的前提下KNN的表现与最优的贝叶斯分类器相近。等到有机会的时候我会分析一下“对于数据的假设条件”在机器学习中的意义,到时候会分fe为什么它们会有相似的表现。


2.2.2 The Bias-Variance Trade-off - 33-36页

从18-20页,作者通过公式(2.3)说明了机器学习中面临的根本问题:Variance and Bias Tradeoff,即泛化误差(Generalization Error)由Bias (偏差)和Variance(方差)共同决定,鱼和熊掌不可得兼。注意,这种“漂亮的推导”仅当我们使用MSE的时候才能看到,大部分的评估函数无法推得下式这种简洁的形式。

为了清楚明晰,我补上了书中省略的公式推导部分(稍后补上)...


\begin{split} E (Y-\hat{Y})^2 & = E[f(X) + \epsilon- \hat{f}(X)]^2 \qquad \qquad (2.3)\\ & = [f(X)-\hat{f}(X)]^2+Var(\epsilon )\\ &= Bias^2 + Variance + Variance(\epsilon) \end{split}

定义 \bar{f}(X_T) = E_T[\hat{f}(X_T)]

\begin{split} E (Y-\hat{Y})^2 & = E[f(X_T) - \hat{f}(X_T)]^2 + Var(\epsilon ) \\ & = E[f(X_T)-\bar{f}(X_T)+\bar{f}(X_T) - \hat{f}(X_T)]^2 + Var(\epsilon ) \\ & = [E_T(\hat{f}(X)) -f(X)]^2 + E_T[\hat{f}(X) - E_T(\hat{f})]^2+ Var(\epsilon )\\ &= Bias(\hat{f})^2 + Variance(\hat{f(X_T)})+ Var(\epsilon )\\ Exp\>Loss &= bias^2 +variance+noise \end{split}

  • X_T代表了我们的训练数据,E代表expected loss即期望误差,\hat{f}代表我们学到的映射函数,而f代表这个函数的真实值。这个公式涉及到了以下概念:
  • Bias(偏差): 代表了我们估计的映射函数\hat{f}中的参数与f的参数的相符程度。
    • 完美的情况下,我们可以得到Bias = 0的映射函数。但我们在大部分情况下无法得到0偏差模型是因为我们无法估计真实的f的类型。举例,我们假设一个映射函数是一个线性的f(X_i) = \beta_0 + \beta_1 *X_i^1+\beta_2 *X_i^2。但因为我们并不知道这个信息,于是我们假设它的分布是这样的f(X_i^T) = \beta_0 + \beta_1 *(X_i^2)^2,那你一辈子也无法通过估计\beta_0\beta_1来得到真正的答案。
    • 通俗的说,你可以理解为bias代表了你的模型对于数据的描述程度,描述程度越高,bias越低,那么整体的表现就越好(在不考虑variance的情况下)
    • 再继续细分,Bias还可以被分解成model bias和estimation bias,此处暂时不表。
  • Variance(方差): 代表了当前映射函数f在不同训练数据上的变化度,也叫做模型对数据的敏感度:\Delta \hat{f}(x_{test}) = \hat{f}_{X_{T_1}}(x_{test})-\hat{f}_{X_{T_2}}(X_{test})。假设我们学到了一个完美的映射函数\hat{f},那么在任一训练集X_{T_1}X_{T_2}上得到的模型参数不该有变化,即\hat{f}的参数不变。
  • Noise(噪音=Var(\epsilon )): 代表了无法降低的损失,这项和映射函数无关,属于数据本身自带的误差和随机。因为噪音的存在,因此不可能实现泛化误差为0。换句话说Noise决定了你的机器学习模型的泛化误差的上界,即最牛逼状态下可实现的最小误差,但这永远不会是0。
  • Generalization Error(泛化误差): 代表了一个统计学习模型在预测数据时所产生的理论误差值。在公式(2.3)中我们将泛化误差的计算公式定义为均方误差(E (Y-\hat{Y})^2 ), 即模型预测值与真实值之间的误差平方和。 通过一系列简单的推导,我们可以将其分解为(偏差的平方)与(方差)的和。我们希望这个数值越小越好:) 如公式(2.1)提到的,公式(2.3)再一次说明不管你的机器学习模型多么厉害,它永远无法学到真实的映射f。这个遗憾是因为泛化误差是由Bias和Variance,以及noise共同决定。因为噪音是天生存在的,这不属于我们的优化范围。求解最低的泛化误差(即最好的映射模型)涉及了以下问题:
    • 如何降低Bias?
    • 如何降低Variance?
    • 是否可以同时降低Bias和Variance?
  • 此处引出了一个哲学意味浓厚的观点:我们很难同时将bias和variance都降至最低。通俗的说,一个模型的复杂程度可以影响bias和variance。如下图所示,我们在寻找最佳参数的过程就是寻找图中虚线的位置,图中虚线的位置代表了泛化误差最小的那个模型(所对应的复杂度)。一般而言,随着模型的复杂程度上升(拥有更多参数),它的bias会逐渐降低,而variance会逐渐上升,这和过拟合(over-fitting)息息相关,暂时按下不表。同时,数据越充分,variance会越低,但同时对模型的学习能力要求越高,可能会导致bias上升。由此,泛化能力有数据的充分度、模型的复杂度,及学习任务的难度共同决定,牵一发而动全身。

关于Variance Bias Trade-off更加通俗的讨论可以看知乎讨论:机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系? - 知乎


2.1.2. How Do We Estimate f? - 22-29页

向上文介绍的,统计学习的根本就是学习一个映射方式,即将X映射到Y所在的空间上。因此这个映射也不局限于一个函数,也可以是一种方法。因此,作者介绍了一系列重要的有关于“方法”的基本概念:

概念1. 参数模型与非参数模型

  • 参数模型(parametric models): 一般来说,我们将有固定数量参数的模型叫做参数模型。如f(X_i) = \beta_0 + \beta_1 *X_i^1+\beta_2 *X_i^2中有\beta_0 ,\beta_1 ,和\beta_2三个参数进行学习,就是典型的参数模型。参数模型将学习一个模型简化到学习一个模型的一组参数,因为我们假设了一个数据相对应的模型而不去思考这个模型是什么。如上面的例子,我们现在只需要估计[\beta _0,\beta _1,\beta _2]。然而,这样做是有风险的,如果真正的模型是f(X_i^T) = \beta_0 + \beta_1 *(X_i^2)^2呢?这样估计出的参数就很难表现出众。比较常见的参数模型有逻辑回归。
  • 非参数模型(non-parametric models): 一般来说,非参数模型的往往很难写出一个明确的数学表达式来描述这一类模型。和参数模型不同,非参数模型不对数据分布进行假设,也不对要学习的模型预设立场。比较常见的非参数模型包括K-近邻算法。统计学上的密度估计(density estimation)也是在做这件事,比如用直方图(histogram)或者核(kernel)来在没有参数形式下对分布进行刻画。

参数模型与非参数模型的对比

  • 参数模型的训练时间长,但预测时耗时短
  • 非参数模型的收敛速度往往是个大问题,不太适合高维数据
  • 参数模型往往对数据有强假设,会造成inductive bias,比如我们可能会假设数据分布是正态分布,然而并不是。非参数模型不对数据分布进行假设,但代价是计算开销很大。
  • 非参数往往需要大量的数据才可以做出正确的推断。

概念2. 模型准确度和可解释度

  • 模型准确性(model accuracy): 代指模型的预测能力,有时候用错误率、精度、或ROC曲线。
  • 模型可解释度(model interpretability ): 代指人为的我们可以解释为什么一个模型有效或者无效。很多时候,我们把机器学习(主要是神经网络/深度学习)叫做炼丹。因为我们不知道为什么这个模型在当前参数下效果拔群,一切随缘....机器学习中得到充分理解的模型是有限的,如GLM(代指大部分线性模型)等。

模型准确性与可解释性之间的取舍:不幸的是,往往准确的模型可解释度都不高,以深度学习为代表的算法更是饱受统计学家的诟病。我猜这也是为什么ISL中并未介绍神经网络及深度学习。我的建议是,在工业界可解释性往往比准确性更重要,因为我们的老板...都不大懂统计学或者数学

概念3. 监督学习与非监督学习

监督学习(supervised learning)与非监督学习(unsupervised learning):参看第一章

概念4. 回归与分类

回归(regression)与分类(classification)问题:简单的说,如果我们的预测值是一个连续数值,如前面例子中提到的收入,它可以是任何非负数,如1234.2233233333元/月。连续的意义就是有无穷个可取值,在这种情况下我们应该使用回归。

如果我们预测的值是一个离散数值且仅有有限个可能性,如[1,2,3,4,5]中任取一个数或者从[0,1] \>or\> [-1,1]中二选一,那就是分类问题。

总体而言,很多回归模型都可以转化为分类模型。相似的,分类模型也可以在适当的处理后用于回归预测连续值。在后面的章节里,ISL会介绍更多回归和分类问题。

------------------------------------------------------------------------------------------------------------------------

4. 后记

本科选专业的时候,我妈说既然你这么喜欢游戏,就去读计算机吧。于是我莫名其妙的进了计算机的深坑。后因种种机缘巧合,本科的时候辅修了数学,此为伏笔。

在基友的拐骗下,陪他上了一门Intelligent Systems(智能系统),从此又一脚迈入了机器学习的大坑(那个时候机器学习这个名字还不火)。

读研究生的时候,系主任问我们你们对什么方向感兴趣,唯一一个回答不是“机器学习”的我显得非常另类。然而世事难测,这些年我却一直在跟机器学习死磕,而我的同学同事们却早已转行。

“大圣,此去欲何?” “踏南天,碎凌霄。” “若一去不回……” “便一去不回!”

--送给对机器学习充满兴趣的你们:)

编辑于 05-08

文章被以下专栏收录