PCA简化数据——主成分分析法

PCA简化数据——主成分分析法

基础知识

降维:将多维数据降到需要的维数,是一种对高维度特征数据预处理的方法。
降维是将高维度的数据保留下最重要的特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。
在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。

而降维具有如下的一些特点:

1.使得数据集更易使用
2.降低算法的计算开销
3.去除噪声
4.使得结果容易理解

而降维只要通过如下的三种方法来得以实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
独立成分分析:(Independent Component Analysis,ICA)假设数据是从N个数据源产生的。数据是对各数据源的混和观察结果,并且这些数据源是独立的。它满足统计独立和非高斯的成分。

当然ICA和FA不是我们这篇blog需要介绍的重点,读者有一个大致的了解即可,下面我们来具体减少PCA,即主成分分析法。

主成分分析法

在这里插入图片描述
优点:降低数据的复杂性,识别最重要的多个特征。
缺点:不一定需要,且可能损失有用信息。
适用数据类型:数值型数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为了能够说明怎样能够更好地降维,我们引入最大方差理论:在信号处理中认为信号具有较大的方差,噪声具有较小的方差,信噪比就是信号与噪声的方差比,其越大越好(说明数据不容易被噪声所干扰)。样本在u1的投影方差大,在u2上的投影方差较小,那么可以认为u2上的投影是由噪声引起的。
在这里插入图片描述
显然,为了使得方差最大,在进行投影时,应该在u1方向上进行投影。而这是降了一个维度,如果需要将n维数据降成k维,我们需要重复之前的步骤,对产生方差最大的k个方向进行投影降维,这就是PCA的主要思想。
接下来,我们进行理论推导以保证正确性:
根据计算投影的方法进行建模
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由此,我们就得出的PCA的模型,但是它仍然和抽象,我们对它进行推导来得出一般的结论。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
综上所述,我们就得出了一般且可实现的算法
在这里插入图片描述

PCA算法

将数据转换成前N个主成分的伪码大致如下:

去除平均值 
计算协方差矩阵 
计算协方差矩阵的特征值和特征向量 
将特征值从大到小排序 
保留最上面的N个特征向量 
将数据转换到上述N个特征向量构建的新空间中

PCA

from numpy import *

def loadDataSet(fileName, delim='\t'):
    fr = open(fileName)
    stringArr = [line.strip().split(delim) for line in fr.readlines()]
    datArr = [list(map(float,line)) for line in stringArr]
    return mat(datArr)

def pca(dataMat, topNfeat=9999999):
    meanVals = mean(dataMat, axis=0)
    meanRemoved = dataMat - meanVals #remove mean
    covMat = cov(meanRemoved, rowvar=0)
    eigVals,eigVects = linalg.eig(mat(covMat))
    eigValInd = argsort(eigVals)            #sort, sort goes smallest to largest
    eigValInd = eigValInd[:-(topNfeat+1):-1]  #cut off unwanted dimensions
    redEigVects = eigVects[:,eigValInd]       #reorganize eig vects largest to smallest
    lowDDataMat = meanRemoved * redEigVects#transform data into new dimensions
    reconMat = (lowDDataMat * redEigVects.T) + meanVals
    return lowDDataMat, reconMat

def replaceNanWithMean(): 
    datMat = loadDataSet('secom.data', ' ')
    numFeat = shape(datMat)[1]
    for i in range(numFeat):
        meanVal = mean(datMat[nonzero(~isnan(datMat[:,i].A))[0],i]) #values that are not NaN (a number)
        datMat[nonzero(isnan(datMat[:,i].A))[0],i] = meanVal  #set NaN values to mean
    return datMat

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
成分分析(Principal Component Analysis,PCA)是一种常用的特征提取方。它通过线性变换将原始数据投影到一个新的坐标系中,使得投影后的数据具有最大的方差。这些新的坐标轴被称为成分,它们是原始数据中最能区分样本之间差异的方向。 PCA的基本思想是找到一个最佳的投影方向,使得数据在该方向上的投影具有最大的方差,然后找到一个与第一个方向正交的第二个方向,使得数据在该方向上的投影具有次大的方差,依此类推。通过选择前k个成分,就可以将原始数据降维到k维空间中。 PCA具有以下几个应用和优点: 1. 数据降维:通过PCA可以将高维数据降低到低维空间,减少特征数量,同时保留了原始数据中最重要的信息。 2. 去除冗余信息:PCA可以去除原始数据中的冗余信息,提取出最相关的特征。 3. 数据可视化:PCA可以将高维数据映射到二维或三维空间中,便于可视化观察和分析。 4. 数据预处理:PCA可以在机器学习任务前对数据进行预处理,减少噪声和冗余信息对模型的影响。 5. 特征选择:基于PCA的方差解释率,可以选择保留多少个成分,从而选择最具代表性的特征。 需要注意的是,PCA是一种线性降维方,对于非线性的数据分布效果可能不好。在这种情况下,可以考虑使用非线性降维方,如核成分分析(Kernel PCA)等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

原创小白变怪兽

帮助原创小白成为怪兽吧!

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

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

打赏作者

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

抵扣说明:

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

余额充值