Spectral Bounds for Sparse PCA: Exact and Greedy Algorithms[贪婪算法选特征]

目录

  • 概括
  • Sparse PCA Formulation
    • 非常普遍的问题
    • Optimality Conditions
    • Eigenvalue Bounds
  • 算法
  • 代码

在这里插入图片描述

概括

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

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 @ x1x2 = x2 / np.sqrt(x2 @ x2)if np.sum(np.abs(x2-x1)) < 0.0001:breakelse:x1 = x2return x1 @ C @ x1def forward(C):n = C.shape[0]label1 = set(range(n))label = [np.argsort(np.diag(C))[-1]]label1 -= set(label)count = 0while len(label1) > 0:count += 1maxvalue = 0maxi = -1for i in label1:value = You_eig_value(C[label+[i],:][:,label + [i]])if value > maxvalue:maxvalue = valuemaxi = ilabel.append(maxi)label1 -= {maxi}return labelf = 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]

转载于:https://www.cnblogs.com/MTandHJ/p/10527963.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js php调用webservice,php调用web services两种方法soap和curl

以http://www.webxml.com.cn/zh_cn/index.aspx一、使用soap调用//服务器支持soap扩展:/*Example 1:$client new SoapClient("http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl");$parameters array("wordKey">"test");//中英…

JS基础-3

1.for in 对象中有多少组键值对,我们的FOR IN 循环就遍历多少次(不一定) 每一次循环KEY这个变量存储的都是当前循环这组键对值的属性名 1、KEY存储的值都是字符串格式的(不管属性名是否为数字) 2、在FOR IN 循环遍历的时候&#xff0c;大部分浏览器都是先把对象中的键值对进行排…

Python常用的几个函数

print()函数&#xff1a;用于打印输出信息到控制台。 input()函数&#xff1a;用于从控制台获取用户输入。 len()函数&#xff1a;用于获取字符串、列表、元组、字典等对象的长度。 range()函数&#xff1a;用于生成一个整数序列&#xff0c;常用于循环中。 type()函数&…

数据结构——常见的定义

问题答案Ο标记法&#xff08;大Ο标记法&#xff09;是一种用于衡量算法时间复杂度的表示方法。它描述了算法在最坏情况下的运行时间增长率。当我们使用Ο标记法时&#xff0c;我们关注的是算法的上界&#xff0c;即算法的运行时间不会超过Ο(f(n))&#xff0c;其中 f(n) 是输…

TikTok与环保:短视频如何引领可持续生活方式?

在数字时代&#xff0c;社交媒体平台扮演着塑造文化和价值观的关键角色。而TikTok&#xff0c;作为一款全球短视频平台&#xff0c;不仅塑造着用户的娱乐方式&#xff0c;还在悄然地引领着可持续生活方式的潮流。本文将深入探讨TikTok与环保之间的关系&#xff0c;分析短视频如…

Spring源码分析---Bean 的生命周期 03

来源&#xff1a;Spring 3. Bean 的生命周期 自定义一个 SpringBoot 的主启动类&#xff1a; SpringBootApplication public class A03Application {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(A03Applicatio…

go-carbon v2.3.0 圣诞特别版发布,轻量级、语义化、对开发者友好的 Golang 时间处理库

go-carbon v2.3.0 圣诞节特别版发布&#xff0c;这应该是 2023 年的最后一个版本&#xff0c;祝大家圣诞节快乐&#xff01; carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库&#xff0c;支持链式调用。 目前已被 awesome-go 收录&#xff0c;如果您觉得不错…

pytorch 实现 Restormer 主要模块(多头通道自注意力机制和门控制结构)

前面的博文读论文&#xff1a;Restormer: Efficient Transformer for High-Resolution Image Restoration 介绍了 Restormer 网络结构的网络技术特点&#xff0c;本文用 pytorch 实现其中的主要网络结构模块。 1. MDTA(Multi-Dconv Head Transposed Attention&#xff1a;多头…

选择免费的SSL证书,还是付费的?

作为一个互联网文章作者&#xff0c;我会根据具体的使用场景和需求来选择SSL证书。通常情况下&#xff0c;如果是用于个人网站或者小型项目&#xff0c;我会倾向于选择免费的SSL证书&#xff0c;比如 JoySSL提供的免费证书。这样可以在不增加额外费用的情况下为网站提供安全的加…

静态HTTP与CDN:如何优化内容分发

大家好&#xff0c;今天我们来聊聊静态HTTP和CDN这对“黄金搭档”。没错&#xff0c;就是那个让你的网站内容像闪电一样传遍全球的CDN&#xff01; 首先&#xff0c;我们来了解一下静态HTTP。它就像是那个老实可靠的邮差&#xff0c;每次都按时按点地把你的内容送到用户手中。…

第二十一章博客

计算机应用实现了多台计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#xff0c;相互之间可以交换数据。编写网络应用程序前&#xff0c;首先必须明确所要使用的网络协议…

Node.js中处理特殊字符的文件名,安全稳妥的方案

在Node.js中&#xff0c;通过path模块提供的basename方法&#xff0c;我们可以轻松地从文件路径中提取文件名。然而&#xff0c;这个方法在处理特殊字符时存在一些问题&#xff0c;因为它会对这些字符进行转义&#xff0c;导致在不同操作系统上的兼容性问题。在这篇文章中&…

C++ boost planner_cond_.wait(lock) 报错1225

1.如下程序段 boost unique_lock doesn’t own the mutex: Operation not permitted 问题&#xff1a; 其中makePlan是一个线程。这里的unlock导致错误这个报错 boost unique_lock doesn’t own the mutex: Operation not permitted bool navigation::makePlan(){ //cv::named…

MySQL中如何快速定位占用CPU过高的SQL

作为DBA工作中都会遇到过数据库服务器CPU飙升的场景&#xff0c;我们该如何快速定位问题&#xff1f;又该如何快速找到具体是哪个SQL引发的CPU异常呢&#xff1f;下面我们说两个方法。聊聊MySQL中如何快速定位占用CPU过高的SQL。 技术人人都可以磨炼&#xff0c;但处理问题的思…

华为OD机试 - 多段线数据压缩(Java JS Python C)

在线OJ刷题 题目详情 - 多段线数据压缩 - Hydro 题目描述 下图中,每个方块代表一个像素,每个像素用其行号和列号表示。 为简化处理,多线段的走向只能是水平、竖直、斜向45度。 上图中的多线段可以用下面的坐标串表示:(2,8),(3,7),(3,6),(3,5),(4,4),(5,3),(6,2),(7,3),(…

042、序列模型

之——从时序中获取信息 目录 之——从时序中获取信息 杂谈 正文 1.建模 2.方案A-马尔科夫假设 3.方案B-潜变量模型 4.简单实现 杂谈 很多连续的数据都是有前后的时间相关性的&#xff0c;并不是每一个单独的数据是随机出现的。在时序中会蕴含一些空间结构的变化信息、…

【数据科学】一文彻底理清数据、数据类型、数据结构的概念

一、什么是数据&#xff1f; 入门数据学科&#xff0c;首先第一步要认识数据什么&#xff0c;可能大多数人都无法对数据做一个准确的定义&#xff0c;在我们印象中&#xff0c;提到数据首先头脑浮现的是数据表格&#xff0c;是一堆堆数字&#xff0c;那么数据就是数字吗&#x…

SpringBoot 2.0 中默认 HikariCP 数据库连接池原理解析

作为后台服务开发&#xff0c;在日常工作中我们天天都在跟数据库打交道&#xff0c;一直在进行各种CRUD操作&#xff0c;都会使用到数据库连接池。按照发展历程&#xff0c;业界知名的数据库连接池有以下几种&#xff1a;c3p0、DBCP、Tomcat JDBC Connection Pool、Druid 等&am…

阿里云服务器记录

阿里云服务器记录 CentOS 8.4 64位 SCC版 CentOS 7.9 64位 SCC版 CentOS 7.9 64位 CentOS 7.9 64位 UEFI版 Alibaba Cloud Linux Anolis OS CentOS Windows Server Ubuntu Debian Fedora OpenSUSE Rocky Linux CentOS Stream AlmaLinux 阿里云服务器有个scc版&#xff0c;这个…

Flask+Mysql项目docker-compose部署(Pythondocker-compose详细步骤)

一、前言 环境&#xff1a; Linux、docker、docker-compose、python(Flask)、Mysql 简介&#xff1a; 简单使用Flask框架写的查询Mysql数据接口&#xff0c;使用docker部署&#xff0c;shell脚本启动 优势&#xff1a; 采用docker方式部署更加便于维护&#xff0c;更加简单快…