PCA降纬(python)

PCA降纬

pca降纬是一种无监督算法,是为了减少不必要的特征值,去除冗余或者对结果影响特别小的特征,产生较小误差

主成分分析(PCA)是一种维数降低算法,可以显着加速无人监督的特征学习算法。更重要的是,这是许多算法的重要预处理步骤。假设您正在对图像进行训练。那么输入将是有点冗余的,因为图像中相邻像素的值是高度相关的。具体来说,假设我们正在对16x16灰度图像补丁进行培训。然后\ textstyle x \ in \ Re ^ {256}是256个维度向量,其中一个特征\ textstyle x_j对应于每个像素的强度。 由于相邻像素之间的相关性,PCA将允许我们使用较低维度近似输入,同时产生非常小的误差。

个人理解就是在更小的纬度表示更多纬度的数据,能够减小计算,因为是主成分分析,所以就是选择最主要的特征来表示

原理

1、构造二维数据集

现在设有一个二维数据x1,x2,下图表示

现在我们就是想要把这个二维的数据x1,x2,来用一维来表示,我们可以看出来就是在u1方向上变化的特征比较明显

2、进行零均值化,转化坐标

首先我们需要对x进行零均值化,然后计算x1,x2之间的协方差矩阵,协方差矩阵的对角线上就是对应的纬度方差
之后进行的就是计算特征值和特征向量,特征值的大小也就是在某一个方向上的变化的大小,上图的u1的特征值
变化要比u2大,所以就是选择u1的特征向量。。。。。特征值和特征向量计算,也就是 每个样本在u1方向上
的投影,也就是样本在u2方向上的投影
然后我们用u1,u2来表示x这个样本,原来的样本x经过旋转变为现在的坐标,这是以u1,u2为基的坐标
,因为就是pca的原理就是舍弃不必要的纬度,然后因为本来是二维,所以就是要舍弃u2.

3、还原本来的数据

结果就是

个人感觉就是转化坐标基,然后就是选择在某个方向变化最大,也就是特征值最大的方向,然后用它的特征变量
舍弃掉一些不必要的特征变量,也就是舍弃某个方向上的变化,最后就是转化到原来的坐标

python代码实现

#coding:utf-8
import numpy as np
def zeromean(dataMat):
    meanVal = np.mean(dataMat, axis=0)#axis=0表示按列求均值。每个特征的均值
    newdata = dataMat-meanVal
    return newdata, meanVal
data = open(r'D:\PythonDDD\shuju files\wine.txt')
data1 = []
for i in data:
    line = i.strip().split(',')
    line1 = map(float, line)
    data1.append(line1)
# print data1
dataMat = np.mat(data1)
newdata, meanVal = zeromean(dataMat)
covMat = np.cov(newdata,rowvar=0)#求协方差矩阵,!若rowvar=0,说明一行是一个样本,如果不是0,则
# 就是一列代表一个样本
#协方差矩阵表示每个特征与其他特征之间的相关系数,正相关或者负相关或者无关
# print covMat
eigVals, eigVects=np.linalg.eig(np.mat(covMat))
# print eigVals
# 特征值和特征向量,通过他的行列式来计算特征值,然后求出对应每个特征值的特征向量
eigValIndice = np.argsort(eigVals)#对特征值从小到大排序,返回的是排序后的索引
# print eigValIndice
n_eigValIndice = eigValIndice[-1:-(n+1):-1]#最大的n个特征值的下标.-1代表倒序,n在这里没有设置了哦
# print n_eigValIndice
n_eigVect = eigVects[n_eigValIndice]
lowdataMat = newdata*n_eigVect
reconMat = (lowdataMat*n_eigVect.T)+meanVal#重构数据




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值