1. 统计学习
1)统计学习的特点
- 统计学习是关于计算机基于数据构建概论统计模型并运用模型对数据进行预测与分析的一门学科
- 主要特点:
- 统计学习以计算机及网络为平台,是建立在计算机及网络上的
- 统计学习以数据为研究对象,是数据驱动的学科
- 统计学习的目的是对数据进行预测与分析
- 统计学习以方法为中心,统计学习方法构建模型并应用模型进行预测与分析
- 统计学习是概论论、统计学、信息论、计算理论、最优化理论及计算机科学等多个领域的交叉学科,并且在发展中逐步形成独自的理论体系与方法论
- 学习:如果一个系统能够通过执行某个过程改进它的性能,这就是学习
- 统计学习:就是计算机通过运用数据及统计方法提高系统性能的机器学习
2)统计学习的对象
- 统计学习的对象是数据:它从数据出发,提取数据的特征,抽象出数据的模型,发现数据中的知识,又回到对数据的分析与预测中去
- 统计学习关于数据的基本假设是同类数据具有一定的统计规律性,这个是统计学习的前提。这里的同类数据指具有某种共同性质的数据。由于他们具有统计规律性,所以可以用概论统计方法处理他们
3)统计学习的目的
- 统计学习用于对数据的预测与分析,特别是对未知新数据的预测与分析
- 对数据的预测与分析是通过构建概率统计模型实现的,统计学习总的目标是考虑学习什么样的模型和如何学习模型,使模型能对数据进行准确的预测与分析同时也要考虑尽量提高学习效率
4)统计学习的方法
- 统计学习的方法是基于数据构建概率统计模型,从而对数据进行预测与分析
- 组成:
- 监督学习
- 无监督学习
- 强化学习
- 从给定的、有限的、用于学习的训练数据集合出发,假设数据是独立同分布产生的
- 并且假设要学习的模型属于某个函数的集合,称为假设空间
- 应用某个评价准则,从假设空间中选取一个最优模型,使他对已知的训练数据及未知的测试数据在给定的评价准则下有最优的预测
- 最优模型的选取由算法实现
- 三要素:
- 模型:模型的假设空间
- 策略:模型选择的准则
- 算法:模型学习的算法
- 实现统计学习的步骤:
- 得到一个有限的训练数据集合
- 确定包含所有可能的模型的假设空间,即学习模型的集合
- 确定模型选择的准则,即学习的策略
- 实现求解最优模型的算法,即学习的算法
- 通过学习方法选择最优模型
- 利用学习的最优模型对新的数据进行预测或者分析
5)统计学习的研究
- 统计学习方法:旨在开发新的学习方法
- 统计学习的理论:探求统计学习方法的有效性与效率,以及统计学习的基本理论问题。
- 统计学习应用的研究:考虑将统计学习方法应用到实际问题中去,解决实际问题
6)统计学习的重要性
- 统计学习是处理海量数据的有效方法
- 统计学习是计算机智能化的有效手段
- 统计学习是计算机科学发展的一个重要组成部分。可以认为计算机科学由三维组成:系统、计算、信息。统计学习主要属于信息这一维,并在其中起着核心作用
2. 统计学习的分类
1)基本分类
1.监督学习
- 监督学习是指从标注数据中学习预测模型的机器学习问题。标注数据表示输入输出的对应关系,预测模型对给定的输入产生相应的输出。监督学习的本质是学习输入到输出的映射的统计
- 输入输出空间:输入输出所有可能取值的集合。输入输出空间可以是有限元素的集合,也可以是整个欧式空间。输入空间可以是同一空间,也可以是不同的空间,通常输出空间远小于输入空间
- 每个具体的输入是一个实例,通常由特征向量表示
- 特征空间:所有特征向量存在的空间。特征空间的每一维对应一个特征。有时假设输入空间与特征为相同的空间,有时假设空间与特征空间为不同的空间,将实例从输入空间映射到特征空间
- 回归问题:输入变量与输出变量均为连续的预测问题
- 分类问题:输出变量为有限个离散变量的预测问题
- 标注问题:输入变量与输出变量均为变量序列的预测问题
- 联合概率分布:监督学习假设输入与输出的随机变量X和Y遵循联合概率分布,在学习的过程中假定这个联合概率分布存在,但对学习系统来说,联合概率分布的具体定义是未知的。训练数据与测试数据被看作是依联合概率分布独立同分布产生的。统计学习假设数据存在一定的统计规律,X和Y具有联合概率分布就是监督学习关于数据的基本假设
- 假设空间:监督学习的目的在于学习一个由输入到输出的映射,这一映射由模型来表示,换句话说,学习的目的就在找到最好的这样的模型。模型属于输入空间到输出空间的映射的集合,这个集合就是假设空间。假设空间的确定意味着学习的范围的确定
- 问题的形式化:监督学习利用训练数据集学习一个模型,在用模型对测试样本集进行预测。由于在这个过程中需要标注训练数据集,而标注的训练数据集往往是人工给出的,所以称为监督学习。监督学习分为学习和预测两个过程,由学习系统和预测系统完成。
- 无监督学习
- 无监督学习是指从无标注数据中学习预测模型的机器学习问题。无标注数据是自然得到的数据,预测模型表示数据的类别、转换或概率。无监督学习的本质是学习数据中的统计规律或潜在结构
- 模型的输入与输出的所有可能取值的集合分别称为输入空间与输出空间。输入空间与输出空间可以是有限元素集合,也可以是欧氏空间。每个输入是一个实例,由特征向量表示。每个输出是对输入的分析结果,由输入的类别、转换或概率表示。模型可以实现对数据的聚类、降维或概率估计
- 无监督学习可以用于对已有数据的分析,也可以用于对未来数据的预测
3.强化学习
- 强化学习是指智能系统在与环境的连续互动中学习最优行为策略的机器学习问题。
- 智能系统的目标不是短期奖励的最大化,而是长期积累奖励的最大化。强化学习过程中,系统不断地试错,以达到学习最优策略的目的
- 半监督学习
习预测模型的机器学习问题。
- 半监督学习旨在利用未标注数据中的信息,辅助标注数据,进行监督学习,以较低的成本达到较好的学习效果。
- 主动学习
- 主动学习是指机器不断主动给出实例让教师进行标注,然后利用标注数据学习预测模型的机器学习问题。
- 通常的简单学习使用给定的标注数据,往往是随机得到的,可以看成 "被动学习" ,主动学习的目标是找出对学习最有帮助的实例让教师标注,以较小的标注代价,达到较好的学习效果
2)按模型分类
- 概率模型与非概率模型
- 概率模型:决策树、朴素贝叶斯、隐马尔可夫模型、条件随机场、概率潜在语义分析、潜在狄利克雷、高斯混合模型
- 非概率模型:感知机、支持向量机、k近邻、AdaBoost、k均值、潜在语义分析、神经网络
- 线性模型与非线性模型
- 线性模型:感知机、线性支持向量机、k近邻、k均值、潜在语义分析
- 非线性模型:核函数支持向量机、AdaBoost、神经网络
- 参数化模型与非参数化模型
- 参数化模型:假设模型参数的维度固定,模型可以由有限维参数完全刻画。
- 感知机、朴素贝叶斯、逻辑斯蒂回归、k均值、高斯混合模型、潜在语义分析、概率潜在语义分析、潜在狄利克雷分配
- 非参数化模型:假设模型参数的维度不固定或者说无穷大,随着训练数据量的增加而不断增大
- 决策树、支持向量机、AdaBoost、k近邻
- 参数化模型适合问题简单的情况,现实中问题往往比较复杂,非参数化模型更加有效
- 参数化模型:假设模型参数的维度固定,模型可以由有限维参数完全刻画。
3)按算法分类
- 在线学习:指每次接受一个样本,进行预测,之后学习模型并不断重复该操作的机器学习
- 批量学习:一次接受所有数据,学习模型,之后进行预测
4)按技巧分类
- 贝叶斯学习:又称为贝叶斯推理,其主要思想是,在概率模型的学习和推理中,利用贝叶斯定理,计算在给定数据条件下模型的条件概率,即后验概率,并应用这个原理进行模型的估计,以及对数据的预测。
- 朴素贝叶斯、潜在狄利克雷分配的学习
- 核方法:使用核函数表示和学习非线性模型的一种机器学习方法
- 核函数支持向量机、核PCA、核k均值
3. 统计学习方法三要素
方法 = 模型 + 策略 + 算法
1)模型
- 统计学习首先要考虑的就是学习什么样的模型
- 在监督学习中,模型就是所要学习的条件概率分布或决策函数
- 模型的假设空间包含所有可能的条件概率分布或决策函数。假设空间中的模型一般有无穷多个
2)策略
- 有了模型的假设空间,就要考虑按什么样的准则学习或者选择最优的模型。统计学习的目标在于从假设空间中选取最优模型
-
损失函数
- 损失函数或代价函数:用来度量预测错误的程度,是非负实值函数
- 0-1损失函数
- 平方损失函数
- 绝对值损失函数
- 对数损失函数
- 损失函数值越小,模型就越好
-
风险函数
- 风险函数或期望损失:度量平均意义下模型预测的好坏
- 经验风险:模型关于训练集的平均损失
- 学习的目标就是选择期望风险最小的模型
-
经验分析最小化
- 在假设空间、损失函数以及训练数据集确定的情况下,经验风险函数式就可以确定
- 经验分析最小化的策略认为,经验风险最小的模型就是最优模型
- 当样本容量足够大时,经验风险最小化能保证有很好的学习效果
- 但当样本容量很小时,经验风险最小化学习的效果就未必很好,会产生 "过拟合" 现象
-
结构风险最小化
- 结构风险最小化是为了防止过拟合而提出的策略,它等价于正则化。
- 结构风险在经验分析上加上表示模型复杂度的正则化项或者罚项
- 模型越复杂,复杂度越大;反之,模型越简单,复杂度越小
- 结构风险小需要经验风险与模型复杂度同时小,结构风险小的模型往往对训练数据以及未知的测试数据都有较好的预测
- 结构风险最小化的策略认为结构风险最小的模型是最优的模型
- 这样,监督学习问题就变成了经验风险或结构风险函数的最优化问题。这时经验或者结构风险函数是最优化的目标函数
3)算法
- 算法是指学习模型的具体计算方法,我们最后要考虑用什么样的计算方法求解最优模型
- 统计学习问题归结为最优化问题,统计学习的算法成为求解最优化问题的算法
- 如果最优化问题有显示的解析式,那就比较简单了。但通常解析式不存在,就需要用数值计算的方法求解
- 如何保证找到全局最优解,并使求解过程高效就是一个重要的问题
统计学习方法之间的不同,主要来自其模型、策略、算法的不同。确定了模型、策略、算法,统计学习的方法也就确定了。
4. 模型评估与模型选择
- 训练误差与测试误差
- 统计学习的目的是使学到的模型不仅对已知数据而且对未知数据都能有很好的预测能力
- 不同的学习方法会给出不同的模型,当损失函数给定时,基于损失函数的模型的训练误差和模型的测试误差就成为学习方法评估的标准
- 训练误差:学习到的模型关于训练数据集的平均损失
- 测试误差:学到的模型关于测试数据集的平均损失
- 训练误差的大小对判断给定的问题是不是一个容易学习的问题是有意义的,但本质上不重要
- 测试误差反映了学习方法对未知的测试数据集的预测能力,是学习中的重要概念
- 显然,测试误差小的方法具有更好的预测能力,是更有效的方法
- 过拟合与模型选择
- 当假设空间含有不同复杂度的模型时就要面临模型选择的问题。如果在假设空间中 "存在" 模型,那么所选择的模型应该逼近真模型
- 如果一味追求提高对训练数据的预测能力,所选模型的复杂度则往往会比真模型更高,即 过拟合
- 过拟合:指学习时选择的模型所包含的参数过多,以至出现这一模型对已知数据预测的很好,但对未知数据预测得很差的现象
- 模型的选择旨在 避免过拟合,并提高模型的预测能力
- 当模型的复杂度增大时,训练误差会逐渐减小并趋于零,而测试误差会先减小,达到最小值后又增大。当选择模型的复杂度过大时,过拟合现象就会发生。
5. 正则化与交叉验证
1.正则化
- 模型选择的典型方法就是正则化,它是结构化风险最小化策略的实现,是在经验风险上加上一个正则化项或罚项。
- 正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大
- 正则化符号奥克姆剃刀原理
- 交叉验证
- 如果给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集切分成 训练集、验证集 和 测试集 三部分
- 但实际应用中数据是不充足的,交叉验证的基本思想就是 重复地使用数据,把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复地进行训练、测试 以及 模型选择
- 简单交叉验证:首先随机地将给的数据分成两个部分,一部分作为训练集,一部分作为测试集,然后用训练集在各个条件下训练模型,从而得到不同的模型,在测试集上评价各个模型的测试误差,选出测试误差最小的模型
- S折交叉验证:首先随机地将已给的数据切分成S个互不相交、大小相同的子集,然后利用S-1个子集的数据训练模型,利用余下的子集测试。将这个过程对可能的S种选择重复进行,最后选出S次评价中平均测试误差最小的模型
- 留一交叉验证:S折交叉验证的特殊情形是S=N,,往往在数据非常缺乏的情况下使用,N是给定数据集的容量
6. 泛化能力
- 泛化误差
- 学习方法的泛化能力是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上重要的性质
- 现实中采用最多的是通过测试误差来评价学习方法的泛化能力。但这种方法依赖于测试数据集,测试数据集是有限的,很可能由此得到的评价不可靠。
- 统计学习理论试图从理论上对学习方法的泛化能力进行分析
- 泛化误差:学到的模型对未知数据预测的误差,其反映了学习方法的泛化能力,泛化误差越小,方法更有效
- 泛化误差上界
- 学习方法的泛化能力分析往往是通过研究泛化误差的概率上界进行的,通过比较两种方法的泛化误差上界的大小来比较他们的优劣
- 性质:
- 它是样本容量的函数,当样本容量增加时,泛化上界趋于0
- 它是假设空间容量的函数,假设空间容量越大,模型就越难学,泛化上界越大
7. 生成模型与判别模型
- 生成模型
- 生成方法原理上由数据学习联合概率分布,然后求出条件概率分布作为预测的模型
- 因为模型表示了给定输入产生输出的生成关系,称为生成方法
- 特点:
- 所需要的数据量较大
- 生成方法可以还原出联合概率分布,判别方法不行
- 学习收敛速度更快,当样本容量增大时,学到的模型可以更快地收敛于真实模型
- 能够放映同类数据本身的相似度
- 当存在隐变量时,仍可以用
- 常见生成模型:朴素贝叶斯、隐马尔可夫模型
- 判别模型
- 判别方法由数据直接学习决策函数或条件概率分布作为预测的模型
- 判别方法关系的是对给定的输入,应该预测什么样的输出
- 特点:
- 所需要的样本容量少于生成模型
- 判别方法直接学习的是条件概率或决策函数,直接面对预测,往往学习准确率更高
- 可以简化学习问题
- 不可以反映数据本身的特征
- 常见的判别模型:k近邻、感知机、逻辑斯蒂回归、最大熵模型、支持向量机、提升方法、条件随机场
8. 监督学习的应用
- 分类问题
- 分类是监督学习的核心问题
- 当输出变量取有限个离散值时,预测问题便成为了分类问题
- 输入变量可以是离散的,也可以是连续的
- 分类器:监督学习从数据中学习一个分类模型或者分类决策函数
- 类别:可能的输出,分类的类别为多个时,称为多类分类问题
- 分类问题包括学习和分类两个过程
- 学习过程:根据已知的训练数据集利用有效的学习方法学习一个分类器
- 分类过程:利用学习的分类器对新的输入实例进行分类
- 一般评价分类器性能的指标 分类准确率:对于给定的测试数据集,分类器正确分类的样本数与总样本数之比
- 二分类常用:精确率 、 召回率 和 精确率与召回率的调和均值
- 常见分类方法:k近邻、感知机、朴素贝叶斯、决策树、决策列表、逻辑斯蒂回归、支持向量机、提升方法、贝叶斯网络、神经网络、Winnow
- 标注问题
- 可以认为标注问题是分类问题的一个推广,又是更复杂的结构预测问题的简单形式
- 标注问题的输入是一个观测序列,输出是一个标记序列或状态序列,它的目标在于学习一个模型,能够对观测序列给出标记序列作为预测
- 可能的标记个数是有限的,但其组合所成的标记序列的个数是依序列长度呈指数级增长的
- 标注问题分为 学习 和 标注 两个过程
- 评价指标:标注准确率,精确率 和 召回率
- 常见的标注方法:隐马尔可夫模型、条件随机场
- 回归问题
- 回归用于预测输入变量和输出变量之间的关系,特别是当输入变量的值发生改变时,输出变量的值随之改变
- 回归模型正是表示从输入变量到输出变量之间映射的函数,回归问题的学习等价于函数拟合,选择一条函数曲线使其很好地拟合已知数据且很好地预测未知数据
- 回归问题分为学习和预测两个过程
- 按照输入变量的个数 分为:一元回归 和 多元回归
- 按照输入变量和输出变量之间的关系的类型 分为:线性回归 和 非线性回归
最小二乘法拟合曲线
import numpy as np
import scipy as sp
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
%matplotlib inline
- ps: numpy.poly1d([1,2,3]) 生成 *
def real_func(x):
return np.sin(2*np.pi*x)
def fit_func(p,x):
f = np.poly1d(p)
return f(x)
def residuals_func(p,x,y):
ret = fit_func(p,x) - y
return ret
x = np.linspace(0,1,10)
x_points = np.linspace(0,1,1000)
y_ = real_func(x)
y = [np.random.normal(0,0.1)+y1 for y1 in y_]
def fitting(M=0):
p_init = np.random.rand(M + 1)
#最小化二乘法法
p_lsq = leastsq(residuals_func,p_init,args=(x,y))
print("Fitting Parameters:",p_lsq[0])
plt.plot(x_points,real_func(x_points),label='real')
plt.plot(x_points,fit_func(p_lsq[0],x_points),label="fitted curve")
plt.plot(x,y,'bo',label='noise')
plt.legend()
return p_lsq
leastsq源码
def leastsq(func, x0, args=(), Dfun=None, full_output=0,
col_deriv=0, ftol=1.49012e-8, xtol=1.49012e-8,
gtol=0.0, maxfev=0, epsfcn=None, factor=100, diag=None):
x0 = asarray(x0).flatten()
n = len(x0)
if not isinstance(args, tuple):
args = (args,)
shape, dtype = _check_func('leastsq', 'func', func, x0, args, n)
m = shape[0]
if n > m:
raise TypeError('Improper input: N=%s must not exceed M=%s' % (n, m))
if epsfcn is None:
epsfcn = finfo(dtype).eps
if Dfun is None:
if maxfev == 0:
maxfev = 200*(n + 1)
retval = _minpack._lmdif(func, x0, args, full_output, ftol, xtol,
gtol, maxfev, epsfcn, factor, diag)
else:
if col_deriv:
_check_func('leastsq', 'Dfun', Dfun, x0, args, n, (n, m))
else:
_check_func('leastsq', 'Dfun', Dfun, x0, args, n, (m, n))
if maxfev == 0:
maxfev = 100 * (n + 1)
retval = _minpack._lmder(func, Dfun, x0, args, full_output,
col_deriv, ftol, xtol, gtol, maxfev,
factor, diag)
errors = {0: ["Improper input parameters.", TypeError],
1: ["Both actual and predicted relative reductions "
"in the sum of squares\n are at most %f" % ftol, None],
2: ["The relative error between two consecutive "
"iterates is at most %f" % xtol, None],
3: ["Both actual and predicted relative reductions in "
"the sum of squares\n are at most %f and the "
"relative error between two consecutive "
"iterates is at \n most %f" % (ftol, xtol), None],
4: ["The cosine of the angle between func(x) and any "
"column of the\n Jacobian is at most %f in "
"absolute value" % gtol, None],
5: ["Number of calls to function has reached "
"maxfev = %d." % maxfev, ValueError],
6: ["ftol=%f is too small, no further reduction "
"in the sum of squares\n is possible." % ftol,
ValueError],
7: ["xtol=%f is too small, no further improvement in "
"the approximate\n solution is possible." % xtol,
ValueError],
8: ["gtol=%f is too small, func(x) is orthogonal to the "
"columns of\n the Jacobian to machine "
"precision." % gtol, ValueError]}
# The FORTRAN return value (possible return values are >= 0 and <= 8)
info = retval[-1]
if full_output:
cov_x = None
if info in LEASTSQ_SUCCESS:
perm = take(eye(n), retval[1]['ipvt'] - 1, 0)
r = triu(transpose(retval[1]['fjac'])[:n, :])
R = dot(r, perm)
try:
cov_x = inv(dot(transpose(R), R))
except (LinAlgError, ValueError):
pass
return (retval[0], cov_x) + retval[1:-1] + (errors[info][0], info)
else:
if info in LEASTSQ_FAILURE:
warnings.warn(errors[info][0], RuntimeWarning)
elif info == 0:
raise errors[info][1](errors[info][0])
return retval[0], info
p_lsq_0 = fitting(M=0)
Fitting Parameters: [-0.04029116]
p_lsq_1 = fitting(M=1)
Fitting Parameters: [-1.4418256 0.68062164]
p_lsq_3 = fitting(M=3)
Fitting Parameters: [ 2.02065593e+01 -3.02328212e+01 9.98143297e+00 -6.46664996e-03]
p_lsq_9 = fitting(M=9)
Fitting Parameters: [ 1.05209953e+04 -5.09004701e+04 1.04385566e+05 -1.17921330e+05
7.96542878e+04 -3.25573310e+04 7.73386499e+03 -9.67782446e+02
5.20583901e+01 5.43584931e-02]
第1章统计学习方法概论-习题
撰写人:胡锐锋-天国之影-Relph
github地址:https://github.com/datawhalechina/statistical-learning-method-solutions-manual
习题1.1
说明伯努利模型的极大似然估计以及贝叶斯估计中的统计学习方法三要素。伯努利模型是定义在取值为0与1的随机变量上的概率分布。假设观测到伯努利模型次独立的数据生成结果,其中次的结果为1,这时可以用极大似然估计或贝叶斯估计来估计结果为1的概率。
解答:
伯努利模型的极大似然估计以及贝叶斯估计中的统计学习方法三要素如下:
- 极大似然估计
模型:
策略: 最大化似然函数
算法: - 贝叶斯估计
模型:
策略: 求参数期望
算法:
伯努利模型的极大似然估计:
定义概率为,可得似然函数为:方程两边同时对求导,则:可解出的值为,显然
伯努利模型的贝叶斯估计:
定义概率为,在之间的取值是等概率的,因此先验概率密度函数,可得似然函数为:
根据似然函数和先验概率密度函数,可以求解的条件概率密度函数:所以的期望为:
习题1.2
通过经验风险最小化推导极大似然估计。证明模型是条件概率分布,当损失函数是对数损失函数时,经验风险最小化等价于极大似然估计。
解答:
假设模型的条件概率分布是,现推导当损失函数是对数损失函数时,极大似然估计等价于经验风险最小化。
极大似然估计的似然函数为:两边取对数:
反之,经验风险最小化等价于极大似然估计,亦可通过经验风险最小化推导极大似然估计。