统计学习方法概论
2019-01-22 本文已影响1人
千与千与
统计学习方法概论
- 统计学习
- 监督学习
- 统计学习三要素
- 模型评估与模型选择
- 泛化能力
- 生成模型与判别模型
- 分类问题
- 标注问题
- 回归问题
最小二乘法拟合曲线
统计学习方法的三要素:模型、策略和算法;
统计学习
- 统计学习(statistical learning)是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。统计学习也称为统计机器学习(statistical machine learning)。
- 赫尔伯特·西蒙(Herbert A. Simon)曾对“学习”给出以下定义:“如果一个系统能够通过执行某个过程改进它的性能,这就是学习。”按照这一观点,统计学习就是计算机系统通过运用数据及统计方法提高系统性能的机器学习。现在,当人们提及机器学习时,往往是指统计机器学习。
- 统计学习的对象是数据(data)。它从数据出发,提取数据的特征,抽象出数据的模型,发现数据中的知识,又回到对数据的分析与预测中去。
提取数据特征、抽象数据模型、发现数据知识、数据分析预测
- 统计学习关于数据的基本
假设是同类数据具有一定的统计规律性
,这是统计学习的前提。
- 数据分为由连续变量和离散变量表示的类型。
- 统计学习用于对数据进行预测与分析,特别是对未知新数据进行预测与分析。对数据的预测可以使计算机更加智能化,或者说使计算机的某些性能得到提高;对数据的分析可以让人们获取新的知识,给人们带来新的发现。
- 从给定的、有限的、用于学习的训练数据(training data)集合出发,假设数据是
独立同分布
产生的;并且假设要学习的模型属于某个函数的集合,称为假设空间
(hypothesis space);应用某个评价准则(evaluation criterion),从假设空间中选取一个最优的模型,使它对已知训练数据及未知测试数据(test data)在给定的评价准则下有最优的预测;最优模型的选取由算法实现。这样,统计学习方法包括模型的假设空间、模型选择的准则以及模型学习的算法,称其为统计学习方法的三要素,简称为模型(model)、策略(strategy)和算法(algorithm)。
独立同分布:在概率统计理论中,指随机过程中,任何时刻的取值都为随机变量,如果这些随机变量服从同一分布,并且互相独立,那么这些随机变量是独立同分布。
- 现实中的数据不但规模大,而且
常常具有不确定性
,统计学习往往是处理这类数据最强有力的工具。
监督学习
- 在监督学习中,将输入与输出所有可能取值的集合分别称为输入空间(input space)与输出空间(output space)。输入与输出空间可以是有限元素的集合,也可以是整个欧氏空间。输入空间与输出空间可以是同一个空间,也可以是不同的空间;但
通常输出空间远远小于输入空间
。
- 每个具体的输入是一个实例(instance),通常由
特征向量
(feature vector)表示。这时,所有特征向量存在的空间称为特征空间
(feature space)。特征空间的每一维对应于一个特征。有时输入空间与特征空间为相同的空间,对它们不予区分;有时输入空间与特征空间为不同的空间,将实例从输入空间映射到特征空间。模型实际上都是定义在特征空间上的。
- 人们根据输入、输出变量的不同类型,对预测任务给予不同的名称:输入变量与输出变量均为连续变量的预测问题称为回归问题;输出变量为有限个离散变量的预测问题称为分类问题;输入变量与输出变量均为变量序列的预测问题称为标注问题。
- 监督学习
假设输入与输出的随机变量X和Y遵循联合概率分布P(X,Y)。
- 监督学习的模型可以是概率模型或非概率模型,由条件概率分布 或决策函数(decision function) 表示,随具体学习方法而定。
统计学习三要素
- 在监督学习过程中,模型就是所要学习的条件概率分布或决策函数。模型的假设空间(hypothesis space)包含所有可能的条件概率分布或决策函数。
- 统计学习的目标在于从假设空间中选取最优模型。
- 损失函数度量模型一次预测的好坏,风险函数度量平均意义下模型预测的好坏。
- 损失函数是f(X)和Y的非负实值函数,记作 。
常用损失函数:
0-1 损失函数
平方损失函数
绝对损失函数
对数损失函数或对数似然损失函数
- 损失函数值越小,模型就越好。由于模型的输入、输出(X,Y)是随机变量,遵循联合分布 ,所以损失函数的期望是:
这是理论上模型 关于联合分布 的平均意义下的损失,称为风险函数
(risk function)或期望损失
(expected loss)。
- 给定训练数据集 ,模型 关于训练数据集的平均损失称为
经验风险
(empirical risk)或经验损失
(empirical loss),记作 :
- 期望风险 是模型关于联合分布的
期望损失
,经验风险 是模型关于训练样本集的平均损失
。
- 根据大数定律,当样本容量N趋于无穷时,经验风险 趋于期望风险 。所以一个很自然的想法是
用经验风险估计期望风险
。但是,由于现实中训练样本数目有限,甚至很小,所以用经验风险估计期望风险常常并不理想,要对经验风险进行一定的矫正。这就关系到监督学习的两个基本策略:经验风险最小化和结构风险最小化。
- 经验风险最小化(empirical risk minimization,ERM)的策略认为,经验风险最小的模型是最优的模型。根据这一策略,按照经验风险最小化求最优模型就是求解最优化问题:
其中, 是假设空间。
- 当模型是条件概率分布,损失函数是对数损失函数时,经验风险最小化就等价于
极大似然估计
。
- 结构风险最小化(structural risk minimization,SRM)是为了防止过拟合而提出来的策略。结构风险最小化等价于正则化(regularization)。
结构风险在经验风险上加上表示模型复杂度的正则化项(regularizer)或罚项(penalty term)。
- 在假设空间、损失函数以及训练数据集确定的情况下,结构风险的定义是:
其中 为模型的复杂度,是定义在假设空间上的泛函。模型 越复杂,复杂度 就越大;反之,模型 越简单,复杂度 就越小。也就是说,复杂度表示了对复杂模型的惩罚
。 是系数,用以权衡经验风险和模型复杂度。结构风险小需要经验风险与模型复杂度同时小。结构风险小的模型往往对训练数据以及未知的测试数据都有较好的预测。
- 结构风险最小化的策略认为结构风险最小的模型是最优的模型。所以求最优模型,就是求解最优化问题:
模型评估与模型选择
- 假设学习到的模型是 ,训练误差是模型关于训练数据集的平均损失:
测试误差是模型关于测试数据集的平均损失:
其中,其中 是训练样本容量, 是测试样本容量。
-
训练误差
的大小,对判断给定的问题是不是一个容易学习的问题是有意义的,但本质上不重要。测试误差
反映了学习方法对未知的测试数据集的预测能力,是学习中的重要概念。
- 通常将学习方法对未知数据的预测能力称为
泛化能力
(generalization ability)。
-
如果一味追求提高对训练数据的预测能力,所选模型的复杂度则往往会比真模型更高。这种现象称为过拟合(over-fitting)。
过拟合是指学习时选择的模型所包含的参数过多
,以致于出现这一模型对已知数据预测得很好,但对未知数据预测得很差的现象。可以说模型选择旨在避免过拟合并提高模型的预测能力。
-
模型选择的典型方法是正则化(regularization)。
正则化
是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或罚项(penalty term)。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。正则化一般具有如下形式:
例如,回归问题中,损失函数是平方损失,正则化项可以是参数向量的L2范数:
其中, 表示向量 的 L2 范数。
- 正则化符合
奥卡姆剃刀(Occam's razor)原理
。奥卡姆剃刀原理应用于模型选择时变为以下想法:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较小的先验概率,简单的模型有较大的先验概率。
-
另一种常用的模型选择方法是交叉验证(cross validation)。
-
简单交叉验证
方法如下:首先随机地将已给数据分为两部分,一部分作为训练集,另一部分作为测试集(例如,70%的数据为训练集,30%的数据为测试集);然后用训练集在各种条件下(例如,不同的参数个数)训练模型,从而得到不同的模型;在测试集上评价各个模型的测试误差,选出测试误差最小的模型。
-
S折交叉验证
(S-fold cross validation)方法如下:首先随机地将已给数据切分为S个互不相交的大小相同的子集;然后利用S-1个子集的数据训练模型,利用余下的子集测试模型;将这一过程对可能的S种选择重复进行;最后选出S次评测中平均测试误差最小的模型。
-
留一交叉验证
(leave-one-out cross validation)是S折交叉验证的特殊情形,即 S=N。往往在数据缺乏的情况下使用。
泛化能力
- 泛化误差反映了学习方法的泛化能力,如果一种方法学习的模型比另一种方法学习的模型具有更小的泛化误差,那么这种方法就更有效。事实上,
泛化误差就是所学习到的模型的期望风险
。
生成模型与判别模型
- 监督学习方法又可以分为生成方法(generative approach)和判别方法(discriminative approach)。所学到的模型分别称为生成模型(generative model)和判别模型(discriminative model)。
- 生成方法由数据学习联合概率分布 ,然后求出条件概率分布 作为预测的模型。这样的方法之所以称为生成方法,是因为模型表示了给定输入X产生输出Y的生成关系。典型的生成模型有:朴素贝叶斯法和隐马尔可夫模型。
- 判别方法由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。判别方法关心的是对给定的输入X,应该预测什么样的输出Y。典型的判别模型包括:k近邻法、感知机、决策树、逻辑斯谛回归模型、最大熵模型、支持向量机、提升方法和条件随机场等。
- 生成方法的特点:生成方法可以还原出联合概率分布 ,而判别方法则不能;生成方法的学习收敛速度更快,即当样本容量增加的时候,学到的模型可以更快地收敛于真实模型;当存在隐变量时,仍可以用生成方法学习,此时判别方法就不能用。
- 判别方法的特点:判别方法直接学习的是条件概率 或决策函数 ,直接面对预测,往往学习的准确率更高;由于直接学习 或 ,可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。
分类问题
- 在监督学习中,当输出变量Y取有限个离散值时,预测问题便成为分类问题。这时,输入变量X可以是离散的,也可以是连续的。
- 评价分类器性能的指标一般是分类
准确率
(accuracy),其定义是:对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。也就是损失函数是0-1损失时测试数据集上的准确率。
- 对于二类分类问题常用的评价指标是
精确率
(precision)与召回率
(recall)。通常以关注的类为正类,其他类为负类,分类器在测试数据集上的预测或正确或不正确,4种情况出现的总数分别记作:
TP——将正类预测为正类数;
FN——将正类预测为负类数;
FP——将负类预测为正类数;
TN——将负类预测为负类数。
精确率定义为:
召回率定义为:
其中,精确率也称查准率,召回率也称查全率。
-
值,是精确率和召回率的调和均值,即
精确率和召回率都高时, 值也会高。
标注问题
- 标注(tagging)也是一个监督学习问题。可以认为标注问题是分类问题的一个推广,标注问题又是更复杂的结构预测(structure prediction)问题的简单形式。标注问题的输入是一个观测序列,输出是一个标记序列或状态序列。标注问题的目标在于学习一个模型,使它能够对观测序列给出标记序列作为预测。注意,可能的标记个数是有限的,但其组合所成的标记序列的个数是依序列长度呈指数级增长的。
回归问题
- 回归用于预测输入变量(自变量)和输出变量(因变量)之间的关系,特别是当输入变量的值发生变化时,输出变量的值随之发生的变化。回归模型正是表示从输入变量到输出变量之间映射的函数。回归问题的学习等价于函数拟合:选择一条函数曲线使其很好地拟合已知数据且很好地预测未知数据。
- 回归学习最常用的损失函数是平方损失函数,在此情况下,回归问题可以由著名的最小二乘法(least squares)求解。
最小二乘法拟合曲线
- 给定数据 ,拟合出函数 ,则有误差(残差) ,此时误差平方和最小时, 与 的相似度最高。
- 一般 为 n 次多项式,即 ,最小二乘法就是找出一组 使误差平方和最小,即
- 假设目标函数为 ,再加上一个正太分布的噪音干扰,下面将演示如何用多项式进行拟合。
import numpy as np
import scipy as sp
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
# 目标函数
def target_function(x):
return np.sin(2*np.pi*x)
# 多项式函数
def fitting_function(parms, x):
# numpy.poly1d([1,2,3]) 生成 1x^2+2x^1+3
return np.poly1d(parms)(x)
# 误差函数
def residuals_function(parms, x, y):
return fitting_function(parms, x) - y
# 误差函数加入正则化
def residuals_function_with_regularization(parms, x, y):
res = fitting_function(parms, x) - y
regularizer = np.sqrt(0.5 * 0.001 * np.square(parms))
return np.append(res, regularizer)
# 拟合过程
def fitting(m=0, withr=False):
# m 为多项式的次方
# 生成 x 点
x_0 = np.linspace(0, 1, 10)
x_1 = np.linspace(0, 1, 1000)
# 计算 y 值,并加入正态分布噪音
y_0 = [np.random.normal(0, 0.1) + yy for yy in target_function(x_0)]
# 初始化多项式参数
parms = np.random.rand(m+1)
# 最小二乘法计算拟合函数参数
if not withr:
parms_lsq = leastsq(residuals_function, parms, args=(x_0, y_0))
else:
parms_lsq = leastsq(residuals_function_with_regularization, parms, args=(x_0, y_0))
# 可视化
plt.plot(x_1, target_function(x_1), label='target')
plt.plot(x_1, fitting_function(parms_lsq[0], x_1), label='fitting')
plt.plot(x_0, y_0, 'bo', label='noise')
plt.legend()
当参数等于 9 时,多项式曲线通过了每个数据点,但是造成了过拟合。因此需要引入正则化项(regularizer),降低过拟合。回归问题中,损失函数是平方损失,正则化可以是参数向量的 L2 范数,也可以是 L1 范数。