ESL读书笔记2b:bias-variance tradeoff之 knn在k=1情况下受目标函数影响的bias和variance

来源:互联网 发布:虫虫钢琴软件 编辑:程序博客网 时间:2024/05/20 02:51

本文为Element of Statistical Learning (ESL, https://web.stanford.edu/~hastie/ElemStatLearn/)的读书笔记。文中并不全是对原书的总结整理,很多内容是基于原书,笔者自己的演绎,不具有权威性,欢迎指教。
第二章框架请看:ESL读书笔记2a:监督学习框架总览(未完待续)


此部分主要讨论knn(k nearest neighbor, k近邻)在k=1情况下,bias, variance和error(MSE)随输入维度p的变化。

1. bias-variance拆分

首先对误差平方和(mean squared error)进行著名的bias-variance拆分如下:

MSE(x0)=Eτ[f(xo)y^0]2=Eτ[y^0Eτ(y^0)]2+[Eτ(y^0)f(x0)]2=Varτ(y^0)+Bias2(y^0)

其中τ为数据集/样本点集的随机变量;y^为预测输出,在knn(k=1)的情况下为离x0最近点的真值yf(x0)为目标函数,即理想值。可以看出误差由两部分组成:预测输出期待值与目标值的偏移量bias,预测输出本身的方差variance。

2. 最近邻随维度增加与原点距离的变化趋势

在分情况讨论之前,还需要声明一个结论:随着p增大,最近邻离原点越来越远。使用中值近似整体趋势,有如下结论:最近邻与原点距离的中值为(具体证明见ESL作业笔记2.3:均匀分布情况下最近邻距离的中值):

d(p,N)=(1121/N)1/p

书中还用一个一维到二维的例子说明:
distance example
黄色区域为只有X1一维情况下,最近邻到原点的距离;蓝色区域为二维情况下,最近邻到原点的距离。尽管在二维情况下黄色区域边缘的点距离原点很远,但投影到X1轴之后却很近。
对笔者来说,最直观的说法就是,维度增加,样本数不变,样本密度指数性减少,最近邻在原点附近的概率自然小了。

3. bias-variance的分情况讨论

既然是bias-variance tradeoff,这个名词就蕴含了几个假设:bias-variance常常难以同趋势变化,存在bias/variance主导误差的情况,tradeoff本身就是指在两者之间找一个平衡点。
这里举了两个例子,分别是bias和variance主导误差(MSE)的情况。
两个例子均满足条件:Suppose we have 1000 training examples xi generated uniformly on [1,1]p

3.1. 情况一:bias主导

bias example
函数以及数据集、算法的介绍详见图下注释。简单说,函数曲线如左上图所示;随输入维度上升,最近邻距离上升,如右上和左下图所示。如右下图所示,误差(MSE)随维度上升而上升,受bias主导。
理解
bias为预测输出的期望与目标值之间的差距,随着维度上升,最近邻距离增加,如函数曲线图所示,距离增加导致预测输出与目标输出越来越远,bias越来越大。
variance为实际预测输出与期望预测输出之间的方差,因为函数值是距离的函数,函数值的方差可以近似看做距离差异和相应位置函数值导数的乘积,而函数在距离很远的时候导数很小,所以乘起来得到的variance在维度数多的情况下很小。

3.2. 情况二:variance主导

variance example
与上例不同的是,这次函数值只受一维输入影响,其余维度输入的变化与函数值无关。如上图所示,误差的变化受variance主导。
理解
这里笔者曾经走进一个误区,认为点投影到x轴上到原点距离的概率不变,为均匀分布,那么最近邻投影到x轴上到原点距离的概率分布也不变。这是受了均匀分布字面意思的误导,均匀分布指的是单位体积内样本点个数相同,对于1维的情况是基于距离均匀分布计算的最近邻分布;对于2维的情况,在以原点为圆心的同心圆的边上的点成为最近邻的概率相同,而考虑圆上单位长度边投影到x轴上的长度是不等的,所以最近邻投影到x轴点到原点的距离并不是x轴的均匀分布。进一步,该分布应该是中间低两边高的概率分布,而且随维度增加逐渐向四周扩散。
E(X1)随p增大而增大, 固bias依然增加。
variance同样随p增加而增加,但增长趋势明显强于bias。考虑1维情况下,X1的变化与||X||相同;在二维情况下,X1的变化还要加上X2的扰动,即X1=||X||2X22。例如,在二维情况,同样的||X||X1的变化可以从+X1变化到X1

4. 代码验证

为了更好的理解情况二,写了几段MATLAB代码,进行分析。

4.1. 最近邻代码

生成N个样本,返回最近邻。

function x=nn1(N,p)%randomly initialize N samples with dimension equal to p%and return the nearest neibor X = random('unif',-1,1,[N,p]);%size(X)dist = diag(X*X');min_dist = min(dist);for i=1:N    if dist(i) == min_dist        index = i;    endendx = X(index,:);end

4.2. 最近邻分布

画出最近邻的大概分布,样本数为N,输入维度p,重复epoch次,使用柱状图近似分布。

function bar_x1(N,p,epoch)%plot the distribution of x1 with sample number N, dimension p, and epoch%number epoch.dist = zeros(epoch,1);for i = 1:epoch    nn = nn1(N,p);    dist(i) = nn(1);endhistogram(dist);

在p=1情况下,分布为:
bar-1
p=2的分布为:
bar-2
p=10的分布为:
bar-10
其中横坐标为X1,N=epoch=1000

4.3. 计算bias和variance

计算样本数为N,输入维度为p的情况下,bias、variance、error以及最近邻距离的均值方差。使用1000个epoch的结果对相应值做近似。

function [bias,variance,error,dist_mean,dist_var] = cal(N,p,epoch)%calculate knn(k=1) for epoch times, with function f(X) = 1/2(X_1+1)^3%return the average prediction, prediction variance, average MSE error,%the mean and variance of the distance of nearest neighbor on dimension 1predict = zeros(epoch,1);dists = zeros(epoch,1);for i = 1:epoch    nn = nn1(N,p);    predict(i) = 0.5*(nn(1)+1)^3;    dists(i) = nn(1);endbias = mean(predict) - 0.5;variance = var(predict);error = (predict - 0.5)'*(predict-0.5)/N;dist_mean = mean(dists);dist_var = var(dists);end 

其中函数为12(X1+1)3x0设为原点。

4.4. 观察bias、variance等随维度p的变化

function main(P)bias = zeros(P,1);variance = zeros(P,1);error = zeros(P,1);dist_mean = zeros(P,1);dist_var = zeros(P,1);for p = 1:P    [bias(p),variance(p),error(p),dist_mean(p),dist_var(p)] = cal(1000,p,1000);endfig1 = figureb = plot(bias);hold onv = plot(variance);e = plot(error);legend([b,v,e],'bias','variance','error');fig2 = figuredv = plot(dist_var);hold ondm = plot(dist_mean);legend([dv,dm],'mean','variance')

其中输入P为最大测试维度,这里使用10。
得到结果如下:
error-bias-variance
dist-mean-variance
可以看出variance主导误差变化,x1的方差增加明显大于均值。

原创粉丝点击