赞
踩
字典学习的理论基础是稀疏表征理论,我们假设自然界所有的信号都是稀疏信号,也就是自然可分解。傅里叶变换是基于一组完备的正交基函数来表示信号。小波变换是基于一组完备的正交小波函数来表示信号。上述信号分解方法的局限性在于其自适应能力差,例如傅里叶变换适合平稳信号而不适合非平稳信号分析,小波变换则恰恰相反。针对该问题,基于过完备字典的稀疏表征被提出。稀疏表征的目的是用尽可能少的原子表示目标信号,以获得信号最简单的表达形式。这种稀疏表达方法可以更精确地刻画信号的内在特征。信号稀疏表达的两大核心问题包括稀疏分解和字典选择。严格意义上的稀疏分解是一个非凸的 NP 难的问题,因此需要对其进行次优化求解。常见的稀疏分解方法包括贪婪追踪算法;基于凸优化算法;基于贝叶斯概率估计算法等。信号的稀疏表征不仅仅与稀疏分解有关,同时也与选取的字典有关。一种有效的方法是选取常用的分析字典,例如 Gabor 字典、小波字典、DCT 字典等。这种预定义的字典虽然降低了稀疏分解的复杂度,但是也存在适应性不足的缺点。而学习字典通过训练样本自适应地产生最能匹配目标信号内在结构的原子库,常见的字典学习算法包括 ML、MAP、KSVD 等方法,这些方法大都采用系数更新和字典更新交替优化的方式。尽管字典学习算法的复杂度更高,但是其能获得适应性更强的字典,其分解的稀疏性也
更高。
字典学习最开始是应用在图像处理上的,而后引入到一维机械信号中,但是在网上搜了很久也没有相关的demo,全部都是图像处理的,就很桑心
与正交分解不同,过完备表示能够在更广泛的函数集合里选择基函数,也并非线性无关,这种方式对复杂信号能够有更好的逼近效果,但也有相关的论文针对过完备字典的原子的线性无关进行研究,参考张志强提出的非相关字典学习算法(INK-SVD)。
而过完备的概念就是能够尽可能的包含所提取到的特征,
基于构造初始字典的方式的不同,有很多字典,gabor字典,傅里叶字典,等等,
其中样本用y表示,字典用d表示,稀疏稀疏用x表示,字典d是一个n*k的矩阵,其中的原子(atom)就是一列矩阵,n是原子的维度(dims),k是字典所含的原子个数,而要构造一个过完备字典,则要求其k>n。
字典学习无非两个步骤,第一个步骤就是构造初始字典结构,第二个步骤就是如何更新字典,来求取稀疏稀疏。
而我们实际上求解的问题也就是这样一个等式,由于要求解字典的最稀疏表示和稀疏稀疏,这实际上是一个L0范数的最优化问题,但 L0范数最优化是 NP难问题,很难准确求解,因此通常采用更宽泛的 Lp范数作为稀疏性度量函数。
稀疏稀疏求解算法有如下几类:基追踪法,匹配追踪法,正交匹配追踪法
字典学习算法有如下几类:k-means,最大似然估计法,最佳方向法,移不变字典学习算法,ksvd算法。
有兴趣的大家可以自行查阅资料,这里简要介绍下ksvd的算法流程,其余不做赘述。
代码如下(示例):
import numpy as np from sklearn import linear_model import scipy.misc import matplotlib.pyplot as plt import time from scipy.io import loadmat class KSVD(object): def __init__(self, n_components, max_iter, tol, n_nonzero_coefs): ''' 稀疏模型Y=DX,Y位样本矩阵,使用KSVD动态更新字典矩阵D和稀疏稀疏 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): ''' 初始化字典矩阵 ''' ''' 用随机选取样本的方法来初始化字典矩阵,y=160*3060 y_sample = y.T #y_sample=3060*160 rand_arr = np.arange(y_sample.shape[0])#生成0-3059的数 np.random.shuffle(rand_arr)#将其顺序打乱 shape1 = y_sample[rand_arr[0:200]].T self.dictionary = shape1 print(self.dictionary.shape) for i in range(200): self.dictionary[:,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。