硬阈值 & 软阈值

1 定义

 

1.1 硬阈值

硬阈值的定义如下:

        

相当于

        

1.2 软阈值

软阈值的定义如下:

        

相当于

        
1.3 二者对比(可视化解释)

 这是一张很经典地表述软阈值和硬阈值区别的图,其中软阈值是蓝色的线,他没有突变;硬阈值是红色的虚线,在±a的时候会有一个突变

 

2 二者的作用

2.1 硬阈值

硬阈值可以解决如下优化问题:

argmin_x||X-B||^2_2+\lambda||X||_0

其中X=[x_1,x_2,\dots,x_N],B=[b_1,b_2,\dots,b_N]

||X||_0表示是向量X的零范数(向量X中非零元素的个数)

 根据范数的定义,我们可以把上面的优化问题逐项拆开:

这里|x|_0表示当前元素x是否非零

 于是我们就可以将求解上述的一个优化问题转化为求解N个独立的优化问题

f(x)=(x-b)^2+\lambda|x|_0

进一步,我们可以写成:

 对于x≠0的部分,我们知道f(x)的最小值在x=b的时候取得,最小值为λ。

对于x=0的部分,我们就看b^2和λ哪个更小,小的将成为f(x)的最小值

        如果b^2 > \lambda,那么最小值在x=b的时候取到;反之,那么最小值在x=0处取到,

也即

 

 所以我们不难发现,这样的一个优化函数和硬阈值一一对应

 2.2 软阈值

和硬阈值同理,软阈值也和一种形式的优化问题一一对应,唯一的区别是||X||在硬阈值中是零范数,在软阈值中是一范数

argmin_x||X-B||^2_2+\lambda||X||_1

同样也可以把优化问题拆分开来 

同样也可以解N个独立的优化函数

f(x)=(x-b)^2+\lambda|x|

对f(x)求导,有:

 

 零倒数为零,有:

 (1) x小于0的时候,最小值在x取b+\frac{\lambda}{2}的时候取到

如果b+\frac{\lambda}{2}小于0(即b<-\frac{\lambda}{2}),那么的确argmin f(x)=b+\frac{\lambda}{2}

如果b+\frac{\lambda}{2}大于0(即b>-\frac{\lambda}{2}),那么此时argmin f(x)=0

(2)x大于0的时候,最小值在x取b-\frac{\lambda}{2}的时候取到

如果b-\frac{\lambda}{2}大于0(即b>\frac{\lambda}{2}),那么的确argmin f(x)=b-\frac{\lambda}{2}

如果b-\frac{\lambda}{2}小于0(即b<\frac{\lambda}{2}),那么此时argmin f(x)=0

总结一下,有:

参考资料

软阈值(Soft Thresholding)函数解读_彬彬有礼的专栏-CSDN博客_软阈值

硬阈值(Hard Thresholding)函数解读_彬彬有礼的专栏-CSDN博客_阈值函数

  • 11
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
小波变换是一种数学信号处理技术,它将信号分解成不同频率的子信号。在Python中,我们可以使用PyWavelets库来实现小波变换。该库提供了丰富的小波变换函数和工具,可以方便地进行小波分析。 阈值阈值是小波分析中的两种常用阈值处理方法,用于降低噪声或压缩信号。阈值将小于某一阈值的小波系数置为零,大于该阈值的系数保持不变。这种方法可以有效地减少噪声,但也会损失一部分信号细节。阈值则直接将小于阈值的系数置为零,保留大于阈值的系数。相比阈值阈值处理具有更强的去噪效果。 在Python中,可以使用PyWavelets库的`threshold`函数来进行阈值阈值处理。通过将小波系数作为输入,并指定阈值大小和阈值处理类型,可以实现相应的阈值处理操作。例如,可以使用以下代码实现阈值处理: ``` import pywt def soft_thresholding(coeffs, threshold): return pywt.threshold(coeffs, threshold, mode='soft') # 示例 data = [1, 2, 3, 4, 5, 6, 7, 8] wavelet = 'db1' coeffs = pywt.wavedec(data, wavelet) threshold = 2.5 processed_coeffs = soft_thresholding(coeffs, threshold) ``` 其中,`coeffs`为小波系数,`threshold`为阈值大小,`mode`参数指定了阈值处理。 同样地,可通过修改`mode`参数为`hard`来实现阈值处理。例如,可以使用以下代码实现阈值处理: ``` import pywt def hard_thresholding(coeffs, threshold): return pywt.threshold(coeffs, threshold, mode='hard') # 示例 data = [1, 2, 3, 4, 5, 6, 7, 8] wavelet = 'db1' coeffs = pywt.wavedec(data, wavelet) threshold = 2.5 processed_coeffs = hard_thresholding(coeffs, threshold) ``` 总之,小波变换、阈值阈值是在信号处理中常用的技术。在Python中,可以利用PyWavelets库来实现小波变换,并通过调用`threshold`函数实现阈值阈值处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值