算法简介 基于python的样本点的三维数据PCA降维
主成分分析****PCA是一种通过降低数据维数简化数据结构的方法。其本质就是将高维空间中的数据通过正交变换投影到低维空间中,从而实现了图像数据中主要特征的提取。运用主成分分析的方法求解一个特征子空间,将用于训练和测试图像向该特征子空间里做投影,可以得到用于区分不同人脸的主要特征(即投影系数)作为识别的特征向量。PCA是一种基于最近重构性和最大可分性的降维方法。最近重构性:样本点到这个超平面的距离足够近。最大可分性:样本点在这个超平面的投影尽可能分开。
算法描述:
输入:样本集D={x1,x2,x3,xm},低维空间维数d。
过程:
1.对所有样本进行中心化:
2.计算所有样本的协方差矩阵 ;
3.对协方差矩阵做特征分解;
4.对最大的d个特征值做所对应的特征向量 ;
输出:投影矩阵W=( w1,w2,w3,…);
'''
生成500*3个数据 500个服从正太分布的3维度数据
PCA 生成3维度的立体图
'''
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import decomposition
s=np.random.normal(loc =0.0 , scale=1 ,size = (500,3)) #0 1正太分布
fig = plt.figure(1, figsize=(4, 3))
plt.clf() #只会清除数字 仍然可以在其上绘制另一个绘图
ax = Axes3D(fig, rect=[0, 0, .95, 1], elev=48, azim=134)
plt.cla() #当前活动轴在当前图中。 它保持其他轴不变
pca = decomposition.PCA(n_components=3) #这里为降维
pca.fit(s)
X = pca.transform(s)
# print(pca.explained_variance_ratio_) #投影后的三个维度的方差分布
# print(pca.explained_variance_) #方差 [1.10977118 0.9951736 0.81581847]
x1=[]
y1=[]
z1=[]
for i in range(len(s)):
x1.append(s[i][0])
y1.append(s[i][1])
z1.append(s[i][2])
ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程
# 将数据点分成三部分画,在颜色上有区分度
ax.scatter(x1[:500], y1[:500], z1[:500], c='y') # 绘制数据点
ax.set_zlabel('Z') # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.show()