概括

这篇论文,不像以往的那些论文,构造优化问题,然后再求解这个问题(一般都是凸化)。而是,直接选择某些特征,自然,不是瞎选的,论文给了一些理论支撑。但是,说实话,对于这个算法,我不敢苟同,我觉得好麻烦的。

Sparse PCA Formulation

非常普遍的问题

Optimality Conditions

这一小节,论文给出了,上述问题在取得最优的情况下应该符合条件。

条件1

如果\(x^{*} \quad \mathbf{Card}(x^{*})=k\)是上述问题的最优解,那么\(z^{*}\)(由\(x^{*}\)非零元组成)是子举证\(A_k^{*}\)(\(x^{*}\)非零元所在位置,\(A\)的\(k\)行\(k\)列)的主特征向量。

这个条件是显然的。

条件2

感觉和上面也没差啊。

Eigenvalue Bounds

这个定理,可以由一个事实导出:

\(A \in \mathbb{R}^{n\times n}\)为一对称矩阵,\(\lambda_i\)为其特征值,且降序排列。

\(A_{n-1}\)为\(A\)的任意\(n-1\)级主子式,\(\delta_i \quad i=1,2,\ldots,n-1\)为其特征值,那么有下面分隔:

\(\lambda_1 \leq \delta_1 \leq \lambda_2 \leq \ldots \leq \delta_{n-1} \leq \lambda_n\)

根据这个事实,再用归纳法就可以推出上面式子。

分隔定理的证明(《代数特征值问题》p98)



存在正交变换\(Q\),使得\(Q^{\mathrm{T}}BQ\)右下角变为对角阵。若正交矩阵\(S\)使得\(S^{\mathrm{T}}B_{n-1}S\)为对角阵,那么,



且右下角矩阵的特征值并没有变化。

令:



设\(a\)只有\(s\)个成分不为0,若\(a_j=0\),那么\(\alpha_j\)就是\(X\)的特征值。

经过一个适当的置换矩阵\(P\)变换,我们可以得到:

(注意,下面的\(b\)和上面的\(b\)不是一个\(b\),只是为了与书上的符号相一致)



那么只需要考虑



的特征值就行了,因为\(\gamma_i\)是矩阵\(A\)和\(A_{n-1}\)所共有的。

考虑\(Z\)的特征多项式:

\((\alpha-\lambda)\mathop{\prod}\limits_{i=1}^{s}(\beta_i-\lambda)-
\mathop{\sum}\limits_{j=1}^{s}b_j^2\mathop{\prod}\limits_{i \neq j}(\beta_i-\lambda)=0\)

假定\(\beta_i\)中只有\(t\)个不同的值,不失一般性,可令它们为\(\beta_1,\beta_2,\ldots,\beta_t\),

且重数为\(r_1,r_2,\ldots,r_s \quad \mathop{\sum}\limits_{i}r_i=s\)

等式左端有因子:

\(\mathop{\sum}\limits_{i=1}^{t}(\beta_i-\lambda)^{r_i-1}\)

因此,\(\beta_i\)为\(Z\)的特征值,重数为\(r_i-1\)

等式除以\(\mathop{\sum}\limits_{i=1}^{t}(\beta_i-\lambda)^{r_i}\)可得:

\(0=(\alpha-\lambda)-
\mathop{\sum}\limits_{i=1}^{t}c_i^2(\beta_i-\lambda)^{-1}
=a-f(\lambda)\)

\(Z\)的剩余的特征值是\(a-f(\lambda)=0\)的根。

根据正负的特点,和连续函数(实质上是分段的)根的存在性定理,可以知道

\(a-f(\lambda)\)的\(t+1\)个根\(\delta_i\)满足:

\(\delta_1>\beta_1>\delta_2>\ldots>\beta_t>\delta_{t+1}\)

这样所有根的序列就得到了,就是我们要证的。整理一下可以得到,

除了刚刚讲的\(t+1\)个根,

还有\(s-t\)个\(\beta_i\)相同的特征值,以及

\(n-s-1\)个\(\gamma_i\).

另外一个性质

这个性质不想去弄明白了

算法

我的理解这样的:

step1.选第一个特征,就是对角元最大的那个

step2.在第一个的基础上,再选一个,这次会形成一个\(2\times2\)的子矩阵,所以,需要选择令这个矩阵首特征值最大的第二个特征。

step3.反复进行,直到k?

这是前向的,还有对应的后向的,一个个减。论文推荐是,俩种都进行,然后挑二者中比较好的一个。

未免太复杂了些?

代码

只写了前向的代码:

import numpy as np
def You_eig_value(C): #幂法 只输出特征值
d = C.shape[1]
x1 = np.random.random(d)
while True:
x2 = C @ x1
x2 = x2 / np.sqrt(x2 @ x2)
if np.sum(np.abs(x2-x1)) < 0.0001:
break
else:
x1 = x2 return x1 @ C @ x1 def forward(C):
n = C.shape[0]
label1 = set(range(n))
label = [np.argsort(np.diag(C))[-1]]
label1 -= set(label)
count = 0
while len(label1) > 0:
count += 1
maxvalue = 0
maxi = -1
for i in label1:
value = You_eig_value(C[label+[i],:][:,label + [i]])
if value > maxvalue:
maxvalue = value
maxi = i
label.append(maxi)
label1 -= {maxi} return label f = open('C:/Users/biiig/Desktop/pitprops.txt')
C = []
for i in f:
C.append(list(map(float, i.split())))
f.close()
C = np.array(C)
forward(C) # [12, 6, 5, 9, 1, 0, 8, 7, 3, 2, 11, 4, 10]

Spectral Bounds for Sparse PCA: Exact and Greedy Algorithms[贪婪算法选特征]的更多相关文章

  1. Sparse PCA: reproduction of the synthetic example

    The paper: Hui Zou, Trevor Hastie, and Robert Tibshirani, Sparse Principal Component Analysis, Journ ...

  2. Deflation Methods for Sparse PCA

    目录 背景 总括 Hotelling's deflation 公式 特点 Projection deflation 公式 特点 Schur complement deflation Orthogona ...

  3. Sparse PCA 稀疏主成分分析

    Sparse PCA 稀疏主成分分析 2016-12-06 16:58:38 qilin2016 阅读数 15677 文章标签: 统计学习算法 更多 分类专栏: Machine Learning   ...

  4. A direct formulation for sparse PCA using semidefinite programming

    目录 背景 Sparse eigenvectors(单个向量的稀疏化) 初始问题(low-rank的思想?) 等价问题 最小化\(\lambda\) 得到下列问题(易推) 再来一个等价问题 条件放松( ...

  5. Sparse Filtering 学习笔记(二)好特征的刻画

      Sparse Filtering 是一个用于提取特征的无监督学习算法,与通常特征学习算法试图建模训练数据的分布的做法不同,Sparse Filtering 直接对训练数据的特征分布进行分析,在所谓 ...

  6. activity select problem(greedy algorithms)

    many activities will use the same place, every activity ai has its'  start time si and finish time f ...

  7. 机器学习:PCA(人脸识别中的应用——特征脸)

    一.思维理解 X:原始数据集: Wk:原始数据集 X 的前 K 个主成分: Xk:n 维的原始数据降维到 k 维后的数据集: 将原始数据集降维,就是将数据集中的每一个样本降维:X(i) . WkT = ...

  8. 用scikit-learn学习主成分分析(PCA)

    在主成分分析(PCA)原理总结中,我们对主成分分析(以下简称PCA)的原理做了总结,下面我们就总结下如何使用scikit-learn工具来进行PCA降维. 1. scikit-learn PCA类介绍 ...

  9. 主成分分析(PCA)原理总结

    主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一.在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用.一般我们提到降维最容易想到的算法就 ...

随机推荐

  1. 排序算法----快速排序java

    快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn) import java.util.Arrays; import java.util.Scanner; public class tes ...

  2. 爬虫入门实例:利用requests库爬取笔趣小说网

    w3cschool上的来练练手,爬取笔趣看小说http://www.biqukan.com/, 爬取<凡人修仙传仙界篇>的所有章节 1.利用requests访问目标网址,使用了get方法 ...

  3. c/c++ 编译器提供的默认6个函数

    c/c++ 编译器提供的默认6个函数 1,构造函数 2,拷贝构造函数 3,析构函数 4,=重载函数 5,&重载函数 6,const&重载函数 #include <iostream ...

  4. sed:-e 表达式 #1,字符 10:未终止的“s”命令

    执行shell脚本时,使用sed变量替换指定的字符串,一直出现这个错误: [root@bqh-118 scripts]# vim while_rz.sh [root@bqh-118 scripts]# ...

  5. 【PAT】B1004 成绩排名

    简单题 循环输入放入结构体数组,一个sort搞定 #include <stdio.h> #include<algorithm> using namespace std; str ...

  6. 4.3Python数据处理篇之Matplotlib系列(三)---plt.plot()折线图

    目录 前言 (一)plt.plot()函数的本质 ==1.说明== ==2.源代码== ==3.展示效果== (二)plt.plot()函数缺省x时 ==1.说明== ==2.源代码== ==3.展示 ...

  7. ​June 10. 2018, Week 24th, Sunday

    There is no friend as loyal as a book. 好书如挚友,情谊永不渝. From Ernest Miller Hemingway. Books are my frien ...

  8. call和apply;this;闭包

    对于这两个原生JS的方法,一直有点绕不过来,朦朦胧胧的感觉.现在详细梳理一下: 两者是基于继承的思想, obj.call(thisObj, arg1, arg2, ...); obj.apply(th ...

  9. MySQL高级知识(四)——Explain

    前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句.explain主要用于分析查询语句或表结构的性能瓶颈. 注:本系列随 ...

  10. c# 行转列动态赋值给layui

    数据库存储格式 期望前端显示样式 以下是代码: (1)控制器: [HttpGet("SocialImportLedgerInfo")] public ResultData GetS ...