首先介绍统计学习的定义,研究对象和方法;而后叙述监督学习;接着统计学习方法的三要素:模型,策略和算法;介绍模型选择,包括正则化,交叉验证和学习的泛化能力;介绍生成模型与判别模型;最后介绍监督学习方法的应用:分类,标注和回归html
统计学习(statistical learning)是关于计算机基于数据构建几率统计模型并运用模型对数据进行预测与分析的一门学科,统计学习也称为统计机器学习(statistical machine learning)python
统计学习的主要特色是:web
统计学习的对象是数据(data),它从数据出发,提取数据的特征,抽象出数据的模型,发现数据中的知识,又回到对数据的分析与预测中去.数据时多样的,包括存在于计算机及网络上的各类数字,文字,图像,视频,音频数据以及它们的组合算法
统计学习用于对数据进行预测与分析,特别是对未知新数据进行预测与分析,对数据的预测可使计算机更加智能化网络
统计学习的方法是基于数据构建统计模型从而对数据进行预测与分析.统计学习方法包括模型的假设空间,模型选择的准则以及模型学习的算法,称其为统计学习方法的三要素,简称:模型(model),策略(strategy)和算法(algorithm)app
实现统计学习方法的步骤以下:dom
监督学习(supervised learning)的任务是学习一个模型,使模型可以对任意给定的输入,对其相应的输出作出一个好的预测机器学习
输入空间,特征空间与输出空间svg
在监督学习中,将输入与输出全部可能取值的集合分别称为输入空间(input space)与输出空间(output space),输入与输出空间能够是有限元素的集合,也能够是整个欧式距离函数
每一个具体的输入是一个实例(instance),一般由特征向量(feature vector)表示,这时,全部特征向量存在的空间称为特征空间(feature space)
向量均为列向量,输入实例x的特征向量记做:
表示x的第i个特征,请注意,
与
不一样,用
表示多个输入变量中的第i个,即:
监督学习从训练数据(training data)集合中学习模型,对测试数据(test data)进行预测,训练数据的输入(或特征向量)与输出对组成,训练集一般表示为:
监督学习利用训练数据集学习一个模型,再用模型对测试样本集进行预测(prediction)
from IPython.display import Image Image(filename="./data/1_1.png",width=500)
统计学习方法都是由模型,策略和算法构成的,即统计学习方法由三要素构成,能够简单地表示为:
方法=模型+策略+算法
在监督学习过程当中,模型就是所要学习的条件几率分布或决策几率
实现引入损失函数与风险函数的概念,损失函数度量模型一次预测的好坏,风险函数度量平均意义下模型预测的好坏
损失函数和风险函数
监督学习问题是在假设空间
中选取模型f做为决策函数,对于给定的输入X,由f(X)给出相应的输出Y,这个输出的预测值f(X)与真实值Y可能一致也可能不一致,用一个损失函数(loss function)或代价函数(cost function)来度量预测错误的程度,损失函数是f(X)和Y的非负实值函数,记做:
统计学习经常使用的损失函数有如下几种:
损失函数越小,模型就越好.因为模型的输入,输出(X,Y)是随机变量,遵循联合分布P(X,Y),因此损失函数的指望是:
这是理论上模型f(X)关于联合分布P(X,Y)的平均意义下的损失,称为风险函数(risk function)或指望损失(expected loss)
算法是指学习模型的具体计算方法,统计学习基于训练数据集,根据学习策略,从假设空间中选择最优模型,最后须要考虑用什么样的计算方法求解最优模型
统计学习的目的是使学到的模型不只对已知数据并且未知数据都能有很好的预测能力,不一样的学习方法会给出不一样的模型.当损失函数给定时,基于损失函数的模型的训练偏差(training error)和模型的测试偏差(test error)就天然成为学习方法评估的标准
假设学习到的模型是,训练偏差是模型
关于训练数据集的平均损失:
其中N是训练样本容量
测试偏差是模型关于测试数据集的平均损失:
其中是测试样本容量
例如,当损失函数是0-1损失时,测试偏差就变成了常见的测试数据集上的偏差率(error rate):
这里I是指示函数(indicator function),即时为1,不然为0
相应地,常见的测试数据集上的准确率(accuracy)为:
显然:
测试偏差反映了学习方法对未知的测试数据集的预测能力.显然测试偏差小的方法具备更好的预测能力,一般将学习方法对未知数据的预测能力称为泛化能力(generalization ability)
当假设空间含有不一样复杂度的模型时,就要面临模型选择(model selection)的问题.具体来说,所选择的模型要与真模型的参数个数相同,所选择的模型的参数向量与模型的参数向量相近
若是一味追求提升对训练数据的预测能力,所选模型的复杂度则每每会比真模型更高,这种现象称为过拟合(over-fitting).过拟合是指学习是选择的模型所包含的参数过多,以致于出现这一模型对已知数据预测得很好,但对未知数据预测不好的现象,能够说模型选择旨在避免过拟合并提升模型的预测能力
下面,以多项式函数拟合问题为例,说明过拟合与模型选择,这是一个回归问题:
假设给定一个训练数据集:
式中x是单变量输入,是M+1个参数
解决这个问题的方法能够是:首先肯定模型的复杂度,即肯定多项式的次数;而后在给定的模型复杂度下按照经验风险最小化的策略求解参数,即多项式的参数.具体地,求如下经验风险最下化:
这是一个简单的最优化问题,将模型与训练数据代入上式:
对
求偏导数并令其为0,可得:
因而求得拟合多项式系数:
%matplotlib inline import numpy as np import matplotlib.pyplot as plt import scipy as sp from scipy.optimize import leastsq
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
p_lsq_0=fitting(M=0)
Fitting Parameters: [0.00045968]
p_lsq_1=fitting(M=1)
Fitting Parameters: [-1.31770047 0.65930992]
p_lsq_1=fitting(M=3)
Fitting Parameters: [ 22.1088372 -32.88036488 10.98233944 -0.06303643]
p_lsq_1=fitting(M=9)
Fitting Parameters: [-1.44212173e+04 6.23491084e+04 -1.12265979e+05 1.08933199e+05 -6.15084724e+04 2.03467575e+04 -3.75406545e+03 3.24046465e+02 -3.23017791e+00 -4.08582404e-04]
若是M=0,多项式曲线是一个常数,数据拟合效果不好;若是M=1,多项式曲线是一条直线,数据拟合效果也不好;相反若是M=9,多项式曲线经过每一个数据点,训练偏差为0,效果最好.可是由于训练数据自己存在噪声,这种拟合曲线对未知数据的预测能力每每并非最好的,在实际学习中并不可取,这时过拟合现象就会发生
from IPython.display import Image Image(filename="./data/1_2.png",width=500)
模型选择的典型方法是正则化(regulartion).正则化的结构风险最小化策略的实现.是在检验风险上加一个正则化项(regularizer)或罚项(penalty term).正则化项通常是模型复杂度的单调递增函数,模型越复杂,正则化值就越大.好比正则化项能够是模型参数向量的范数
正则化通常具备以下形式:
其中:第1项是经验风险,第2项是正则化项,≥0为调整二者之间关系的系数
正则化项能够取不一样的形式.例如回归问题中,损失函数是平方损失,正则化项能够是参数向量的L范数:
这里,||w||表示参数向量w的L范数
正则化项也能够是参数向量的
范数:
这里,||w||_表示参数向量w的L_范数
正则化的做用是选择经验风险与模型复杂度同时较小的模型
若是给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集切分红三部分,分别是训练集(train set),验证集(validation set)和测试集(test set).训练集用来训练模型,验证集用于模型的选择,而测试集用于最终对学习方法的评估,在学习到的不一样复杂度的模型中,选择对验证集有最小预测偏差的模型.因为验证集有足够的数据,用它对模型进行选择也是有效的
简单交叉验证方法是:首先随机地将已给数据分为两部分,一部分做为训练集,另外一部分做为测试集;而后在测试集上评价各个模型的测试偏差,选出测试吾侪最小的模型
应用最多的是S折交叉验证(S-fold cross validation),方法以下:首先随机地将已给数据切分为S个互不相交的大小相同的子集;而后利用S-1个子集的数据训练模型,利用余下的子集测试模型;将这一过程可能的S种选择重复进行;最后选出S次评测中平均测试偏差最小的模型
学习方法的泛化能力(generalization ability)是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上重要的性质
首先给出泛化偏差的定义,若是学到的模型是
,那么用这个模型对未知数据预测的偏差即为泛化偏差(generalization error)
泛化偏差反映了学习方法的泛化能力,若是一种方法学习的模型比另外一种方法学习的模型具备更小的泛化偏差,那么这种方法就更有效
对于二分类问题经常使用的评价指标是精确率(precision)与召回率(recall):
精确率定义为:
召回率定义为: