降维(PCA,相关系数)

PCA

主成分分析(Principal Component Analysis, PCA):通俗理解:就是找出一个最主要的特征,然后进行分析。最大化投影后数据的方差(让数据更分散),如果投影到线上,发现数据越紧密,那么模型越难将这些点区分.

工作原理

1.找出第一个主成分的方向,也就是数据方差最大的方向

2.找出第二个主成分的方向,也就是数据 方差次大 的方向,并且该方向与第一个主成分方向 正交(orthogonal 如果是二维空间就叫垂直)

3.通过这种方式计算出所有的主成分方向

4.通过数据集的协方差矩阵及其特征值分析,我们就可以得到这些主成分的值。

5.一旦得到了协方差矩阵的特征值和特征向量,我们就可以保留最大的 N 个特征。这些特征向量也给出了 N 个最重要特征的真实结构,我们就可以通过将数据乘上这 N 个特征向量 从而将它转换到新的空间上。

为什么正交?

  1. 正交是为了数据有效性损失最小
  2. 正交的一个原因是特征值的特征向量是正交的

PCA优缺点:

优点:降低数据的复杂性,识别最重要的多个特征

缺点:不一定需要,且可能损失有用信息

  • 适合数据类型:数值型数据

去中心化了(中心点为原点),这一步操作可以简单地通过xi=xix¯ 来达到,其中x¯是样本的均值,为方便表示,后文的x都是去中心化后的结果。

可以看到PCA所谓的降维操作就是找到一个新的坐标系(旋转的两条直线式垂直的,我们可以用一组标准正交基{uj},j=1,...,n来指示),然后减掉其中一些维度,使误差足够小。

假设我们要找的投影方向是uj (uj是单位向量,即uTjuj=1) ,点xi在该方向上的投影就是(xTiuj)uj,减掉这个维度造成的误差


Jj=1mi=1m(xTiuj)2=1m(xTuj)2=1m(xTuj)T(xTuj)=1muTjxxTuj
1mxxT记作S,假设我们要减去t个维度,则需要最小化

J=j=ntnuTjSujs.t.uTjuj=1

此时使用拉格朗日乘子法使得

J̃ =j=ntnuTjSuj+λj(1uTjuj)

最小化上式子,求导有
δJ̃ δuj=Sujλjuj

使其为0则得到
Suj=λjuj

这是标准的特征值的定义,λj就是特征值,uj是对应的特征向量,所以对S进行特征值分解就可求得解,将上式带回到原始的J中,可得

J=j=ntnuTjSuj=j=ntnuTjλjuj=j=ntnλj

所以要使J最小,就去掉变换后维度中最小的t个特征值对应的维度就好了。

现在,我们再回过头看PCA的流程,就会发现一切都对应上了:

  1. 对数据去中心化
  2. 计算XXT,注:这里除或不除样本数量MM1其实对求出的特征向量没影响
  3. XXT进行特征分解
  4. 选取特征值最大的几个维度进行数据映射。(去掉较小的维度)

代码:    sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)

参数:

n_components:  
意义:PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n
类型:int 或者 string,缺省时默认为None,所有成分被保留。
          赋值为int,比如n_components=1,将把原始数据降到一个维度。
          赋值为string,比如n_components='mle',将自动选取特征个数n,使得满足所要求的方差百分比。
copy:
类型:bool,True或者False,缺省时默认为True。
意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维计算。
whiten:
类型:bool,缺省时默认为False

意义:白化。


对象属性:

components_:返回具有最大方差的成分。

explained_variance_ratio_:返回 所保留的n个成分各自的方差百分比。

n_components_:返回所保留的成分个数n。

mean_

noise_variance_

explainde_variance_ : 返回所保留的n个成分方向的方差

fit_transform(X) :用X来训练PCA模型,同时返回降维后的数据。

newX=pca.fit_transform(X),newX就是降维后的数据。

inverse_transform()

将降维后的数据转换成原始数据,X=pca.inverse_transform(newX)

k维跟原始数据的维没有关系,是原始特征在k维上的投影

链接:https://www.zhihu.com/question/38417101/answer/94338598

先说下PCA的主要步骤:
假设原始数据是10(行,样例数,y1-y10)*10(列,特征数x1-x10)的(10个样例,每样例对应10个特征)
(1)、分别求各特征(列)的均值并对应减去所求均值。
(2)、求特征协方差矩阵。

对角线上是方差,非对角线是协方差;协方差为0时两者独立,其绝对值越大,两者对彼此的影响越大。
(3)、求协方差阵的特征值和特征向量。
(4)、将特征值按照从大到小排序,选择其中最大的k个。将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
(5)、将样本点投影到选取的k个特征向量上。这里需要捋一捋,若原始数据中样例数为m,特征数为n,减去均值后的样本矩阵仍为MatrixDATA(m,n); 协方差矩阵是C(n,n);特征向量矩阵为EigenMatrix(n,k); 投影可得: FinalDATA(m,k)=MatrixDATA(m,n) * EigenMatrix(n,k) 。
这样,原始数据就由原来的n维特征变成了k维,而k维跟原始数据的维没有关系,是原始特征在k维上的投影。这k维特征基本上代表了原先的n个特征(牺牲掉所认为不重要个维度的信息,即后n-k个特征向量所代表的维度)。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值