Truncated Power Method for Sparse Eigenvalue Problems

在这里插入图片描述

抱歉,真的没怎么看懂,当然,估计和我现在没法静下心来好好看也有关系。

算法

在这里插入图片描述

想法非常非常简单吧,就是在原来幂法的基础上,每次迭代的时候再加个截断。当然,论文里给出了,为什么这么做的理由,把我弄得晕晕的,但是思想就是这么朴素。现在的问题是:
1.k怎么选?
2.初始 x x x的选择

k的选择

这个我没在论文里找到,但是看数值实验,感觉在k上面是有操作空间的。

x x x的初始化

x x x的初始化,是这篇论文的大头,讲了怎么样怎么样就能怎么样怎么样。
总结就是有如下3种方案:

  • x = e j , j = a r g m a x { A i i } x=e_j,j=argmax\{A_{ii}\} x=ej,j=argmax{Aii}实在是简单粗暴啊。
  • 分俩步,第一步先把 k k k放大一些,然后进行迭代(初始化估计就用第一种吧),迭代几步之后,把 k k k变回来,再继续迭代。
  • k ≈ p k\approx p kp的时候,采用Moghaddam et al. 2006后向选取的方法。

注:文章还提到,当 A A A具有唯一的稀疏的主特征向量,那么,TPower方法能够从 A A A的带噪声的观测中,讲该特征向量近似地恢复出来。

代码

def You_eig_value(C, x, k):  #幂法
    p = C.shape[1]
    x1 = x     #初始化
    while True:
        x2 = C @ x1
        truncate(x, k)
        x2 = x2 / np.sqrt(x2 @ x2)
        if np.sum(np.abs(x2-x1)) < 0.0001:
            break
        else:
            x1 = x2
            
    return x1

def truncate(x, k): #截断
    
    p = len(x)
    label = np.argsort(np.abs(x))[:p-k]
    x[label] = 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值