pca降维的基本过程,pca降维例题详解
学习笔记本博文多来自书籍《机器学习实战》。
我只需要写下我的学习笔记。
降维
)1)使数据集更容易使用
)2)降低大部分算法的计算开销。
3)去噪
4)多维数据难以描述,降维后易于描述,结果易于理解。
优点:降低数据的复杂性,识别许多最重要的特征。
缺点:不必要,有用信息可能丢失,仅适用于数值型数据。
主成分分析原理
在PCA中,数据已经从原始坐标系转换到新坐标系。新坐标系的选择由数据本身决定。第一个新坐标轴选择原始数据中方差最大的方向,第二个新坐标轴与第一个坐标轴正交,选择方差最大的方向。此过程将重复原始数据中的要素数。如您所见,大多数方差都包含在最初的几个新坐标轴中。所以只能选择之前的坐标轴,也就是数据降维处理。(口头解释:坐标轴的选择是基于尽可能保留原始数据。降维是指数据在这个坐标轴或几个坐标轴组成的“平面”上的投影。)。
PCA相关算法
从数据差异最大的方向,即方差最大的方向,提取上述数据的第一主成分。第二主分量是第二大数据差的方向,它与第一主分量正交。通过对数据集的协方差矩阵和模态分析,可以得到这些主成分的值。
得到协方差矩阵的特征向量后,取出最大的N个值。这些特征向量显示了N个最重要特征的真实结构。这n个特征向量乘以数据,转换到新的数据空间。
模态分析
在AV=aV中,V是特征向量,A是特征量,是一个简单的标量。方程的意义是如何将特征向量V乘以左边某个矩阵A,等于给定的标量A乘以V。
Numpy包括特征向量和特征值模块linalg。这里用eig(方法求特征向量和特征值。
PCA原理实现原始数据。文本文件(textfile)
数据是二维的,减少一维。
选择二维是因为可以可视化。
密码
python 3
importnumpyasnpimportmatplotlib . pyploasplt 函数描述:分析文本数据参数:filename-filename delim-用于分隔每行的不同特征数据。默认情况下,tab键“ \ tReturns3360j”将浮点数据值列表转换为矩阵,并将其转换为“ defloaddataset(filename,delim= \ " t ):fr=open(filename)string arr=[line . strip]。split(delim)for line infr . read lines()]datarr=[lim]line))for lineinstringer(return NP . mat(datarr) 函数描述:PCA特征维压缩函数参数:dataMat-dataset数据topn feat-必须保留,即要压缩的维默认为4096 returns:lowDDataMat-压缩的数据矩阵reconMat-压缩的数据矩阵是原始数据矩阵 defpca(datamat, TopNfeat=4096)将:#依次求矩阵各列均值的轴=0) #从数据meanRemoved的各列特征中减去该列特征的均值=dataMat-meanVals #)这里n-1是获得协方差的无偏估计(#cov(x,0 )=cov(x) (x)除法运算是n-1(n是样本数))65 1)除数是ncovmat=NP.cov (mean remmemove)。 协方差矩阵的特征值和相应的特征向量存储在相应的矩阵中。Eigs=NP。linalg.eig (NP。Mat (CoV Mat)) # sort):将特征矩阵从小到大排序(将特征矩阵从小到大排序)从排序后的矩阵的末尾对应排序后的索引eigvalind=NP.argsort(eigvals),自下而上最多选择N个特征值,选择其对应的索引eigvalind=eigvalind [:]返回提取的特征值最大的N个特征值对应索引的特征向量, 并将矩阵*压缩后的矩阵排除压缩后矩阵的平均值rede designs=EIG valind[:EIG valind]#变换到一个新的空间,将维数变换成nlowddatts降级并利用降维后的矩阵逆向构造原始数据矩阵(可以与未压缩的原始矩阵相匹配)(#此处与transposition相反,redeigvectors . ireconmat=(lowdDatamat * redeigvectors . t)mean values)
Ata,reconmat _ _ name _ _= _ _ main _ _ :dataMat=load dataset( data . txt )low dmat,reconmat=PCA (datamat,1)print(NP . shape(low dmat))fig=PLT . figure()ax=fig . add _ subplot(111)ax . scatter(dataMat[:0]。展平()。A[0],dataMat[:1]。展平()。A[0],Marker= ,s=90) ax.scatter (reconmat [:0]。展平()。一个[0],再确认[:1]。展平()。a [0],标记= o ,s=90,
(重建为原始数据格式,去除了一些噪声)
在一个真实的例子中,您可以选择是减少维度还是重建数据。
例如,在图像数据的pca之后,必须选择重构的数据。缩减后的数据无法形成画面。
解释:
PCA()中有两个参数。第一个参数是数据集,第二个参数是健康的维度。减少到几个维度?
PCA代码:
1.去掉平均值:平均值=NP。平均值(数据矩阵,轴=0)
2.计算协方差矩阵:covmat=np.cov(均值已移除,rowvar=0)
3.计算协方差矩阵的特征值和特征向量:covmat=np.cov(均值去除,rowvar=0)
4.将特征值从大到小排序:eigValInd=np.argsort(eigVals)
#从排序后的最后一个矩阵中自下而上选取最大的N个特征值,返回其对应的索引。
EIG valind=EIG valind[:-(topn feat 1):-1]
5.保留前N个特征向量:#提取特征值最大的N个特征值的索引对应的特征向量,形成压缩矩阵。
redeigwects=EIG vects[:eigValInd]
6.将数据变换到由上述N个特征向量构成的新空间中,根据公式进行重构。(逆公式)
结果:
图中的红色表示重建的数据。
PCA包交换实现导入包
来自sklearn。分解导入PCA用法:
PCA()参数表示n_componentsint,float,None或string,PCA算法中要保留的主成分数,即保留的特征数。如果n_components=1,原始数据将降维;如果赋值是字符串,比如n _ components= mle ,那么特征的个数会自动选择,以满足要求的方差百分比;如果没有赋值,默认值为无,要素的数量不会改变(要素数据本身会改变)。CopyTrue或False,默认为True,即原始训练数据是否需要复制。白化:真或假,默认为假,即是否白化,使各特征方差相同。属性explained_variance_ratio_返回每个保留要素的方差百分比。如果未指定n_components,则所有特征都将返回一个数值,说明的方差之和等于1。N_components_:返回保留的特征号方法描述fit(X):用数据X训练PCA模型。Fit_transform(X)用X训练PCA模型,返回降维后的数据。inverse _ transform(new data)new data是降维后的数据。把降维后的数据转换成原始数据,但不一定完全一样,会有一些差异。Transform(X)将数据X转换为降维数据。训练模型时,还可以使用变换方法来降低新输入数据的维数。示例:
import numpy as NP import matplotlib . py plot as PLT # import data def load dataset(filename,delim= \ t ):fr=open(filename)string ar=[line . strip()。split(delim)for Line in fr . readlines()]datArr=[list(map(float,Line))for Line in string arr]return NP . mat(datArr)datamat=load dataset( data . txt )# Import PCA from sk learn . decomposition Import PCA=PCA(n _ components=1)PCA . fit(datamat)low dmat=PCA . transform(datamat)#降维数据print(降维数据维:,low dmat . shape)recon mat=PCA . inverse _ transform(low展平()。A [0],datamat [:1]。展平().S=90)ax . scatter(re comat[:0],re comat[:1],marker= o ,s=90,c= red) PLT.show()注意:重构的输入是降维后的数据reconmat=pca.inverse _ transform。
结果:
写博文不容易,是因为其他专业计算机的默默希望。如果你觉得这篇文章对你有用,请点赞支持。谢谢大家!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。