Processing math: 100%

2.5 Local Methods in High Dimensions

curse of dimensionality

  • 输入在p维立方体中符合均匀分布,如果需要覆盖比例r的体积,需要每个维度上ep(r)=r1/p
    e10(0.01)=0.63,e10(0.1)=0.8
  • 输入在p维立方体中负荷均匀分布,p=1时,1000个点达到的采样密度
    在p=10时,需要100010个点才能达到
    需要的数据量随维度增加幂增长
  • 输入在p维单位球体中符合均匀分布,使用1-nearest neighbor预测0点的値
    假设有N个训练数据,则这些点到0点距离的中値为
    d(p,N)=(1(1/2)1/N)1/p
    d(10,500)0.52
    当维度高,数据量小时,最近邻离预测点往往比较远,所以得到的预测偏差大

证明:
p维,半径为r的球体体积为Vp(r)=πp/2Γ(1+p/2)rp
N个点都在半径为d的球体外的概率为对应部分体积之比p(D>d)=(1dp)N
p(D>d)=1/2d(p,N)=(1(1/2)1/N)1/p

  • 1000个训练数据均匀分布在[1,1]p中,真实YX的关系,符合以下函数:
    Y=f(X)=e8||x||2,使用1-nearest neighbor预测在0点的値
    进行bias–variance decomposition
    平均平方误差可以分成在训练集τ上的方差,以及模型本身的偏差平方

p = 10时,99%的训练集最近邻离0点的距离都大于0.5

证明:
p(D>0.5)=(1π10/2Γ(1+10/2)0.510210)10000.99757

import python
math.pow(1-math.pow(math.pi,5)/120/math.pow(4,10),1000)
figure2.7 **_bais占主要,因为最近邻离的远,函数中有距离项_**

每次训练集采样,得到的最近邻离0点距离差别不大

figure2.8 将函数换成$f(X)={(X_1+1)}^3/2$,Y値只与第一个维度相关

'''
2.5<Local Methods in High Dimensions>
page 25(figure2.7),26(figure2.8)
function2.7 is f(x)=e^{-8||x||^2}
function2.8 is f(x)=(x_1+1)^3/2
x is uniformally distributed in [-1,1]^p ,p is the dimension
MSE,VARIANCE,BAIS is about f(0)
so for function2.7 f0=1
       function2.8 f0=0.5
'''
import numpy as np
import matplotlib.pyplot as plt
def func2_7(X):
    return np.array([np.exp(-8*np.dot(i,i)) for i in X])
def func2_8(X):
    return np.array([np.power(i[0]+1,3)/2.0 for i in X])
def mse_var_bais(N,T,p,func1,f0):
    X = np.zeros((T,p))
    for i in range(T):
        dt = np.random.uniform(-1,1,N*p).reshape((N,p))
        st = [np.dot(j,j) for j in dt]
        ind = (st==np.min(st))
        #get the nearest neighbor
        X[i,:] = dt[ind,:]
    arr = func1(X)
    mse = np.mean(np.power((arr - f0),2))
    var = np.mean(np.power(arr - np.mean(arr),2))
    bais = np.power(np.mean(arr)-f0,2)
    return mse,var,bais
def getMSE_VAR_BAIS(N,T,f0,func1):
    VAR = []
    BAIS = []
    MSE = []
    for i in range(10):
        mse,var,bais=mse_var_bais(N,T,i+1,func1,f0)
        MSE.append(mse)
        VAR.append(var)
        BAIS.append(bais)
        print i+1
    return MSE,BAIS,VAR
#MSE,BAIS,VAR =getMSE_VAR_BAIS(N=1000,T=1000,f0=1,func1=func2_7)
MSE,BAIS,VAR =getMSE_VAR_BAIS(N=1000,T=1000,f0=0.5,func1=func2_8)
xa=[i+1 for i in range(10)]
plt.plot(xa,MSE,'ro-',label='MSE')
plt.plot(xa,BAIS,'bo-',label='sq. BAIS')
plt.plot(xa,VAR,'go-',label='VAR')
plt.legend(loc='upper left')
plt.show()  
posted @   porco  阅读(617)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· .NET Core GC压缩(compact_phase)底层原理浅谈
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp
点击右上角即可分享
微信分享提示