论文阅读(一种新的稀疏PCA求解方式)Sparse PCA: A Geometric Approach

本文主要是介绍论文阅读(一种新的稀疏PCA求解方式)Sparse PCA: A Geometric Approach,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是一篇来自JMLR的论文,论文主要关注稀疏主成分分析(Sparse PCA)的问题,提出了一种新颖的几何解法(GeoSPCA)。

该方法相比传统稀疏PCA的解法的优点:1)更容易找到全局最优;2)计算效率更高;3)因为不再需要计算存储整个协方差矩阵,所以对存储资源需求更少;4)GeoSPCA能够一次性构建所有主成分,而不是通过迭代的方式逐步添加,这有助于避免因迭代过程中的数据秩减而导致的信息损失。

这个笔记不会记录原文中过于数学的证明和推理部分,仅整理原理、结论和算法流程等。对数学推理感兴趣的,可自行到以下地址查看原文:

https://www.jmlr.org/papers/volume24/22-0088/22-0088.pdf

1,什么是稀疏PCA

首先给不了解的读者补充一下稀疏PCA概念:

普通PCA得到的主成分有大量非0的原始变量,所以主成分其实是不太清晰的。稀疏PCA通过减少构建主成分的变量数量,可以提高模型的可解释性、预测能力或降低操作成本。相比较而言,稀疏PCA更适用于需要模型解释性的场景。

稀疏PCA 在普通PCA的基础上,引入了一个惩罚函数。这样做的目的是使得大部分系数变为零,从而凸现出主成分的主要部分。

稀疏PCA的实现通常涉及到在标准的PCA优化问题中加入一个正则化项,以促使某些系数变为零。

2,现有稀疏PCA计算方式的缺陷

大多数现有方法通过迭代方式构建主成分(PCs),这些方法通常无法保证整体最优解,且计算成本较高。

3,本文提出的GeoSPCA方法

这种方法通过将问题转化为一个二元线性优化问题(BLO)来近似原始问题,从而绕开了非凸优化的问题。

GeoSPCA算法一次性构建所有主成分,而不是通过迭代的方式。这种方法通过引入一个参数η来近似原始问题,并通过一系列切割平面算法(cut generation algorithm)来逐步改进解。

切割平面算法的核心思想是逐步添加约束条件(即切割平面),以逼近问题的最优解。

3.1 整体流程思路:

  1. 初始化:算法开始时,首先解决一个没有额外约束的基本二元线性优化问题(BLO),以获得初始解。

  2. 计算当前解的正交投影:对于当前解,计算数据矩阵在由当前解定义的子空间上的正交投影。

  3. 检查投影误差:计算当前解的正交投影与原始数据矩阵之间的差异(即误差)。如果这个误差小于预设的阈值η,当前解就是可接受的。

  4. 生成切割平面:如果投影误差超过阈值η,算法会生成一个新的线性约束(切割平面),该约束会排除当前解,迫使算法在下一次迭代中寻找更好的解。

  5. 迭代过程:将新生成的切割平面添加到优化问题中,并重新解决BLO问题以获得新的解。这个过程会不断重复,直到找到满足误差阈值的解或达到预设的迭代次数。

  6. 终止条件:算法在以下情况下终止:1)找到一个满足误差阈值η的解。2)达到预设的最大迭代次数。3)无法进一步改进当前解。

注:其中,线性约束(也称为切割平面或切割约束)是一种限制变量取值范围的表达式,它以线性方程或不等式的形式出现。

3.2 具体落实的算法

在具体落实层面,原文提出了2个算法。

算法1在给定参数η的情况下,找到一组最优支持(Optimal support),这些支持用于构建稀疏主成分。

算法2是从较大的η值开始,逐步细化η的值,以逼近最优的η值,同时也获得稀疏PCA的最优解。

算法1:

算法步骤如下:

  1. 初始化:开始时,使用一个二元线性优化(BLO)问题,目标是最大化数据矩阵列的范数加权和,约束条件是支持的大小不超过k。

  2. 求解BLO问题:使用BLO求解器找到当前问题的最优解 s∗。

  3. 计算正交投影:对找到的解 s∗,计算数据矩阵在由解 s∗ 定义的子空间上的正交投影,并求解PCA以得到对应的主成分。

  4. 检查投影误差:计算正交投影与原始数据矩阵之间的Frobenius范数误差 η(s∗)。(注:两个矩阵之间的Frobenius范数一般指的是两个矩阵差的Frobenius范数,也就是同位置元素相减后的平方和的平方根)

  5. 生成切割平面:如果误差 η(s∗)超过给定的阈值η,则生成一个新的线性约束(切割平面),将其添加到BLO问题中,以排除当前解。

  6. 迭代:重复求解BLO问题,并根据需要生成和添加新的切割平面,直到找到满足误差阈值的解。

  7. 返回结果:算法返回找到的支持集,这些支持集定义了稀疏主成分。

 算法2:

算法步骤如下:

  1. 初始化:设置初始η值 η0和最优解的η值 η∗ 为较大的值。

  2. 迭代过程:进行多次迭代,每次迭代使用算法1来求解当前η值下的BLO问题。

  3. 更新η值:如果当前解的η值 ηt小于 η∗,并且当前解的函数值 f(ηt) 高于 η∗,则更新 η∗为 ηt,并减小η值以进行下一步迭代。

  4. 检查停止条件:如果经过λ次迭代后没有改进,或者达到预设的迭代次数,则停止迭代。

  5. 返回结果:算法返回找到的近似最优解的支持集 s∗,以及对应的η值 η∗和函数值 f(η*)。

这篇关于论文阅读(一种新的稀疏PCA求解方式)Sparse PCA: A Geometric Approach的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052400

相关文章

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java