《统计学习方法》阅读笔记及代码实现 - CH1

学习《统计学习方法》的一些零碎笔记,会穿插个人的愚见

请注意,本文编写于 1870 天前,最后修改于 1501 天前,其中某些信息可能已经过时。

0 前言

寒假参加了旷视在南理工办的CV相关的夏令营,算是对深度学习这个东西有了些浅显的了解以及应用,用keras库来写代码真是太无脑了,给模型加一层,加激励函数,池化,DropOut,梯度下降等等一系列操作都是直接调库,然后就开始调参的工作(老师还说我们要是只会当一个调参战士,你们的年薪只能40w,orz我觉得40w已经很多了)。

虽然是十分无脑暴力的训练一个模型,但是冬令营还是给我们讲了大量的CNN的理论以及从一个比较高的角度去讲这些问题,我觉得对我来说是深有益处的。我也开始想慢慢的尝试做一些相关的工作,开学看了一些书籍,其中我对《全栈数据之门》(这本书本身的东西特别多特别浅,但是作者的一些观点和介绍的思路还是清晰的)上的一段话很有体悟,摘抄到这里

  1. 我所理解的,学习机器学习算法的三个层次如下所述。
  2. 调用: 知道算法的基本思想,能应用现有的库来做测试。简单说,就是了解KNN是做什么的,会调用sklearn的KNN算法
  3. 调参:知道算法的主要影响因素,能进行参数调节优化
  4. 嚼透:理解算法的实现细节,并且能用代码实现出来

我觉得作者的这段话很中肯,在“全民AI”的时代,很多人都想学些东西,但是一上来就啃原理,啃证明,无疑是劝退的,并且容易看的非常模糊,强行啃完发现没有一个整体的概念,劝退*2(甚至开始怀疑自己...)。从应用的角度去看问题,从优化的角度去看代码,再去啃原理,我相信这样是更能静下心来学东西的。近期,我准备阅读李航老师的《统计学习方法》并用原生代码和调库两种方法去分别实现书中的算法。由于我的编程能力比较一般,会参考一些资料来辅助编码

  • 参考资料
  1. 第一份是Github上面的lihang_book_algorithm
  2. 第二份还是Github上面的lihang-code(含ppt和code)

1. 第一章 统计学习方法概论

1.1 统计学习

统计学习是关于计算机基于[数据]构建[概率统计模型]并运用模型对数据进行预测与分析的一门学科。统计学习也称为统计机器学习

统计学习由“监督学习(supervised learning),非监督学习(unsupervised learning),半监督学习(semi-supervised learning)和强化学习(reinforcement learning )”等组成(本书主要讨论监督学习)

统计学习方法三要素:模型、策略和算法

实现统计学习方法的步骤如下:

(1) 得到一个有限的训练数据集合:
(2) 确定包含所有可能的模型的假设空间,即学习模型的集合;
(3) 确定模型选择的准则,即学习的策略;
(4) 实现求解最优模型的算法,即学习的算法;
(5) 通过学习方法选择最优模型;
(6) 利用学习的最优模型对新数据进行预测或分析.

1.2 监督学习

1.2.1 输入空间、特征空间、输出空间

输入与输出的所有可能取值的集合分别称为输入空间与输出空间

每个具体的输入是一个实例( instance),通常由特征向量(feature vector)表
示,这时,所有特征向量存在的空间称为特征空间( feature space)。特征空间的
每一维对应于一个特征。有时假设输入空间与特征空间为相同的空间,对它们不
予区分;有时假设输入空间与特征空间为不同的空间,将实例从输入空间映射到
特征空间。模型实际上都是定义在特征空间上的

[x1,x2,x3,x4..]:即为一个实例,vector里面的每个变量表示一个特征

监督学习从训练数据集中学习模型,对测试数据集进行预测

输入变量X和输出变量y有不同的类型可以是连续的,也可以是离散的。人
们根据输入、输出变量的不同类型,对预测任务给予不同的名称

(1) 输入变量与输出变量均为连续变量的预测问题称为回归问题;--线性回归
(2) 输出变量为有限个离散变量的预测问题称为分类问题;--二分类问题
(3) 输入变量与输出变量均为变量序列的预测问题称为标注问题 --标注句子中的名词

1.2.2 联合概率分布

监督学习假设输入与输出的随机变量X和y遵循联合概率分布P(X,Y)
P(X)表示分布函数,或分布密度函数。注意,在学习过程中,假定这一联合
概率分布存在,但对学习系统来说,联合概率分布的具体定义是未知的。训练数
据与测试数据被看作是依联合概率分布P(X,Y)独立同分布产生的.

统计学习假设数据存在一定的统计规律,X和Y具有联合概率分布的假设就是监督学习关于数据的基本假设.

监督学习的模型可以是概率模型或非概率模型,由条件概率分布P(Y|X)或决策函数Y=F(X)表示,随具体学习方法而定。

1.2.3 问题的形式化

1.3 统计学习三要素(!!!!超级重要的一节)

方法 = 模型 + 策略 + 算法

1.3.1 模型(Model)

在监督学习过程中,模型就是索要学习的条件概率分布或决策函数。模型的假设空间包含所有可能的条件概率分布或决策函数。

例如:假设决策函数是输入变量的线性函数,那么模型的假设空间就是所有这些线性函数构成的函数集合,假设空间中的模型一般由无数多个

我的理解:是存在一个模型的集合的,然后通过不同的策略和方法来将这个模型具象化,但是关键是针对具体问题应该选择怎样的模型,我想这是涉及到数学建模的内容的。其实基本的问题都有比较固定的套路,像预测就用回归,但是如何优化预测的效果,如何预测复杂场景下的问题,这都是建模要考虑的问题。还比如像遗传算法啊,粒子群算法,神经网络算法这些启发式智能算法都是建立在把问题抽象成模型的基础上(也就是先找到自己所认为的假设空间,接下来运用算法来求解参数让模型具象化)进行求解的。数学建模是很重要的一步!!!好好学习叭

1.3.2 策略(strategy)
1.损失函数和风险函数

损失函数度量模型一次预测的好坏,风险函数度量平均意义下模型预测的好坏

1.1 常用的损失函数

(1) 0-1损失函数
(2) 平方损失函数
(3) 绝对损失函数
(4) 对数损失函数(或对数似然损失函数)

1.2 风险函数(或称为期望损失)

风险函数是模型f(X)关于联合分布P(X,Y)的平均意义下的损失,也是损失函数的期望

2.经验风险和结构风险

2.1 经验风险和期望风险
模型f(X)关于[训练数据集]的平均损失称为经验风险(经验损失)
期望风险是模型关于联合分布的期望损失(理论上的损失,真损失)
经验风险是模型关于训练样本集的平均损失(在数据集上表现的损失,表现损失)

根据大数定律,样本容量N趋于无穷时,经验风险趋于期望风险,所以现实中往往用经验损失来估计期望损失(重要!!!)

监督学习的两个策略:
(1) 经验风险最小化
(2) 结构风险最小化

2.2 结构风险
由于经验风险最小化学习容易出现”过拟合现象“,所以定义了结构风险来防止过拟合

结构风险最小化等价于正则化(正则化冬令营讲过,所以这里并没有劝退我23333)

结构风险在经验风险的基础上加了一个正则化项,这个正则化项随着模型的复杂程度的增加也增加,模型越复杂,正则化项也就越大,模型的泛化能力也就越弱(开始还有点不明白,最后举了个例子才明白)

(没有列式子是想通过思考想到各自的定义,其实是还不太会latex以及markdown的数学表达式文法,逃~)

1.3.3 算法(algorithm)

学习模型的具体计算方法,这时问题归结为最优化问题,通常最优化问题的解析解不存在,就需要用数值计算的方法去求解,如何确定是全局最优解等等问题都是算法应该考虑的问题

1.4 模型评估与模型选择

1.训练误差与测试误差:这里都是用平均损失来描述
2.过拟合:是指学习时选择的模型所包含的参数过多,导致模型对已知数据预测的很好,对未知数据预测的很差的现象。


1.5 正则化与交叉验证

正则化是结构风险最小化策略的实现

正则化项可以取不同的形式,比如L0-L2范数

正则化符合奥卡姆剃刀原理

奥卡姆剃刀是简约之法则: 切勿浪费较多东西,去做‘用较少的东西,同样可以做好的事情’。”换一种说法,如果关于同一个问题有许多种理论,每一种都能作出同样准确的预言,那么应该挑选其中使用假定最少的。尽管越复杂的方法通常能做出越好的预言,但是在不考虑预言能力(即结果大致相同)的情况下,假设越少越好。

交叉验证
将数据切分成三部分:分别为训练集、验证集和测试集,训练集用来训练模型,验证集用于对模型的选择,测试机用于最终对学习方法的评估。

(1) 简单交叉验证
(2) S折交叉验证
(3) 留一交叉验证(S折交叉验证的特殊情况)

1.6 泛化能力

1.6.1 泛化误差

现实中采用最多的方法是通过测试误差来评价学习方法的泛化能力

理论上:泛化误差是模型对未知数据预测的误差,事实上,泛化误差就是所学习到的模型的期望风险

1.6.2 泛化误差上界(不是太能理解。。之后再啃吧现在要去写代码了)

学习方法的泛化能力分析往往是通过研究泛化误差的概率上界进行的,简称为泛化误差上界,具体来说,就是通过比较两种学习方法的泛化误差上界的大小来比较它们的优劣。

(1) 样本容量增加时,泛化上界趋于0
(2) 空间容量越大,模型就越难学,泛化误差上界越大

1.7 生成模型与判别模型

监督学习方法又可以分为生成方法和判别方法,所学到的模型分别称为生成模型和判别模型

1.8 分类问题

输出变量Y取有限个离散值时,预测问题便成为分类问题

输入变量X可以是连续的也可以是离散的

对于二类分类问题常用的评价指标是精确率和召回率以及两者的调和均值F1值

1.9 标注问题

可以认为标注问题是分类问题的一个推广,又是更复杂的结构预测问题的简单形式,标注问题的输入是一个观测序列,输出是一个标记序列或状态序列。标注问题目标是能够训练一个模型,使它能够对观测序列给出标记序列作为预测

评价标注模型的指标与评价分类模型的指标一样
标注常用的统计学习方法有:隐马尔可夫模型,条件随机场

示例:自然语言处理的词性标注(从英文文章中抽取基本名词短语)

讲真,之前还没有意识到这种问题可以单列一类,可能因为作者是做NLP方向的,所以对这种序列输入输出比较敏感吧

1.10 回归问题

回归用于预测输入变量和输出变量之间的关系,回归模型正是表示从输入变量到输出变量之间映射的函数,回归问题的学习等价于函数拟合

回归学习最常用的损失函数是平方损失函数,可以用最小二乘法求解。

2. 第一章总结

整体来说收获还是蛮丰富的,不过也认识到了这本书的适用范围。正如书中所说,本书主要是讲解监督学习的学习方法,并把监督学习分为了回归、分类和标注问题三类,标注问题我是第一次见到,还蛮新奇的。第一章对于统计学习的一些概念做了理论上的解释,也阐述了原因,好评。不过数学的推导部分我还是没开始啃...我觉得现在这种小定理的证明看起来有点打脑壳,还是不劝退自己为好。对于联合分布这个概念还有一丢丢的印象,仅存当时学习留到现在的理解(当时就没好好学好吧),对于概率论这一块的知识,后面再来补叭。今天是没时间喽,还要去写写Echarts(逃~)

经过第一章的大致梳理,我对统计学习方法有了较为清晰的认识,也越发的期待(真的吗????)后面真正的干货。

评论列表