赞
踩
对某一模式的组测量值进行变换,以突出该模式具有代表性特征的一种方法。通过影像分析和变换,以提取所需特征的方法。
以上是百度百科的定义,按笔者的理解就是在所有的特征中通过某些方法找到具有代表性的特征
pca叫主成分分析法,本质上是一个降维的过程。
总共有共m个数据,每个数据由n个维度组成,组成了一个m行n列的x矩阵,经过PCA方法后,生成的数据是,每个数据的维度是p,,而这最终的p个维度就是主成分
以上三个问题等价于一个问题,就是PCA算法过程
降维的结果千千万,我们的标准是要使得降维后的数据尽可能地包含更多的信息,转换成数学语言就是,我们要找到一个或多个基(概率论的知识)使得所有数据变换成这个基上的坐标后,方差值最大,如果某些基的方差值非常接近,我们又该怎么判定哪个基最优呢?这时我们规定,基向量的协方差为0,同时基向量的长度是1,即为单位基向量。
这让我想起了线性代数中,给出n个向量,找出可以表示这n个向量的最小的非线性相关的向量。
总结:将一组n维向量降为p维,目标是选择p个单位正交基,使得原始数据变换到这组基上,基向量两两协方差为0,而维度的方差尽可能大
表示第i个向量的第j个特征,将n个特征维度降维p维,一共m个样本数据
贡献率
累计贡献率
优点
降维,压缩数据,同时最大程度保持原有数据的信息。
计算方法简单,主要运算是特征值分解,易于实现。
完全无参数限制,最后的结果只与数据相关。(同时暴露了1个缺点:无法进行参数调优,可能得不到预期效果)
缺点
PCA第一步需要对其进行中心化,如果数据的尺度不统一,预处理还需要标准化。
PCA原理主要是为了消除变量之间的相关性,并且假设这种相关性是线性的,对于非线性的依赖关系则不能得到很好的结果。(用KPCA)。
有时候样本数量过大,直接去拟合数据会让内存爆炸的,此时可用IncrementalPCA来解决。
在PCA降维过程中,当进行协方差矩阵上求解特征值时,如果面对维度高达 (10000x10000),可想而知耗费的计算量程平方级增长
对于非线形相关性的数据,可以考虑Kernel PCA,通过Kernel函数将非线性相关转为线性相关。
适合
1.导包
- import pandas as pd
- import numpy as np
- input_file = '/principal_component.xls'
- output_file = 'edit_principal_component.xls'
- data = pd.read_excel(input_file,header = None)
训练数据集观察降维结果
- from sklearn.decomposition import PCA
- pca = PCA()
- pca.fit(data) #训练模型
- pca.components_ #返回模型特征向量
- ratio = pca.explained_variance_ratio_ #返回各个成分各子方差百分比
- np.cumsum(ratio) #累加
代码块运行结果:
观察到在第三维,方差累计贡献率已经达到0.97。
再次重新选择维数保存降维结果
- pca = PCA(3) #选择维数
- pca.fit(data)
- low_d = pca.transform(data) # 降维
- pd.DataFrame(low_d).to_excel(output_file)
- data = pd.read_excel(output_file,header = None)
- data.head()
参考资料
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。