最优方向法(MOD)
算法描述
求解模型:
\[\min\sum\limits_i\|x_i\|_0 \quad \mathrm{s.t.} \; \|Y-DX\|^2_F \leq \varepsilon\]
或
\[\min\|Y-DX\|^2_F \quad \mathrm{s.t.} \; \sum\limits_i\|x_i\|_0 \leq T_0\]
MOD(Method of Optimal Direction)是早期的基于样本学习的字典学习算法. 设目标函数中\(X\)已知,信号的误差定义如下:
\[\|E\|^2_F = \|Y - DX\|^2_F\]
MOD算法更新字典的策略就是实现表征误差最小化,所以公式两端针对\(D\)求偏导,会推到出\((Y - DX)X^{\mathrm{T}} = 0\),整个字典的更新过程如下:
\[D^{n + 1} = Y (X^n)^{\mathrm{T}} \cdot (X^n(X^n)^{\mathrm{T}})^{-1}\]
一般MOD算法需要几十次迭代即可收敛是一个比较可行的方法。缺点在于运算中需要对矩阵求逆,造成计算量过大.
流程描述
输入:训练样本集\(X = \{x_i\}^N_{i=1}\)
输出:字典\(D \in \mathbb{R}^{n \times m} (m > n)\)
初始化:随机构造一个字典初值\(D^{(0)} \in \mathbb{R}^{n \times m}\),并进行列归一化,迭代次数\(J=1\)
循环直到满足迭代终止条件
- 求解稀疏系数:\(\min\sum\limits_i\|x_i\|_0 \quad \mathrm{s.t.} \; \|Y-DX\|^2_F \leq \varepsilon\)
- 更新字典:\(D^{J+1}=\arg\min \|Y - DX\|^2_F = D^{n + 1} = Y (X^n)^{\mathrm{T}} \cdot (X^n(X^n)^{\mathrm{T}})^{-1}\)
- \(J=J+1\)
迭代结束
最优方向法(MOD)的更多相关文章
- 字典更新与K-SVD
字典更新与K-SVD 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 矩阵的奇异值分解 (Singular Value Decomposition, S ...
- JZOJ 3505. 【NOIP2013模拟11.4A组】积木(brick)
3505. [NOIP2013模拟11.4A组]积木(brick) (File IO): input:brick.in output:brick.out Time Limits: 1000 ms Me ...
- HHKB Programming Contest 2020 D - Squares 题解(思维)
题目链接 题目大意 给你一个边长为n的正方形和边长为a和b的正方形,要求把边长为a和b的正方形放在长度为n的正方形内,且没有覆盖(可以相邻)求有多少种放法(mod 1e9+7) 题目思路 这个思路不是 ...
- 欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去
写诗或者写程序的时候,我们经常要跟欧几里得算法打交道.然而有没要考虑到为什么欧几里得算法是有效且高效的,一些偏激(好吧,请允许我用这个带有浓重个人情感色彩的词汇)的计算机科学家认为,除非程序的正确性在 ...
- sql调优方法实用性总结(一)
1.选择最有效率的表名顺序(只在基于规则的优化器): Oracle的解析器按照从右向左的顺序处理FROM子句中的表名,FROM子句中写在最后的表将被最先处理(基础表先处理,driving table) ...
- JVM调优方法笔记
1.性能工具介绍 jvisualvm jmap jstat jstack/threaddump jprofiler jmeter 2.性能调优4步骤 重现问题 定位问题 模拟问题 解决问题 http: ...
- CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)
Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...
- Wrestling Match---hdu5971(2016CCPC大连 染色法判断是否是二分图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5971 题意:有n个人,编号为1-n, 已知X个人是good,Y个人是bad,m场比赛,每场比赛都有一个 ...
- HDU 4162 Shape Number (最小表示法)
题意:给你一串n个数,求出循环来看一阶差的最小字典序:数字串看成一个顺时针的环,从某一点开始顺时针循环整个环,保证字典序最小就是答案 例如给你 2 1 3 就会得到(1-2+8 注意题意负数需要加8) ...
随机推荐
- linux增加自己的可执行目录 $PATH
Linux中有三种方法可以添加用户的路径到系统路径PATH, 以添加 /etc/apache/bin 为例: 方法一: 直接在命令行中输入: #PATH=$PATH:/etc/apache/bin 这 ...
- 关于onscroll函数兼容各浏览器的方法分析
关于window.onscroll函数兼容各浏览器的方法分析 1.当前文档的渲染模式是决定onscroll函数兼容性根本原因 目前浏览器的排版引擎有三种模式:怪异模式(Quirks mode).接近标 ...
- java 泛型数组列表
如下代码: package com.company; import java.lang.reflect.Array; import java.util.ArrayList; public class ...
- pytest 失败重跑截图
1.环境准备 /*@param: 作者:流浪的python Date:2019/01/19 env:python 3.7(由于3.0-3.5以下部分pytest可能有部分兼容问题安装建议2.7-2.9 ...
- 【题解】洛谷P4158 [SCOI2009] 粉刷匠(DP)
次元传送门:洛谷P4158 思路 f[i][j][k][0/1]表示在坐标为(i,j)的格子 已经涂了k次 (0是此格子涂错 1是此格子涂对)涂对的格子数 显然的是 每次换行都要增加一次次数 那么当j ...
- 【jq】JQuery对select的操作
下拉框 <select id="selectID" name="selectName"> <option vlaue="1" ...
- weex中UISegmentControl实现及遇到的问题
在最近主导的一个项目中,App端的实现使用了weex.通过近一个月的实践,我们发现如果对于人机交互较少的App,即使较少前端经验的人也能迅速进入开发(当然需要一定时间 才能上手weex).在开发的时候 ...
- Linux文本编辑器-vi/vim
vi是Linux命令行界面下的文字编辑器,vim是vi的增强版(Vi IMproved),完全兼容 可以理解成普通的txt文本与word文档之间的差距. 注:还有一款全屏编辑器是nano,可以了解下 ...
- go基础1:Hello world与变量声明
一.go语言版hello world package main # 指明文件属于main包 main包使用后来定义一个独立的可执行程序,而不是库main包中的main函数是特殊的,不管在什么程序中,m ...
- 数据结构与算法之Stack(栈)的应用——in dart
参考教科书上的一个应用例子,用栈来分析一行输入中的括号brackets是否匹配.用stdin读取用户输入,并输出检查结果.exit 退出. 注意这行代码: import 'stack.dart';// ...