输入空间、特征空间与输出空间
在监督学习中,将输入与输出所有可能的取值的集合分别称为 input space 和 output space。
每个具体的输入是一个 实例(instance),通常由 特征向量(feature vector),所有的 feature vecture 存在的空间称为 feature space . 特征空间的每一维对应于一个特征。输入实例x的特征向量记作:
x = ( x ( 1 ) , x ( 2 ) , . . . , x ( i ) , . . . , x ( n ) ) T x = (x^{(1)},x^{(2)},...,x^{(i)},...,x^{(n)})^T x=(x(1),x(2),...,x(i),...,x(n))T
训练集:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T = \{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)}
联合概率分布
监督学习假设输入与输出的随机变量 X 和 Y 遵循联合概率分布 P ( X , Y ) P(X,Y) P(X,Y)。 P ( X , Y ) P(X,Y) P(X,Y)表示分布函数,或分布密度函数。
假设空间
监督学习的目的在于学习一个由输入到输出的映射,这个映射的集合就是假设空间(hypothesis space).
监督学习的模型可以是概率模型或非概率模型,由条件概率分布 P ( X , Y ) P(X,Y) P(X,Y)或决策函数(decision function) Y = f ( x ) Y=f(x) Y=f(x)表示。
统计学习方法都是由模型、策略和算法构成。
方法 = 模型 + 策略 + 算法
在 supervised learning 中,模型就是所要学习的条件概率分布或决策函数。模型的hypothesis space包含所有可能的条件概率分布或决策函数。
R e x p ( f ) = E P [ L ( Y , f ( x ) ) ] = ∫ x ∗ y L ( y , f ( x ) ) P ( x , y ) d x d y R_{exp}(f)=E_P[L(Y,f(x))]=\int_{x*y} L(y,f(x))P(x,y)dxdy Rexp(f)=EP[L(Y,f(x))]=∫x∗yL(y,f(x))P(x,y)dxdy
这个是理论上模型f(x)关于联合分布P(X,Y)的平均意义下的损失,称为风险函数(risk function)
学习的目标就是选择期望风险最小的模型.由于联合分布P(X,Y)是未知的, R e x p ( f ) R_{exp}(f) Rexp(f)不能直接计算,实际上,如果知道联合分布 P ( X , Y ) P(X,Y) P(X,Y)就可以求出 P ( Y ∣ X ) P(Y|X) P(Y∣X),不需要学习。正因为不知道联合概率分布,所以才需要学习。这样一来,一方面根据期望风险最小学习模型要用到联合分布,另外一方面联合分布位置,所以监督学习是一个 病态问题(ill-formed problem)
模型 f ( x ) f(x) f(x) 关于训练数据集的平均损失为 经验风险(empirical risk) 或 经验损失 (empirical loss),记作 R e m p R_{emp} Remp:
R e m p ( f ) = 1 / N ∑ i = 1 N L ( y i , f ( x i ) ) R_{emp}(f)=1/N\sum_{i=1}^NL(y_i,f(x_i)) Remp(f)=1/Ni=1∑NL(yi,f(xi))
期望风险 R e x p ( f ) R_{exp}(f) Rexp(f) 是模型关于联合分布的期望损失,经验风险 R e m p ( f ) R_{emp}(f) Remp(f) 是模型关于训练样本集的平均损失, 根据 大数定律 ,当样本容量N趋于无穷时,经验风险 R e m p ( f ) R_{emp}(f) Remp(f) (实际抛硬币的结果)趋于期望风险 R e x p ( f ) R_{exp}(f) Rexp(f) (概率算出的)。所以用经验风险估计期望风险,但是样本有限,需要对经验风险进行一定的校正。这就关系到监督学习的两个基本策略:经验风险最小化 和 结构风险最小化。
算法是指学习模型的具体计算方法,统计学习基于训练数据集,根据学习策略,从假设空间中选择最优模型,最后考虑用什么样的计算方法求解最优模型。
这时, 统计学习问题归结为最优化问题, 统计学习的算法成为求解最优化问题的算法。
统计学习的目的是使学到的模型不仅对 已知数据 而且对 未知数据 都能有很好的预测能力。不同的学习方法会给出不同的模型,当损失函数给定时,基于 损失函数 的模型的 训练误差(tranning error) 和模型的 测试误差(test error) 成为学习方法评估的标准。
假设学习到的模型是 Y = f ^ ( X ) Y=\widehat{f}(X) Y=f (X), 训练误差 是模型 Y = f ^ ( X ) Y=\widehat{f}(X) Y=f (X) 关于训练数据集的 平均误差:
R e m p ( f ^ ) = 1 / N ∑ i = 1 N L ( y i , f ^ ( x i ) ) R_{emp}(\widehat{f})=1/N\sum_{i=1}^NL(y_i,\widehat{f}(x_i)) Remp(f )=1/Ni=1∑NL(yi,f (xi))
其中N是样本容量。
测试误差 是模型 Y = f ^ ( X ) Y=\widehat{f}(X) Y=f (X) 关于 测试数据集的平均误差:
e t e s t = 1 / N ′ ∑ i = 1 N L ( y i , f ^ ( x i ) ) e_test = 1/N'\sum_{i=1}^NL(y_i,\widehat{f}(x_i)) etest=1/N′i=1∑NL(yi,f (xi))
其中N’是测试样本容量。
训练误差的大小,对判断给定的问题是不是一个容易学习的问题是有意义的,但本质上不重要。测试误差反映了学习方法对未知的测试数据集的预测能力,是学习中的重要概念。显然,给定两种学习方法, 测试误差小的方法具有更好的预测能力,是更有效的方法。 通常将学习方法对未知数据的预测能力称为泛化能力(generalization ability)。
过拟合是指学习时选择的模型所包含的参数过多,以致于出现这一模型对已知数据预测得很好,但对未知数据预测得很差的现象。
例子:假设给一个训练数据集:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . } T=\{(x_1,y_1),(x_2,y_2)...\} T={(x1,y1),(x2,y2)...}
假定给了10个数据点,用0~9次多项式函数对数据进行拟合,设M次多项式为:
f M ( x , w ) = ∑ j = 0 M w j x j f_M(x,w)=\sum_{j=0}^Mw_jx^j fM(x,w)=j=0∑Mwjxj
在多项式函数拟合中,随着多项式次数(模型复杂度)的增加,会过拟合。
模型选择的典型方法是正则化(regularization),正则化是 结构风险最小化 策略的实现,是在 经验风险 上加上 一个 正则化项 或 罚项。正则化一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大,可以是模型参数向量的范数。
正则化形式:
R s r m ( f ) = 1 / N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) R_{srm}(f)=1/N\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f) Rsrm(f)=1/Ni=1∑NL(yi,f(xi))+λJ(f)
正则化项可以是 L 2 L_2 L2范数:
J ( f ) = λ / 2 ∥ w ∥ 2 J(f)= \lambda/2 \parallel w \parallel^2 J(f)=λ/2∥w∥2
∥ w ∥ 2 \parallel w \parallel^2 ∥w∥2表示 L 2 L_2 L2 范数, ∥ w ∥ 1 \parallel w \parallel_1 ∥w∥1表示 L 1 L_1 L1范数。
从贝叶斯估计的角度来看,正则化项对应于模型的 先验概率。
PS1: 范数
L0范数:度量向量中非零元素的个数
L1范数: ∣ w j ∣ |w_j| ∣wj∣
L2范数: ∑ j = 0 N w j 2 \sqrt{\sum_{j=0}^{N}w_j^2} ∑j=0Nwj2
PS2:
先验概率 是指根据以往经验和分析得到的概率,如全概率公式,它往往作为"由因求果"问题中的"因"出现.
后验概率 是指依据得到"结果"信息所计算出的最有可能是那种事件发生,如贝叶斯公式中的,是"执果寻因"问题中的"因".
考虑一个问题:P(A|B)是在B发生的情况下A发生的可能性。
如果给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集切分成三部分,分别为训练集(training set)、验证集(validation set)和测试集(test set)。 训练集用来训练模型,验证集用于模型的选择,而测试集用于最终对学习方法的评估。
学习方法的泛化能力(generalization ability)是指由该方法学习到的模型对未知数据的预测能力,因为测试数据集是有限的,可能评价结果不可靠。
泛化误差的定义:学习到的模型是 f ^ \widehat{f} f , 那么用这个模型对未知数据预测的误差即为 泛化误差(generalization error)
监督学习的任务就是学习一个模型,监督学习的方法可以分为 生成方法(generative approach) 和 判别方法(generative model)和判别模型(discriminnative model)。
生成方法:朴素贝叶斯法和隐马尔可夫模型
判别方法:k近邻法、 感知机、 决策树、 逻辑斯谛回归模型、 最大熵模型、 支持向量机、 提升方法和条件随机场
在监督学习中,当输出变量Y取有限个离散值时,预测问题便成为分类问题,监督学习从数据中学习一个分类模型,称为分类器(classifier),
在所有无偏的线性估计类中,最小二乘法时方差最小的。
对于数据 ( x i , y i ) ( i = 1 , 2 , 3... m ) (x_i,y_i)(i=1,2,3...m) (xi,yi)(i=1,2,3...m)
拟合出函数h(x),有误差,即残差: r i = h ( x i ) − y i r_i=h(x_i)-y_i ri=h(xi)−yi
此时 L 2 L_2 L2范数(残差平方和)最小时,拟合程度高。
设 H ( x ) H(x) H(x)为: H ( x ) = w 0 + w 1 x + w 2 x 2 + . . . w n x n H(x)=w_0+w_1x+w_2x^2+...w_nx^n H(x)=w0+w1x+w2x2+...wnxn
w ( w 0 , w 1 , w 2 . . . w n ) 为 参 数 w(w_0,w_1,w_2...w_n)为参数 w(w0,w1,w2...wn)为参数
最小二乘法就是找到一组w(w_0,w_1,w_2…w_n)使得 ∑ i = 1 n ( h ( x i − y i ) 2 \sum_{i=1}^n(h(x_i-y_i)^2 ∑i=1n(h(xi−yi)2最小。
比如用目标函数 y = s i n 2 π x y=sin2\pi x y=sin2πx,加上一个正态分布的噪音干扰,用多项式去拟合。
import numpy as np
import scipy as scipy
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
#目标函数
def real_func(x):
return np.sin(2*np.pi*x)
#多项式
def fit_func(p,x):
f = np.poly1d(p) #np.poly1d([1,2,3])生成1x^2+2x+3
return f(x) #f(x)是求x = num时的输出值
#残差
def residuals_func(p,x,y):
ret = fit_func(p,x) - y
return ret
#十个点
x = np.linspace(0,1,10) #linspace产生等差数列
x_points = np.linspace(0,1,100)
#加上正态分布噪音的目标函数的值
y_ = real_func(x)
y = [np.random.normal(0,0.1) + y1 for y1 in y_]
# normal正态分布
def fitting(M=0):
# n为多项式的系数
# 随机初始化多项式参数
#返回一组服从“0~1”均匀分布的随机样本值,随机样本值取值范围
#是[0,1),不包括1
p_init = np.random.rand(M+1)
#最小二乘法,第一个放入残差函数,第二个放入拟合方程的初始系数
#将其余参数打包到args中
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()
plt.show()
return p_lsq
#M=0
p_lsq_0 = fitting(M=0)
#M=1
p_lsq_1 = fitting(M=1)
#M=3
p_lsq_3 = fitting(M=3)
#M=9
p_lsq_9 = fitting(M=9)
##############################################################
#正则化
#结果显示过拟合,引入正则项,降低过拟合,回归问题中,正则化可以是:
#L1:regularization *abs(p)
#L2: 0.5 * regularization * np.square(p)
regularization = 0.0001
def residuals_func_regularization(p,x,y):
ret = fit_func(p,x) - y
ret = np.append(ret, np.sqrt(0.5 * regularization* np.square(p)))
return ret
#最小二乘法,加正则项
p_init = np.random.rand(9+1)
p_lsq_regularization = leastsq(
residuals_func_regularization,p_init,args=(x,y))
plt.plot(x_points, real_func(x_points), label='real')
plt.plot(x_points, fit_func(p_lsq_9[0], x_points), label='fitted curve')
plt.plot(x_points, fit_func(p_lsq_regularization[0], x_points), label='regularization')
plt.plot(x, y, 'bo', label='noise')
plt.legend()
plt.show()