降维之PCA主成分分析算法

本文介绍了一种常用的降维算法——主成分分析(PCA),并详细阐述了其算法原理,包括样本中心化、协方差矩阵计算及特征值分解等步骤。此外,还提供了使用Python和sklearn库实现的鸢尾花数据集的二维可视化示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、算法原理

算法流程:

input:

样本集:

低维空间维数d

process:

1.对所有样本进行中心化

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

3.对协方差矩阵做特征值分解
4.取最大的d个特征值所对应的特征向量

output:

投影矩阵:

注:以上算法流程改编自周志华《机器学习》

算法补充:

1.协方差矩阵公式:

据查阅貌似有两个版本:



问题:为何协方差矩阵可以由矩阵乘以矩阵的转置得来?两个版本公式在何种情况下相等?

2.矩阵的特征值



因为v是特征向量,是n维的非零向量。
所以只能是前面的A-λE为0矩阵。
然后得到:

这也是矩阵A的特征向量的求法。

3.关于矩阵的补充:

1.n阶矩阵A有n个特征值
2.奇异矩阵:对应行列式为0的方阵。

二、PCA降维实现鸢尾花数据二维可视化代码笔记

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris

data=load_iris()
y=data.target
X=data.data
pca=PCA(n_components=2)
reduced_X=pca.fit_transform(X)#在数据x上运用适合X降维的方法将x数据改变适应该算法。之前的数据都没有降维处理但是这里因为降维处理数据了所以需要额外引用transform函数。
print(reduced_X)#得到数据中心化后协方差矩阵特征值的前两个特征值。
#创建空数组
red_x, red_y = [], []
blue_x, blue_y = [], []
green_x, green_y = [], []

for i in range(len(reduced_X)):#reduced_X是一个150行两列的矩阵,计算长度的时候只计算纵向的长度
    if y[i] == 0:
        red_x.append(reduced_X[i][0])
        red_y.append(reduced_X[i][1])#red_x和red_y分别装载数据的两个值根据y[i]判定数据是什么种类的鸢尾花。
    elif y[i] == 1:
        blue_x.append(reduced_X[i][0])
        blue_y.append(reduced_X[i][1])
    else:
        green_x.append(reduced_X[i][0])
        green_y.append(reduced_X[i][1])
#绘制散点图
plt.scatter(red_x, red_y, c='r', marker='x')
plt.scatter(blue_x, blue_y, c='b', marker='D')
plt.scatter(green_x, green_y, c='g', marker='.')
plt.show()





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值