nonzero

更新时间:2022-12-27 02:30:17 阅读: 评论:0


2022年12月27日发(作者:odian8)

K-SVD字典学习及其实现(Python)

算法思想

算法求解思路为交替迭代的进⾏稀疏编码和字典更新两个步骤.K-SVD在构建字典步骤中,K-SVD不仅仅将原⼦依次更新,对于原⼦对应的稀疏矩阵

中⾏向量也依次进⾏了修正.不像MOP,K-SVD不需要对矩阵求逆,⽽是利⽤SVD数学分析⽅法得到了⼀个新的原⼦和修正的系数向量.

固定系数矩阵X和字典矩阵D,字典的第k个原⼦为d

k

,同时d

k

对应的稀疏矩阵为X中的第k个⾏向量x

k

T

.假设当前更新进⾏到原⼦d

k

,样本矩阵和字典

逼近的误差为:

‖Y−DX‖

2

F

=‖Y−

K

j=1d

j

x

j

T

2

F

=‖(Y−

j≠kd

j

x

j

T

)−d

k

x

j

T

2

F

=‖E

k

−d

k

x

k

T

2

F

在得到当前误差矩阵E

k

后,需要调整d

k

和X

k

T

,使其乘积与E

k

的误差尽可能的⼩.

如果直接对d

k

和X

k

T

进⾏更新,可能导致x

k

T

不稀疏.所以可以先把原有向量x

k

T

中零元素去除,保留⾮零项,构成向量x

k

R

,然后从误差矩阵E

k

中取出相应

的列向量,构成矩阵E

R

k

.对E

R

k

进⾏(SingularValueDecomposition)分解,有E

R

k

=UΔV

T

,由U的第⼀列更新d

k

,由V的第⼀列乘以Δ(1,1)所得

结果更新x

k

R

.

Python实现

importnumpyasnp

fromsklearnimportlinear_model

frommatplotlibimportpyplotasplt

classKSVD(object):

def__init__(lf,n_components,max_iter=30,tol=1e-6,

n_nonzero_coefs=None):

"""

稀疏模型Y=DX,Y为样本矩阵,使⽤KSVD动态更新字典矩阵D和稀疏矩阵X

:paramn_components:字典所含原⼦个数(字典的列数)

:parammax_iter:最⼤迭代次数

:paramtol:稀疏表⽰结果的容差

:paramn_nonzero_coefs:稀疏度

"""

nary=None

code=None

_iter=max_iter

=tol

lf.n_components=n_components

lf.n_nonzero_coefs=n_nonzero_coefs

def_initialize(lf,y):

"""

初始化字典矩阵

"""

u,s,v=(y)

nary=u[:,:lf.n_components]

def_update_dict(lf,y,d,x):

"""

使⽤KSVD更新字典的过程

"""

foriinrange(lf.n_components):

index=o(x[i,:])[0]

iflen(index)==0:

continue

d[:,i]=0

r=((d,x))[:,index]

u,s,v=(r,full_matrices=Fal)

d[:,i]=u[:,0].T

x[i,index]=s[0]*v[0,:]

returnd,x

deffit(lf,y):

"""

KSVD迭代过程

"""

lf._initialize(y)

foriinrange(_iter):

x=linear_onal_mp(nary,y,n_nonzero_coefs=lf.n_nonzero_coefs)

e=((nary,x))

ife<:

break

lf._update_dict(y,nary,x)

code=linear_onal_mp(nary,y,n_nonzero_coefs=lf.n_nonzero_coefs)

nary,code

if__name__=='__main__':

im_ascent=().astype()

ksvd=KSVD(300)

dictionary,sparcode=(im_ascent)

()

t(1,2,1)

(im_ascent)

t(1,2,2)

((sparcode))

()

运⾏结果:

Processingmath:100%

本文发布于:2022-12-27 02:30:17,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/37553.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:socks怎么读
标签:nonzero
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图