机器学习PCA学习(主成分分析)

前言

主成分分析(Principal Components Analysis),简称PCA,一种数据降维技术,常用于数据处理这一方面,好比说我们的数据集中有100个特征,这些特征可能有共性、无用的信息,或者我们想要将多特征融合,此时我们就需要用到PCA降维技术。

PCA实现原理

通俗来说,就是将数据从原始的向量空间转换到新的特征空间中去。比如:我们有在原始向量空间中的四维数据(a,b,c,d),需要将其降到三维,那么原理是通过某种方法,用新的坐标(a0,b0,c0,d0)来表示原始坐标。(在新的特征空间中,可能所有数据在d坐标轴上的投影接近于0,那么我们就可以将其忽略,此时四维数据将为三维)

PCA降维的求解过程

一般的步骤为先对原始数据进行零均值化,然后求协方差矩阵,接着对协方差矩阵求特征向量和特征值。

过程讲解

零均值化

(注意:矩阵中每一行代表一个样本,每一列代表同一个特征)零均值化就是求每一列的平均值然后该列上的所有数减去这个均值。

求协方差矩阵

np.cov(dataMat, rowvar=0)

我们通过numpy中的cov函数求解协方差矩阵,其中参数rowvar很重要,如果rowvar=0,则传入的数据一行代表一个样本;否则传入的数据一列代表一个样本。

求特征值、特征矩阵

eigVals, eigVects = np.linalg.eig(np.mat(covMat)) # eigVals代表特征值(行向量),eigVects代表特征向量,每一列代表一个特征向量

我们通过numpy中的linalg的eig函数来实现这一过程。

代码实现

def zeroMean(dataMat):
    meanVal = np.mean(dataMat, axis=0)
    newData = dataMat - meanVal
    return newData, meanVal

def pca(dataMat, n):
    newData, meanVal  = zeroMean(dataMat)
    covMat = np.cov(newData, rowvar=0) # 求协方差矩阵
    
    eigVals, eigVects = np.linalg.eig(np.mat(covMat)) # 求特征值和特征向量,特征向量是按列排列的,每一列代表一个特征向量
    eigValIndice = np.argsort(eigVals) # 对特征值从小到大排序
    n_eigValIndice = eigValIndice[-1:-(n+1):-1] # 最大的n个特征值的下标
    n_eigVect = eigVects[:, n_eigValIndice] # 最大的n个特征值对应的特征向量
    lowDataMat = newData * n_eigVect # 低维特征空间的数据
    reconMat = (lowDataMat*n_eigVect.T) + meanVal # 重构数据
    return lowDataMat, reconMat

希望这篇文章对大家的学习有所帮助!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小k同学!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值