首页 > 代码库 > PCA/SVD--怎样确定topNfeat(特征值数目/奇异值数目)

PCA/SVD--怎样确定topNfeat(特征值数目/奇异值数目)

Coding by Chang, 2017/04/30

1.主成分分析(PCA)

1.1 PCA数学模型

  最大可分性出发(参考《机器学习》周志华):样本点在超平面上的投影能尽可能分开。

  即应该使投影后样本点的方差最大化:

    maxtr(WTXXTW)     s.t. WTW=I

  这个目标函数可以通过对协方差矩阵XXT做特征值分解求得转换矩阵W.

  降维原理:在W对应的开始r个主成分之后,方差就会迅速下降。这意味着数据集X中只有r个重要特征。

1.2 实践中确定topNfeat数目方法:

  在选择开始几个主成分后,方差就会迅速下降,可以通过计算方差百分比来确定topNfeat的具体数目。

  方差百分比=sum(the selected eigvals)/sum(all eigVals)

 1 #coding by C
 2 #-*- coding:utf-8 -*-
 3 
 4 sumOfEigVals=sum(eigVals)
 5 total=0.0
 6 for j in range(topNfeat):
 7     total+=eigVals[eigValInd(j)]
 8     percent=total/sumOfEigVals
 9     if percent>0.98:
10         print the number of eigVals: %d, var: %f %(j,percent)
11         print the best number of topNfeat: ,j
12         break
13     print ‘the number of %d has occupied %f‘ %(j,percent)

 

2.奇异值分解(SVD)

2.1 SVD数学模型为:

    Xm×n=Um×mΣm×nVTn×n

  Σ矩阵的对角元素称为“奇异值”。

  Σ矩阵的两个特点:只有对角元素,其他元素为0;对角元素从大到小排列;

  降维原理:在r个奇异值之后,其他的奇异值都置为0. 这意味着数据集X中只有r个重要特征。

2.2 利用python实现SVD

  依赖库:python内部线性代数工具箱 numpy.linalg

  实现方法:linalg.svd()

  技术分享

  注意:Σ是对角矩阵,但是它“只返回对角元素”,节省空间。

3,。特征值与奇异值之间的关系

  奇异值就是矩阵X*XT特征值的平方根。

PCA/SVD--怎样确定topNfeat(特征值数目/奇异值数目)