机器学习-PCA数据降维详解

机器学习-PCA数据降维详解

    • 01 PCA降维思路
    • 02 PCA降维的本质
    • 03 代码实现及过程讲解

01 PCA降维思路

 Step01:零均值化处理
 Step02:计算协方差矩阵
 Step03:构建降维矩阵
 Step04:利用降维矩阵对初始数据进行降维

02 PCA降维的本质

寻找降维矩阵P,实现对原始数据的降维

03 代码实现及过程讲解

# 导入所需数据包
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets,decomposition#导入数据集
import re
#数据集:使用sklearn自带的鸢尾花数据集
iris_flower=datasets.load_iris()
print("鸢尾花分类:",iris_flower.target_names)
print("鸢尾花属性名:",iris_flower.feature_names)
print("*"*100)
iris_data=iris_flower.data
iris_target=iris_flower.target
# Step01:零均值化处理
[m,n]=np.shape(iris_data)
for j in range(n):
    sum=0
    for i in range(m):
        sum=sum+iris_data[i,j]
    average=sum/m
    average=int(average*1000)/1000
    for i in range(m):
        iris_data[i,j]=iris_data[i,j]-average
# Step02: 计算协方差矩阵
C=np.matmul(iris_data.T,iris_data)/3
mc,nc=np.shape(C)
for i in range(mc):
    for j in range(nc):
        C[i,j]=int(C[i,j]*1000)/1000
        if C[i,j]<0.001:
            C[i,j]=0
# Step03:构建降维矩阵
eig_values,eig_vectors=np.linalg.eig(C)#计算特征值和特征向量
[me,ne]=np.shape(eig_vectors)
vecs=[]
vec01=[]
for i in range(4):
    vec01.append(eig_vectors[i,0])
vecs.append(vec01)
vec02=[]
for i in range(4):
    vec02.append(eig_vectors[i,3])
vecs.append(vec02)# 将特征值最大的两个特征向量构建出来,此处为了更深刻理解构建过程,代码量较多,熟练的朋友可以考虑np.argsort()
[mv,nv]=np.shape(vecs)
vecs=np.array(vecs)
for i in range(mv):
    for j in range(nv):
        vecs[i,j]=int(vecs[i,j]*10000)/10000 #手动去除冗余的小数部分
P=vecs	#降维矩阵构建成功
Y=np.matmul(P,iris_data.T) #实现降维,所以PCA降维的本质就是构建降维矩阵P的过程
Y=Y.T
m_Y,n_Y=np.shape(Y)
# Step04:数据可视化
fig=plt.figure()#新建窗口
ax=fig.add_subplot(1,1,1)#创建画布
colors=['red','blue','green']
labels_names=iris_flower.target_names
for i in range(len(labels_names)):
ax.scatter(Y[iris_target==i,0],Y[iris_target==i,1],color=colors[i])
ax.scatter(Y[position,0],Y[position,1],label='Ttarget=%d'%label,color=color)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title("PCA降维后样本分布图")
plt.show()

你可能感兴趣的:(机器学习,机器学习,python,人工智能,PCA)