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

    平均平方误差可以分成在训练集\(\tau\)上的方差,以及模型本身的偏差平方

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}}\right)}^{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()

2.5 Local Methods in High Dimensions的更多相关文章

  1. 26 THINGS I LEARNED IN THE DEEP LEARNING SUMMER SCHOOL

    26 THINGS I LEARNED IN THE DEEP LEARNING SUMMER SCHOOL In the beginning of August I got the chance t ...

  2. 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息

    0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...

  3. Microsoft.AspNet.SignalR 2.2

    Nuget :http://www.nuget.org/packages/Microsoft.AspNet.SignalR/ What is SignalR? ASP.NET SignalR is a ...

  4. Spring Annotation Processing: How It Works--转

    找的好辛苦呀 原文地址:https://dzone.com/articles/spring-annotation-processing-how-it-works If you see an annot ...

  5. REST vs SOAP

    REST vs SOAP These information searched from internet most from stackoverflow. Simple explanation ab ...

  6. ABAP程序执行效率和优化 ABAP Performance Examples

    一.             SQL Interface1.         Select ... Where vs. Select + Check用Select … Where语句效率比Select ...

  7. Introduction to SignalR -摘自网络

    What is SignalR? ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of ...

  8. Web Services and C# Enums -摘自网络

    Web Service Transparency .NET support for web services is excellent in creating illusion of transpar ...

  9. C#基础拾遗系列之二:C#7.0新增功能点

    第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它包括封装.继承和多态性.C#面向对象的行为包括: 统一的类型系统 ...

随机推荐

  1. PHP函数十进制、二进制、八进制和十六进制转换

    PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明,主要掌握各进制转换的方法,以应用于实际开发. 一,十进制(decimal system)转换函数说明 1,十进制转二进制 decbin ...

  2. Oracle 唯一主键引发的行锁

    SQL> create table test(id int PRIMARY KEY, name char(10)); 表已创建. Session 1: SQL> select * from ...

  3. MongoDb Windows linux平台环境及主流编程语言驱动安装同时配置mongoDb的远程连接

    <一,>MongoDB 简介篇Ruiy; MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值 ...

  4. 中间容器 - JTabbedPane的用法的最简举例

    摘自并整理http://blog.csdn.net/liu_zhen_wei/article/details/6445345 JTabbedPane的用法的最简举例 package com.wst.b ...

  5. Capture the Flag(模拟)

    Capture the Flag Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge In computer se ...

  6. Ffmpeg和SDL创建线程(转)

    Spawning Threads Overview Last time we added audio support by taking advantage of SDL's audio functi ...

  7. iOS安全攻防(二十三):Objective-C代码混淆

    iOS安全攻防(二十三):Objective-C代码混淆 class-dump能够非常方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完好的程序给同行留下笑柄. 所以 ...

  8. 深入浅出NodeJS——异步I/O

    底层操作系统,异步通过信号量.消息等方式有着广泛的应用. PHP语言从头到尾都是以同步堵塞方式执行,利于程序猿顺序编写业务逻辑. 异步I/O.事件驱动.单线程构成Node的基调. why异步I/O ( ...

  9. Unity 之圆环算法

    首先我们要明白圆环生成的原理,其实说白了并不是圆环,而是圆.因为我们使用的预制物体时Cube(物体本身是有大小的)难免会有发生实物的折叠看起来给人的感觉是圆环而已. 1.1 几何中我们要画一个圆,因为 ...

  10. 分布式日志收集系统- Cloudera Flume 介绍

        Flume是Cloudera提供的日志收集系统,具有分布式.高可靠.高可用性等特点,对海量日志采集.聚合和传输, Flume支持在日志系统中定制各类数据发送方, 同时,Flume提供对数据进行 ...