注:因为公式敲起来太麻烦,因此本文中的公式没有呈现出来,想要知道具体的计算公式,请参考原书中内容
降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中
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
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python大战机器学习——数据降维 - Python技术站