⚡可行梯度方向法⚡(Feasible Gradient Direction Method ,FGDM)

简介: ⚡可行梯度方向法⚡(Feasible Gradient Direction Method ,FGDM)

⚡最近很烦⚡

有一阵子没更新了,感觉整个暑假被忽悠了,六月份找Boss指明了一个Direction,然后整个暑假都在忙于补充Proposal相关的Knowledge,但是,被忽悠局局长Boss给忽悠了(谁人能明白其中的难受),干工科的master怎么可能不依靠数据,本来就知道拿不到数据,还跟着让指哪儿打哪儿,最终项目还是拿不到,唉~,Project always Project(Boss),一心就只有Project,这还让等到Sep去Proposal,调研的都白费了,谁爱去Proposal谁去。终究或许还是自己太菜了。


Sometimes one pays most for the things one gets for nothing.


最近看到算法比较多,其中发现一个FGD(Feasible Gradient Direction)方法,可行梯度方向法,很是疑惑,到处寻找答案,找不到。和Zoutendijk可行方向法相比好像又有所区别,下面根据Paper的SEDA(sparse exponential discrimination analysis)稀疏指数判别分析算法求解其目标函数进行解释一下(菜鸡的自我修养)。


背景

首先,先介绍一下背景,之前出过一篇LDA的解释Blog,LDA主要用于降维和简单分类,在多分类问题上比较有用。


在过去的几十年里,针对LDA方法提出过很多中改进的方法,如惩罚判别分析(PDA)、两阶段主成分判别分析(PCA+LDA)、零空间LDA(NLDA)、指数判别分析(EDA)、灵活判别分析(FDA)、混合判别分析(HDA)、稀疏判别分析(SDA)等等…一系列改进方法。


最近研究到一篇是关于对指数判别分析(EDA)的改进方法—稀疏指数判别分析(sparse exponential discrimination analysis,SEDA)。


简单来说一下作者的改进路线。


EDA

image.png

image.png

而改进的EDA的目标函数长这样:

image.png

注意,其中

image.png

此为改进的地方,可使用类间距离与类内距离的比率来评估判别分析方法的性能。

SEDA

现在我们加上EDA的约束条件,

image.png

将其进一步等价为,

image.png

加上lasso(套索)惩罚后得到SEDA,

image.png

其中,γ为一个非负调谐参数,应予以指定。


一般来说,随着lasso惩罚因子γ的增加,SEDA算法的模型可解释性和判别性能有所提高,但当γ 超过一定程度时,情况正好相反。


(中间过程过于复杂已忽略)


最终变形为下面这样的目标函数(为凸函数,原本为非凸函数,估计是为了增加一个创新点吧或许,本来可以直接拉格朗日干起来,搞非凸函数求其最优解,现在改进使用最小化-最大化(MM)算法将其重新表达为一个迭代凸优化问题变为凸函数,学到了):


image.png

可行梯度方向法

这里主要针对稀疏判别优化的可行梯度方向法,将(*)式的约束优化问题转变为无约束优化问题,(公式太多了,就不打公式了哈)

image.png

上式的Hessian矩阵显然是对称正定的。因此,上式的无约束优化问题是严格凸的,这意味着其极值点对应于最优解。首先将上式的优化问题简化为一个标准的二次规划问题,然后利用一种可行的梯度方向法来有效地求解该问题。

将上式进行进一步优化,

image.png

image.png

image.png

同理,原无约束优化函数变为,

image.png

再将二次项重新表述为,

image.png

同样的,

image.png

因此,无约束优化的问题可以简化为一个标准的二次规划(二次规划凸优化有个好处,就是,局部最优解即为全局最优解),

image.png

其中,

image.png

下面是关于可行梯度方向法核心观点:

image.png

image.png

image.png

可行梯度方向法示意图

image.png

image.png

其中,τ表示为

image.png


相关文章
|
算法 安全 机器人
Python语言如何使用MindOpt建模并求解二次规划问题
MindOpt是一款高效的优化算法软件包,求解算法实现了线性规划(LP)、混合整数线性规划(MILP)、二次规划(QP),可以支持命令行、c、c++、java和python调用。接下来我们将发布一系列文章,讲述各个语言如何使用 MindOpt 来求解数学规划问题。
Python语言如何使用MindOpt建模并求解二次规划问题
|
缓存 PyTorch 数据处理
基于Pytorch的PyTorch Geometric(PYG)库构造个人数据集
基于Pytorch的PyTorch Geometric(PYG)库构造个人数据集
1293 0
基于Pytorch的PyTorch Geometric(PYG)库构造个人数据集
|
11月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
315 2
|
Python
Python中遇到奇怪的错误ValueError: bad marshal data
不是代码出的问题,是*.pyc文件被改动了。解决方法,删除所有*.pyc文件再运行
4952 0
|
7月前
|
并行计算 Ubuntu Docker
kTransformers DeepSeek R1 部署全流程指南
kTransformers DeepSeek R1 部署全流程指南
|
机器学习/深度学习 算法 数据可视化
Fisher模型在统计学和机器学习领域通常指的是Fisher线性判别分析(Fisher's Linear Discriminant Analysis,简称LDA)
Fisher模型在统计学和机器学习领域通常指的是Fisher线性判别分析(Fisher's Linear Discriminant Analysis,简称LDA)
|
传感器 机器学习/深度学习 资源调度
【TDOA定位】基于chan和talor算法实现TDOA定位含性能对比matlab代码
【TDOA定位】基于chan和talor算法实现TDOA定位含性能对比matlab代码
|
数据采集
代理IP是按照流量计费还是数量计费好?
在选择代理IP服务提供商时,一项重要的考虑因素就是计费方式。流量计费和数量计费,具体该如何进行选择呢?
|
数据可视化 测试技术
9个时间序列交叉验证方法的介绍和对比
在本文中,我们收集了时间序列的常用的9种交叉验证方法。这些包括样本外验证(holdout)或流行的K-fold交叉验证的几个扩展。
1935 0
9个时间序列交叉验证方法的介绍和对比
|
Kubernetes 容器 Perl
在k8S中,如何向Pod中指定容器传递环境变量?有哪些方式?
在k8S中,如何向Pod中指定容器传递环境变量?有哪些方式?