栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

PCA主成分分析——numpy和sklearn的实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PCA主成分分析——numpy和sklearn的实现

1、PCA算法:

PCA过程的实现:(1)numpy可以模拟        (2)sklearn可以实现

1.1、使用numpy模拟PCA过程
import numpy as np

A=np.array([[3,2000],
           [2,3000],
           [4,5000],
           [5,8000],
           [1,2000]],dtype='float')

#使用numpy模拟PCA过程

#数据降维
#1、数据归一化
mean=np.mean(A,axis=0)#axis=0所有行
norm=A-mean
#2、数据缩放 因为两个特征不是一个数量级
scope=np.max(norm,axis=0)-np.min(norm,axis=0)
norm=norm/scope
#3、对协方差矩阵进行奇异值分解,求解其特征向量
U,S,V=np.linalg.svd(np.dot(norm.T,norm))
#4、因为需要将二维数据降为一维,因此取特征矩阵的第一列来构造主成分矩阵
U_reduce=U[:,0].reshape(2,1)#提取1列,却返回了1行,所以需要再转换成1列
#5、开始降维
R=np.dot(norm,U_reduce)

#降维数据还原
#1、升维
Z=np.dot(R,U_reduce.T)
#2、数据缩放和归一化还原
A_restore=np.multiply(Z,scope)+mean#np.multiply是矩阵的点乘运算

与原始矩阵A相比,恢复后的A_restore存在失真,但这是不可避免的

输出R:

1.2、使用sklearn进行PCA过程
#使用sklearn进行PCA过程

from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import MinMaxScaler

def std_PCA(**argv):
    scaler=MinMaxScaler()
    pca=PCA(**argv)
    pipeline=Pipeline([('scaler',scaler),('pca',pca)])
    return pipeline

pca=std_PCA(n_components=1)
R2=pca.fit_transform(A)

输出R2:

sklearn降维输出的数值和numpy降维输出的数值符号相反,这不是错误,是降维选择的坐标方向不同而已。

降维数据还原如下:

R2_restore=pca.inverse_transform(R2)#先进行PCA还原,再进行预处理的逆运算

还原的数据:

 原来的数据A:

 2、PCA的物理含义

方形点:原始数据经过预处理后(归一化、缩放)的数据。

圆形点:一维恢复到二维后的数据。

u(1)、u(2):主成分特征向量。

 结论:

(1)圆形点实际上就是方形点在向量 U(1)所在的直线上的投射点,降维就是方形点在主成分特征向量U(1)上的投影。

(2)PCA数据恢复,不是真正的恢复,只是把降维后的坐标转换为原坐标系中的坐标而已。

(3)主成分特征的向量U(1)、U(2)是相互垂直的

(4)方形点和圆形点之间的距离是PCA数据降维后的误差

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273454.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号