''' 1)、对数据进行中心化处理,即减去均值。
2)、构造协方差矩阵。
3)、求解协方差矩阵的值与特征向量。
4)、将特征值从大到小排列,截取所需的K个,并得到其对应的特征向量
5)、.将数据投影在这K个特征向量上。'''
import numpy as np
from mpl_toolkits.mplot3d import Axes3D # 空间三维画图
from numpy import *;
import matplotlib.pyplot as plt
X_cen = np.random.normal(100, 10, (3000, 3)) #生成由均值为0,标准差为1的标准正态分布组成的随机数组
def pca(X, threshold):
# 将X中心化
X_mean = np.mean(X, axis=0) #求平均值函数mean
X_cen = X - X_mean
# 构造散度矩阵并且求解特征值与特征向量
X_sca = np.dot(X_cen.T, X_cen) #dot函数表示矩阵的乘法
X_eigenval, X_eigenvect = np.linalg.eig(X_sca) #linalg.eig(a)函数返回矩阵A的特征值和特征向量,X_eigenval特征值, X_eigenvect特征向量
index = X_eigenval.argsort()[::-1] #从大到小排序,返回索引值
indexs = index[0:threshold]
X_eigenvect_TopK = X_eigenvect[:, indexs] #前threshold大的特征值对应的特征向量,也就是投影向量
return X_eigenvect_TopK
Tou = pca(X_cen, 2)
Last = np.dot(X_cen, Tou)
#原三维数据散点图
x0 = X_cen[:, 0]
y0 = X_cen[:, 1]
z0 = X_cen[:, 2]
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x0, y0, z0)
#投影后二维数据对应平面图
x1 = Last[:, 0]
y1 = Last[:, 1]
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x1, y1)
plt.show()
PCA主成分分析
最新推荐文章于 2024-01-28 21:30:23 发布
该博客介绍了如何使用Python实现主成分分析PCA,包括数据的中心化处理、协方差矩阵构造、特征值和特征向量计算,以及数据的降维投影。通过随机生成的三维数据集,展示了PCA在高维数据降低到二维后的效果,包括原三维数据的散点图和降维后的二维平面图。
摘要由CSDN通过智能技术生成