12-Dimensionality Reduction

来源:互联网 发布:vscode如何打开网页 编辑:程序博客网 时间:2024/06/04 18:01

数据的降维处理

1 - Motivation I Data Compression II Visualization 数据压缩|可视化

data compression
data visualization

2 - Principal Component Analysis Problem Formulation

  • 降维:
    dimension reduction

    • 2维到1维:找到一个向量 u(1)R2 ,让平面上的2维数据投影到这个向量上,并且投影误差最小
    • n维到k维:找到k个向量 u(1),u(2),,u(k) ,使得投影误差最小
  • PCA 不是 linear regression:PCA 的中的是投影
    projection
    左边是 linear regression ,右边是 PCA

3 - Principal Component Analysis Algorithm 具体算法

数据预处理:feature scaling / mean normalization

从 n 维 x(i) 映射到 k 维 z(i) 的方法

  • 计算 X 的协方差矩阵(covariance matrix):
    =1mi=1n(x(i))(x(i))T,x(i)Rn×1,Rn×n
  • 计算协方差矩阵 的特征向量(eigenvector):
    [U,S,V]=svd()(svd:Singularvaluedecomposition)U=|u(i)||u(2)||u(m)|,URn×n
  • 取出矩阵 U 的前 K 个向量 u(1),u(2),,u(k) 组成 Ureduce
  • zi=UTreducex(i),z(i)Rk×1
  • 完成了从x(i)z(i) 的降维转变

代码表示如下:

Sigma=1mi=1m(x(i))(x(i))T[U,S,V]=svd(Sigma);Ureduce=U(:,1:k);z=Ureducex

4 - Choosing the Number of Principal Components 选择 K 的方法

principal components 的数量 K 的选择方法:

  • Average squared projection error:1mi=1mx(i)x(i)approx2
  • Total variation: 1mi=1mx(i)2
  • 选择条件:
    1mi=1mx(i)x(i)approx21mi=1mx(i)20.01(or0.05,0.1,)
  • 上面的方法比较麻烦,利用之前的 svg 函数的结果能比较简便的计算:
    其中,
    S=S11S22Snn
    那么判断条件可以变为:
    1i=1kSiii=1nSii0.01ori=1kSiii=1nSii0.99

综上所述,选择 k 的方法如下:

  • 尝试 K =1,2,3 …
  • 计算 Ureduce,z(1),z(2),,z(m),x(1)approx,x(1)approx,,x(m)approx
  • 检查:i=1kSiii=1nSii0.99是否满足条件

5 - Advice for Applying PCA

  • Mapping x(i)z(i) should be defined by running PCA only on the training set. This mapping can be applied as well to the examples x(i)cv and x(i)test in the cross validation and test sets
  • PCA的应用:
    • Compression
      • Reduce memory/disk needed to store data
      • Speed up learning algorithm
    • Visualization
  • 不要为了避免 overfitting 而去使用 PCA,最好用 regulization 来实现
  • 在使用PCA之前,首先要尝试用原始的数据x(i),只有当它不能达到你想要的结果的时候,才可以去考虑使用z(i).
    Before implementing PCA, first try running whatever you want to do with the original/raw data x(i) . Only if that doesn’t do what you want, then implement PCA and consider using z(i) .
0 0