注:因为公式敲起来太麻烦,因此本文中的公式没有呈现出来,想要知道具体的计算公式,请参考原书中内容  

 

  降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中

1、主成分分析(PCA)

  将n维样本X通过投影矩阵W,转换为K维矩阵Z

  输入:样本集D,低维空间d

  输出:投影矩阵W

  算法步骤:

    1)对所有样本进行中心化操作

    2)计算样本的协方差矩阵

    3)对协方差矩阵做特征值分解

    4)取最大的d个特征值对应的特征向量,构造投影矩阵W

  注:通常低维空间维数d的选取有两种方法:1)通过交叉验证法选取较好的d  2)从算法原理的角度设置一个阈值,比如t=0.95,然后选取似的下式成立的最小的d值:

    Σ(i->d)λi/Σ(i->n)λi>=t,其中λi从大到小排列

  PCA降维的准则有以下两个:

    最近重构性:重构后的点距离原来的点的误差之和最小

    最大可分性:样本点在低维空间的投影尽可能分开

实验代码:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from sklearn import datasets,decomposition,manifold
 4 
 5 def load_data():
 6     iris=datasets.load_iris()
 7     return iris.data,iris.target
 8 
 9 def test_PCA(*data):
10     X,Y=data
11     pca=decomposition.PCA(n_components=None)
12     pca.fit(X)
13     print("explained variance ratio:%s"%str(pca.explained_variance_ratio_))
14 
15 def plot_PCA(*data):
16     X,Y=data
17     pca=decomposition.PCA(n_components=2)
18     pca.fit(X)
19     X_r=pca.transform(X)
20  #   print(X_r)
21 
22     fig=plt.figure()
23     ax=fig.add_subplot(1,1,1)
24     colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),(0.5,0,0.5),(0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),)
25     for label,color in zip(np.unique(Y),colors):
26         position=Y==label
27   #      print(position)
28         ax.scatter(X_r[position,0],X_r[position,1],label="target=%d"%label,color=color)
29     ax.set_xlabel("X[0]")
30     ax.set_ylabel("Y[0]")
31     ax.legend(loc="best")
32     ax.set_title("PCA")
33     plt.show()
34 
35 X,Y=load_data()
36 test_PCA(X,Y)
37 plot_PCA(X,Y)

View Code