zoukankan      html  css  js  c++  java
  • 2.5 Local Methods in High Dimensions

    curse of dimensionality

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

    证明:
    p维,半径为r的球体体积为(V_p(r)=frac{pi^{p/2}}{Gamma(1+p/2)}r^p)
    N个点都在半径为d的球体外的概率为对应部分体积之比(p(D>d)={(1-d^p)}^N)
    (p(D>d)=1/2)(d(p,N)={(1-{(1/2)}^{1/N})}^{1/p})

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

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

    证明:
    (p(D>0.5)={left(1-frac{frac{pi^{10/2}}{Gamma(1+10/2)}{0.5}^{10}}{2^{10}} ight)}^{1000}≈0.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()  
    
  • 相关阅读:
    Swoole addProcess的使用
    《一个人的好天气》读后感
    AIStudio强化学习7日打卡学习体验
    PythonAI百度飞桨aistudio以及PaddlePaddle实践心得
    leetcode.929.UniqueEmailAddresses
    leetcode.852.PeakIndexinaMountainArray
    leetcode.66.PlusOne
    leetcode.657.JudgeRouteCircle
    leetcode.412.FizzBuzz
    图片切碎片脚本 python PIL库实践
  • 原文地址:https://www.cnblogs.com/porco/p/4717725.html
Copyright © 2011-2022 走看看