如何对k-svd初始化字典进行改进
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对k-svd初始化字典进行改进相关的知识,希望对你有一定的参考价值。
参考技术A 先在数据传输中下载基本信息,再在里面的其他传输中的字典下载。再到系统维护中的纳税核定中选择“报表选择”,也就是你要申报的表格种类,这就哦了K-SVD字典学习及其实现(Python)
算法思想
算法求解思路为交替迭代的进行稀疏编码和字典更新两个步骤. K-SVD在构建字典步骤中,K-SVD不仅仅将原子依次更新,对于原子对应的稀疏矩阵中行向量也依次进行了修正. 不像MOP,K-SVD不需要对矩阵求逆,而是利用SVD数学分析方法得到了一个新的原子和修正的系数向量.
固定系数矩阵X和字典矩阵D,字典的第
k
个原子为
∥Y−DX∥2F=∥Y−∑j=1KdjxjT∥2F=∥(Y−∑j≠kdjxjT)−dkxjT∥2F=∥Ek−dkxkT∥2F
在得到当前误差矩阵 Ek 后,需要调整 dk 和 XkT ,使其乘积与 Ek 的误差尽可能的小.
如果直接对
dk
和
XkT
进行更新,可能导致
xkT
不稀疏. 所以可以先把原有向量
xkT
中零元素去除,保留非零项,构成向量
xkR
,然后从误差矩阵
Ek
中取出相应的列向量,构成矩阵
ERk
. 对
ERk
进行SVD(Singular Value Decomposition)分解,有
ERk=UΔVT
,由
U
的第一列更新
Python实现
import numpy as np
from sklearn import linear_model
import scipy.misc
from matplotlib import pyplot as plt
class KSVD(object):
def __init__(self, n_components, max_iter=30, tol=1e-6,
n_nonzero_coefs=None):
"""
稀疏模型Y = DX,Y为样本矩阵,使用KSVD动态更新字典矩阵D和稀疏矩阵X
:param n_components: 字典所含原子个数(字典的列数)
:param max_iter: 最大迭代次数
:param tol: 稀疏表示结果的容差
:param n_nonzero_coefs: 稀疏度
"""
self.dictionary = None
self.sparsecode = None
self.max_iter = max_iter
self.tol = tol
self.n_components = n_components
self.n_nonzero_coefs = n_nonzero_coefs
def _initialize(self, y)以上是关于如何对k-svd初始化字典进行改进的主要内容,如果未能解决你的问题,请参考以下文章