(机器学习)统计学习方法

首先,老规矩:

未经允许禁止转载(防止某些人乱转,转着转着就到蛮牛之类的地方去了)

B站:Heskey0


李航《统计学习方法》自学笔记

BiliBili:Heskey0

#机器学习4 5 6 7 13 14 17 18 20-34 36 37 47-52讲

//TODO: 决策树预剪枝/后剪枝

Machine Learning: 十大机器学习算法 - 简书 (jianshu.com)

机器学习十大算法:

  • 线性回归算法 Linear Regression
  • 支持向量机算法 (Support Vector Machine,SVM)
  • 最近邻居/k-近邻算法 (K-Nearest Neighbors,KNN)
  • 逻辑回归算法 Logistic Regression
  • 决策树算法 Decision Tree
  • k-平均算法 K-Means
  • 随机森林算法 Random Forest
  • 朴素贝叶斯算法 Naive Bayes
  • 降维算法 Dimensional Reduction
  • 梯度增强算法 Gradient Boosting

Chapter 1. 介绍

1.1 分类

基本分类:

  • 监督学习
  • 无监督学习
  • 强化学习

按技巧分类:

  • 贝叶斯学习

  • 核方法

算法角度:

  • 在线学习
  • 批量学习

1.2 基本分类

(1) 监督学习

监督学习的基本假设:X和Y具有联合概率分布 \(P(X,Y)\)

监督学习的目的:学习一个输入到输出的映射,这一映射以模型表示

模型的形式:条件概率分布 \(P(Y|X)\)决策函数 \(Y=f(X)\) (概率用于分类,决策描述连续)

输入空间

  • 输入空间(Input Space):输入的所有可能取值的集合;
  • 实例(Instance):每一个具体的输入,通常由特征向量(Feature Vector)表示;
  • 特征空间(Feature Space):所有特征向量存在的空间

大多时候,输入空间和特征空间是相同的。

输出空间

  • 输出空间(Output Space):输出的所有可能取值的集合

根据变量的不同类型,要解决的问题可以分为回归问题、分类问题和标注问题。

  • 输入变量与输出变量均为连续变量的预测问题——回归问题
  • 输出变量为有限个离散变量的预测问题——分类问题
  • 输入变量与输出变量均为变量序列的预测问题—— 标注问题

example: 预测连续就是回归。预测属于猫狗就是分类。给一个句子标注主语谓语宾语就是序列标注

设输入变量X,输出变量Y

监督学习的基本假设:X和Y具有

(2) 无监督学习

无监督:无标注

无监督学习的目的:研究数据中的潜在结构内容,所以无监督学习对应的不是输出空间,而是隐式结构空间

  • 输入空间:\(X\)

  • 隐式结构空间\(Z\)

  • 模型:函数 \(z=g(x)\) ,条件概率分部 \(P(z|x)\) 或条件概率分布 \(P(x|z)\)

  • 训练集:\(U=\{x_1,x_2,...,x_N\}\)

(3) 强化学习

强化学习其实要强调一个互动,互动是指的是智能系统与环境之间的一个连续互动,通过这个互动,学习一个最优的行为策略

1.3 模型选择方法

过拟合:如果参数过多,甚至超出训练数据集中样本点的个数,这时候模型结构会十分复杂,虽然对已知数据有一个很好的预测效果,但对未知数据预测效果很差

欠拟合:训练误差高,测试误差低

监督学习中两种常用的模型选择方法

  • 正则化
  • 交叉验证

监督学习的两种基本策略:经验风险最小化(ERM)和结构风险最小化(SRM)

  • 风险最小化就是认为,经验/结构风险最小的模型是最优的模型

  • 经验风险最小化的例子:极大似然估计(maximum likelihood estimation)

  • 结构风险最小化的例子:贝叶斯最大后验概率估计

(1) 正则化

机器学习,评估——风险函数

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

损失函数:

\[L(y_i,f(x_i)) \]

风险函数有两种:

  • 经验风险

  • 结构风险:考虑过拟合问题,增加正则项

经验风险 (Empirical Risk):

\[\frac1N\sum_{i=1}^NL(y_i,f(x_i)) \]

结构风险 (Structural Risk)=经验风险+正则化项

\[\frac1N\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f) \]

其中 \(J(f)\) 度量模型的复杂度,系数 \(\lambda\) 用以调整经验风险和模型复杂度之间的关系

一般,模型参数越多,模型越复杂\(J(f)\)越大

常用正则化项:

\(L_1\) 范数:\(||w||_1=\sum_j|w_j|\) ,即参数绝对值之和

\(L_2\) 范数:\(||w||_2^2=\sum_jw_j^2\) ,即参数的平方和

(2) 交叉验证

在样本的数据量足够充足的情况下,通常可以将数据集随机地分为:

  • 训练集(Training Set):用以训练模型
  • 验证集(Validation Set):用以选择模型
  • 测试集(Test Set):用以最终对学习方法的评估

交叉验证的基本思想就是,重复使用数据,以解决数据不足的这种问题。

(2.1) 简单交叉验证

将数据集随机的分为:

  • 训练集
  • 测试集

通过训练集得到不同的学习模型,将学习训练得到的不同模型放到测试集上,计算测试误差,测试误差最小的模型则是最优模型

(2.2) S折交叉验证

随机将数据分为 S 个互不相交、大小相同的子集,其中以 S-1 个子集作为训练集,余下的子集作为测试集

(2.3) 留一交叉验证

每次用N-1个样本训练模型,余下的那个样本测试模型。这是在数据非常缺乏的情况下才使用的方法。

1.3 泛化能力

泛化能力:指的是通过某一学习方法训练所得模型,对未知数据的预测能力

测试误差:计算测试误差所使用的样本为测试集

\[\frac1{N^\prime}\sum_{i^\prime=1}^{N^\prime}L(y_{i^\prime},\hat f(x_{i^\prime})) \]

(1) 泛化误差

泛化误差:是基于整个样本空间

\[\begin{aligned} R_{exp}(\hat f)&=E_p[L(Y,\hat f(X))]\\ &=\int_{X\times Y}L(y,\hat f(x))P(x,y)dxdy \end{aligned} \]

  • 泛化误差是度量对未知数据预测能力的理论值,测试误差则是经验值

  • 在训练集上的误差成为“训练误差”(训练)。在新样本上的误差称为“泛化误差”(实战)

(2) 泛化误差上界

泛化误差上界:泛化误差的概率上界。

在理论上比较两种学习方法所得模型的优劣时,可通过比较两者的泛化误差上界来进行

泛化误差上界的两条性质:

  • 样本容量的函数:当样本容量增加时,泛化误差上界趋于 0。
  • 假设空间容量的函数:假设空间容量越大,模型就越难学,泛化误差上界就越大。

1.4 生成模型与判别模型

(1) 生成模型

生成模型:由数据学习联合分布概率 \(P(X,Y)\),然后求出 \(P(Y|X)\) 作为预测模型,即生成模型(Generative Model):

\[P(Y|X)=\frac{P(X,Y)}{P(X)} \]

  • 每给定一个输入变量X,就可以根据分布函数生成一个输出变量Y

  • 生成模型中的输入变量和输出变量,都为随机变量

典型的生成模型有朴素贝叶斯法,还有隐马可夫模型

(2) 判别模型

判别模型:由数据直接学习决策函数 \(f(X)\) 或者条件概率分布 \(P(Y|X)\) 作为预测模型,即判别模型(Discriminative Model)

  • 不需要考虑X和Y的联合分布

  • 判别方法是有针对性的,研究的是对于特定的输入,应该预测得到一个什么样的输出

典型的判别模型有 k 近邻法感知机,还有决策树

(3) 差异

从样本量上来比较:

  1. 生成模型所需要的数据量较大,因为只有在大数据量的情况下,才能够更好地估计联合概率分布,也就是所有变量的一个全概率模型;
  2. 判别模型,是针对性地学习,只需要得到条件概率分布或者决策函数即可,所以不需要像生成模型的那样,必须配备足够多的样本,因此判别模型所需的样本量要少于生成模型。

从目的来比较:

  1. 生成模型可以还原联合概率分布,借此可以计算出边际分布和条件概率分布,所以可以提供更多的信息;
  2. 判别模型的目的就是预测,所以准确率往往比生成模型会更高一些。

从过程来比较:

  1. 对生成模型而言,样本容量越多,学习到的模型就能够更快地收敛到真实模型上,所以生成模型的收敛速度,较之判别模型更快;
  2. 判别模型,是直接学习的过程,所以不需要面面俱到,因此可以简化学习问题。

从反映数据特征来比较:

  1. 生成模型学习到的模型更接近于真实模型,所以能够反映同类数据本身的相似度;
  2. 判别模型,并不考虑数据的各项特征,所以并不能像生成模型那样反映数据本身的特性。

最后一条是关于隐变量的,生成模型,可以很好地应对具有隐变量的情况,比如混合高斯模型

Chapter 2. 模型

2.1 KNN

KNN (K-Nearest-Neighbour)可以说是机器学习中最简单的是一种「分类回归方法」

KNN是一种Lazy Learning,也就是一种不具有显性表达式的方法

(1) 算法介绍

(1.1) 主要思想

主要思想:给定一个训练数据集,其中实例标签已定,当输入新的实例时,可以根据其最近 \(k\) 个训练实例的标签,预测新实例对应的标注信息。

当给定一个新的实例 \(x\) 时,我们就可以在训练数据集 \(T\) 里面寻找与 \(x\) 最近的 \(k\) 个实例,然后根据这 \(k\) 个实例的标签来决定新实例的 \(y\) 值。

(1.2) 具体算法

输入:训练集 \(T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}\) 其中 \(y=c_1,c_2,...c_K\)

输出:实例 \(x\) 所属类别 \(y\)

步骤:

  • 给出距离度量的方式,计算新的 \(x\) 与训练集 \(T\) 中每个点的距离

  • 找出与 \(x\) 最相近的 \(k\) 个点,将覆盖这 \(k\) 个点的 \(x\) 的领域记作 \(N_k(x)\)

  • 根据分类决策规则来决定 \(x\) 所属的类别 \(y\),即

\[y=\max_{c_j}\sum_{x_i\in N_k(x)}I(y_i=c_j),i=1,2,...,N;j=1,2,...,K \]

其中,\(I(y_i=c_j)\) 是一个示性函数,\(y_i=c_j\) 时,函数值为1

0-1损失函数

\[L(Y,f(X))= \left\{ \begin{aligned} &1,&Y\ne f(X)\\ &0,&Y=f(X) \end{aligned} \right. \]

(2) 三要素

  • 距离度量
  • k个邻居
  • 分类决策规则
(2.1) 距离度量

\(L_p\) 距离:

\[L_p(x_i,x_j)=(\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^p)^{\frac1p} \]

其中,\(x^{(l)}\) 代表第 \(l\) 个特征

image

如图:

  • 横坐标是第一个特征 (身高),纵坐标是第二个特征 (体重)
  • ×代表男,· 代表女
  • 根据红点与周围点的距离判定类别

example:

假设我想让你帮我区分一个人是好人还是坏人。我就给你2个纬度的信息: 1.你的手机过去一个月内平均每天的通话时长,2.你过去一个月每个月的收入金额。 你帮我用knn建模。训练集10000个样本,里面有5000好人,5000坏人。现在每个训练集在这2个维度上就有个分布情况。比如横轴是 通话 纵轴是 收入。然后新来一个样本点,第10001个,这个样本点就可以用之前的10000个做knn了,找第10001样本周围欧式距离最近的k个样本计算

knn不用训练什么参数,k就是唯一要考虑的

(2.2) k值的选择
特点 值较小 值较大
近似误差
估计误差
敏感性
模型 复杂 简单
拟合程度 过拟合 欠拟合

\(k\) 可通过交叉验证选择

(2.3) 分类决策规则

多数表决规则:由输入实例的 \(k\) 个邻近的训练实例中的多数类决定输入实例的类别

(3) kd树

讲义(十四):kd 树的构造和搜索

从根本上来看,是一个二叉树结构,每个结点代表 \(k\) 维超矩形区域

(3.1) 构建

输入:\(k\) 维空间数据集:

\[T=\{x_1,x_2,...,x_N\} \]

其中 \(x_i=(x_i^{(1)},x_i^{(2)},...x_i^{(k)})\)\(x_i^{(l)}\) 的上标代表第 \(l\) 个特征的值

输出:kd 树

构建过程:见 讲义(十四):kd 树的构造和搜索

(3.2) 搜索

输入:kd树,目标点是 \(x\)

输出:\(x\) 的最近邻

搜索过程

  • 寻找“当前最近点”:从根结点出发,递归访问 kd 树,找出包含 \(x\) 的叶结点,以此叶结点为“当前最近点”

  • 回溯:以目标点和"当前最近点"的距离沿树根部进行回溯和迭代,当前最近点一定存在于该结点一个子结点对应的区域,检查子结点的父结点的另一子结点对应的区域是否有更近的点。当回退到根结点时,搜索结束,最后的“当前最近点”即为 的最近邻点。

2.2 感知机

感知机是一个二分类的线性分类模型,之所以说是线性,是因为它的模型是线性形式的

(1) 模型

输入:\(x=(x^{(1)},x^{(2)},...,x^{(n)})^T\) ,即 \(n\) 维特征向量

输出:\(y=+1,-1\)

感知机:

\[f(x)=sign(w\cdot x+b)= \left\{ \begin{aligned} &+1,&w\cdot x+b\ge0\\ &-1,&w\cdot x+b<0 \end{aligned} \right. \]

其中 \(w=(w^{(1)},w^{(2)},...,w^{(n)})^T\) 称为权值,\(b\) 为Bias,\(w\cdot x\) 为内积

在几何中,如果环境空间是 \(n\) 维的,那么它所对应的超平面其实就是一个 \(n-1\) 维的子空间。换句话说,超平面是比他所处的环境空间小一个维度的子空间

感知机

image

(2) 学习策略

感知机模型,有一个比较严苛的条件,就是要求数据集必须是线性可分的 (存在超平面划分)

特征空间中,任意一点到超平面的距离:

\[\frac1{||w||}|w\cdot x_0+b| \]

\(x_0\) 是正确分类点,则:

\[\frac1{||w||}|w\cdot x_0+b|= \left\{ \begin{aligned} &\frac{w\cdot x_0+b}{||w||},&y_0=+1\\ &-\frac{w\cdot x_0+b}{||w||},&y_0=-1 \end{aligned} \right. \]

\(x_0\) 是错误分类点,则:

\[\frac1{||w||}|w\cdot x_0+b|= \left\{ \begin{aligned} &-\frac{w\cdot x_0+b}{||w||},&y_0=+1\\ &\frac{w\cdot x_0+b}{||w||},&y_0=-1 \end{aligned} \right. =\frac{-y_0(w\cdot x_0+b)}{||w||} \]

如果是错误分类点,通过分类器所得到的类别 \(f_0(x_0)\) 与 真实的类别 \(y_0\), 应该符号相反

如果用 \(M\) 代表所有误分类点的集合,则所有误分类点到超平面 \(S\) 的距离总和为:

\[-\frac1{||w||}\sum_{x_i\in M}y_i(w\cdot x_i+b) \]

所以最小化距离等价于最小化损失函数:

\[L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b) \]

  • \(||w||\) 不会影响距离和的符号,即不影响正值还是负值的判断。
  • \(||w||\) 不会影响感知器算法的最终结果。算法终止条件,是不存在误分类点。这时候 \(M\) 为空集,那么误分类点的距离和是否为 0 取决于分子,而不是分母,因此与 \(||w||\) 的大小无关。

2.3 决策树

决策树是一棵多叉树

(1) 概念

决策树的根本其实还是一个条件概率模型,条件概率分布就相当于对特征空间的划分

如图

  • 对于特征 \(x^{(1)}\)\(x^{(2)}\) 而言,他们的取值空间为 \([0,1]\) 区间
  • 每个区域标 \(-1\)\(+1\) 就是对应的类别

image


例如:

特征:\(x_i^{(1)}=\)年收入,\(x_i^{(2)}=\)房产,\(x_i^{(3)}=\)婚姻状况

类别:\(y_1=\)可以偿还,\(y_2=\)无法偿还

构建决策树:

image


非叶子结点代表特征,叶子结点代表类别

(2) 构建

  1. 构建根节点:训练数据集,包含 \(N\) 个样本

  2. 选择最优特征:选择最优特征来分割训练数据集

  3. 判断是否产生了叶节点:若子集被正确分类,构建叶子结点,否则,重新选择新的最优特征

  4. 重复2, 3

(2.1) 如何选择最优特征

ID3算法:用信息增益选择最优特征,侧重于选择数量较多的某一特征

  1. 计算经验熵
  2. 计算经验条件熵
  3. 计算信息增益
  4. 信息增益比最大值确认最优特征

C4.5算法:用信息增比选择最优特征,侧重于某一特征单位数量的选择

(2.2) 信息增益

经验熵

\[H(D)=-\sum^K_{k=1}\frac{|C_k|}{|D|}\log_2\frac{|C_k|}{|D|} \]

其中:

  • 训练数据集 \(D\),其样本容量 \(|D|\) (样本个数)
  • 设有 \(K\) 个类别 \(C_k\)\(k=1,2,...,K\)\(|C_k|\) 为属于类 \(C_k\) 的样本个数

\[\sum^K_{k=1}|C_k|=|D| \]

在特征 \(A\) 下每个子集所占的权重为

\[w_i=\frac{|D_i|}{|D|} \]

经验条件熵

\[H(D|A)=\sum^n_{i=1}\frac{|D_i|}{|D|}H(D_i) \]

信息增益

\[g(D,A)=H(D)-H(D|A) \]

物理意义:

得知特征 \(A\) 而使类 \(Y\) 的 信息的不确定性 减少的程度

(3) 预剪枝

好的模型,树的深度小,叶子结点少。

剪枝的目的:解决过拟合的问题

分类:

  • 预剪枝:生成过程中,对每个结点划分前进行估计,若当前结点的划分不能提升泛化能力,则停止划分,记当前结点为叶结点
  • 后剪枝:生成一棵完整的决策树后,从底部向上对内部结点进行考察,如果将内部结点变成叶结点,可以提升泛化能力,那么就进行交换。

(4) 后剪枝

REP,PEP,MEP,EBP,CCP

2.4 朴素贝叶斯

朴素贝叶斯算法(Naive Bayes)基于概率论的贝叶斯定理,应用非常广泛,从文本分类、垃圾邮件过滤器、医疗诊断等等。朴素贝叶斯适用于特征之间的相互独立的场景,例如利用花瓣的长度和宽度来预测花的类型。“朴素”的内涵可以理解为特征和特征之间独立性强。

Chapter 3. CART,SVM

3.1 CART

3.2 逻辑回归

Logistic函数:

\[p(t)=\frac{exp(\alpha+\beta t)}{1+exp(\alpha+\beta t)} \]

其中,令 \(x=\alpha+\beta t\),那么就形成一个 Sigmoid function:

\[\begin{aligned} F(x)&=\frac{e^x}{1+e^x}\\ \end{aligned} \]

可以理解为 多个逻辑回归一个个嵌套起来 成为早期的神经网络

3.3 SVM

SVM (Support-Vector Machine) 支持向量机,是一种用于分类回归的方法。发表于1995年。

image

红框点,对于某个超平面,“最小间隔的点(几何间隔 \(\gamma_i\) )” 最大的时候,类别分的最开

那些被最终选中的点,因为在代数空间中,我们也可以用向量表示,所以称为支持向量机,有了它们的支持就可以找到唯一分离的超平面

(1) 算法

SVM的分类决策可以写成:

\[f(x)=sign(w\cdot x+b) \]

与感知机类似

几何间隔 \(\gamma_i\) 正是实例点 \(x_i\) 到超平面 \(\omega\cdot x+b=0\) 的距离:

\[\frac{|\omega\cdot x_i+b|}{||\omega||} \]

同时,为了去掉绝对值符号,引入分类标签 \(y_i\),即 \(x_i\) 对应的类别:

\[\gamma_i=\frac{y_i(\omega\cdot x_i+b)}{||\omega||}=y_i(\frac{\omega\cdot x_i}{||\omega||}+\frac{b}{||\omega||}) \]

其中 \(||\omega||\) 代表欧式距离,\(\omega\)\(n\) 维向量

间隔的最小值记作:

\[\gamma=\min_{i}\gamma_i \]

那么优化问题可以写成:

\[\begin{aligned} &\max_{\omega,b}\gamma\\ &s.t.&y_i(\frac{\omega\cdot x_i}{||\omega||}+\frac{b}{||\omega||})\ge\gamma \end{aligned} \]

为了解决模型的不可识别性,即 \(3x^{(1)}+4x^{(2)}+1=0\)\(6x^{(1)}+8x^{(2)}+2=0\) 表示同一个超平面,引入归一化思想:令 \(||\omega||=1\) ,再给 \(\gamma\) 加个约束 \(\gamma=1\) (SVM中约定俗成的是定为1),也就是距离超平面最近的点距离都是 1

优化问题变为:

\[\begin{aligned} &\min_{\omega,b}||\omega||\\ &s.t.&y_i(\omega\cdot x_i+b)\ge1 \end{aligned} \]

也就是将约束条件 \(\gamma=1\) 隐藏在优化问题中,而不是单独列出来

线性可分SVM的最优解是唯一解

(2) 最大间隔算法

输入:训练数据集

\[T=(x_1,y_1),...,(x_N,y_N) \]

输出:最大间隔分离超平面与决策函数

【十分钟 机器学习 系列课程】 讲义(43):SVM支持向量机-线性可分支持向量机的对偶问题



Appendix

激活函数对比

sigmoid缺点:

  • 激活函数的计算量较大,在反向传播中,当求误差梯度时,求导涉及除法;
  • 在反向传播中,容易就会出现梯度消失,无法完成深层网络的训练;
  • 函数的敏感区间较短,(-1,1)之间较为敏感,超过区间,则处于饱和状态,

relu对比于sigmoid:

  • sigmoid的导数,只有在0附近,具有较好的激活性,而在正负饱和区的梯度都接近于0,会造成梯度弥散;而relu的导数,在大于0时,梯度为常数,不会导致梯度弥散。
  • relu函数在负半区的导数为0 ,当神经元激活值进入负半区,梯度就会为0,也就是说,这个神经元不会被训练,即稀疏性;
  • relu函数的导数计算更快,程序实现就是一个if-else语句;而sigmoid函数要进行浮点四则运算,涉及到除法;

relu的缺点:

在训练的时候,ReLU单元比较脆弱并且可能“死掉”。举例来说,当一个很大的梯度,流过ReLU的神经元的时候,可能会导致梯度更新到一种特别的状态,在这种状态下神经元将无法被其他任何数据点再次激活。如果这种情况发生,那么从此所以流过这个神经元的梯度将都变成0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,因为这导致了数据多样化的丢失。

posted @ 2022-04-28 12:08  Heskey0  阅读(228)  评论(0编辑  收藏  举报

载入天数...载入时分秒...