当机器学习遇见压缩感知:用少量数据重建完整世界
<p>在数据处理的世界里,我们常常会遇到这样的问题:数据量太大,存储和传输成本高昂,但又不能丢失重要信息。</p><p>这时候,<strong>压缩感知</strong>(<code>Compressive Sensing</code>,<code>CS</code>)就像一位神奇的“数据魔法师”,能够帮助我们高效地处理数据。</p>
<p>本文我们就来深入了解一下压缩感知是什么,它的原理和作用,以及如何用代码实现它。</p>
<h1 id="1-压缩感知是什么">1. 压缩感知是什么?</h1>
<p><strong>压缩感知</strong>是一种新兴的信号处理技术,它打破了传统信号处理中<strong>“先采样再压缩”</strong>的模式。</p>
<p>在传统的信号处理中,我们通常需要按照<strong>奈奎斯特采样定理</strong>(<code>Nyquist Sampling Theorem</code>)来采集信号,即采样频率至少是信号最高频率的两倍。</p>
<p>这样做的结果就是会产生大量的数据,其中很多数据可能是冗余的。</p>
<p>而<strong>压缩感知</strong>的<strong>核心思想</strong>是:信号在某些域(如小波域)中往往是稀疏的,也就是说大部分的系数是零或者接近零的。</p>
<p>我们可以利用这种稀疏性,在<strong>采样的同时进行压缩</strong>,直接获取信号的少量关键信息,然后通过特定的算法重建出原始信号。</p>
<h1 id="2-压缩感知主要原理">2. 压缩感知主要原理</h1>
<p>压缩感知的实现原理主要基于下面三个方面:</p>
<h2 id="21-信号的稀疏性">2.1. 信号的稀疏性</h2>
<p>信号的<strong>稀疏性</strong>是<strong>压缩感知</strong>的基础。</p>
<p>假设我们有一个信号<span class="math inline">\(x\)</span> ,它在某个变换域(如小波变换、傅里叶变换等)中表示为 <span class="math inline">\(\theta x\)</span> ,</p>
<p>其中<span class="math inline">\(\theta\)</span> 是变换矩阵。如果$ \theta x$ 中大部分元素是零或者接近零,那么我们称信号$ x$ 在该域是稀疏的。</p>
<p>例如,一个音频信号在小波域中可能只有少数几个小波系数是显著的,其他大部分系数都是零。</p>
<h2 id="22-测量矩阵">2.2. 测量矩阵</h2>
<p>为了获取信号的关键信息,我们需要设计一个测量矩阵$ \Phi$ 。</p>
<p>这个矩阵的作用是将原始信号$ x $ 投影到一个低维空间,得到测量值$ y $ 。</p>
<p>测量值的数量$ m $ 通常远小于原始信号的维度$ n $ ,即$ m\ll n $ 。</p>
<p>测量过程可以用公式表示为:$ y=\Phi x $</p>
<p>其中,$ y $ 是测量值,$ \Phi $ 是测量矩阵,$ x $ 是原始信号。</p>
<h2 id="23-信号重建">2.3. 信号重建</h2>
<p>有了测量值$ y $ 测量矩阵$ \Phi $ ,我们还需要通过某种算法重建出原始信号$ x $ 。</p>
<p>由于$ m\ll n $ ,这是一个欠定方程组,有无数个解。</p>
<p>但因为信号是稀疏的,我们可以通过求解以下优化问题来找到最稀疏的解:</p>
<p>$ \min|x|_1\quad\text{subject to}\quad y=\Phi x $</p>
<p>这里,$ |x|_1 $ 表示$ x $ 的$ L_1 $ 范数,即$ x $ 中所有元素绝对值的和。</p>
<p>通过最小化$ L_1 $ 范数,我们可以找到最稀疏的解。</p>
<h1 id="3-压缩感知的作用">3. 压缩感知的作用</h1>
<p><strong>压缩感知</strong>的主要作用是高效地<strong>采集</strong>和<strong>重建</strong>信号,它在许多领域都有广泛的应用,例如:</p>
<ul>
<li><strong>图像处理</strong>:在图像压缩和重建中,压缩感知可以减少存储和传输的数据量,同时保持图像的高质量。</li>
<li><strong>无线通信</strong>:在无线传感器网络中,压缩感知可以减少传感器节点的能耗,延长网络的使用寿命。</li>
<li><strong>生物医学成像</strong>:在磁共振成像(<code>MRI</code>)中,压缩感知可以减少扫描时间,提高成像效率。</li>
<li><strong>雷达系统</strong>:提升目标识别速度。</li>
</ul>
<p><strong>压缩感知</strong>与<strong>传统采样</strong>的对比如下表:</p>
<table>
<thead>
<tr>
<th>指标</th>
<th>传统采样</th>
<th>压缩感知</th>
</tr>
</thead>
<tbody>
<tr>
<td>采样率需求</td>
<td>高</td>
<td>极低</td>
</tr>
<tr>
<td>硬件成本</td>
<td>高</td>
<td>低</td>
</tr>
<tr>
<td>重建复杂度</td>
<td>低</td>
<td>高</td>
</tr>
<tr>
<td>适用场景</td>
<td>常规信号</td>
<td>稀疏信号</td>
</tr>
</tbody>
</table>
<h1 id="4-代码示例">4. 代码示例</h1>
<p>接下来,我们用<code>scikit-learn</code>库来实现一个简单的<strong>压缩感知</strong>示例。</p>
<p>我们首先生成一个稀疏信号,通过测量矩阵获取测量值,然后用<code>Lasso</code>回归(一种基于$ L_1 $范数的优化算法)来重建信号。</p>
<pre><code class="language-python">import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso
# 1. 生成稀疏信号
n = 100# 信号长度
k = 10 # 稀疏度
x_true = np.zeros(n)
x_true[:k] = np.random.randn(k)# 前 k 个元素是随机值,其余为零
np.random.shuffle(x_true) # 打乱顺序
# 2. 生成测量矩阵
m = 30# 测量值数量
Phi = np.random.randn(m, n) / np.sqrt(m)# 随机高斯矩阵
# 3. 获取测量值
y = Phi @ x_true
# 4. 使用 Lasso 回归重建信号
lasso = Lasso(alpha=0.01, max_iter=10000)
lasso.fit(Phi, y)
x_reconstructed = lasso.coef_
print(len(y))
# 5. 绘制结果
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.stem(x_true, linefmt='b-', markerfmt='bo', basefmt='r-')
plt.title("原始稀疏信号")
plt.subplot(2, 1, 2)
plt.stem(x_reconstructed, linefmt='r-', markerfmt='ro', basefmt='r-')
plt.title("根据压缩信息重建的信号")
plt.show()
</code></pre>
<p>代码中的5个步骤说明:</p>
<ol>
<li><strong>生成稀疏信号</strong>:我们创建了一个长度为 100 的信号,其中只有 10 个非零元素。这些非零元素是随机生成的,并且打乱了顺序。</li>
<li><strong>生成测量矩阵</strong>:我们使用了一个随机高斯矩阵作为测量矩阵,其维度为$ 30\times 100 $。</li>
<li><strong>获取测量值</strong>:通过矩阵乘法$ y=\Phi x $获取测量值。</li>
<li><strong>重建信号</strong>:使用<code>Lasso</code>回归来重建信号。<code>Lasso</code>回归通过最小化$ L_1 $范数来找到最稀疏的解。</li>
<li><strong>绘制结果</strong>:最后,我们绘制原始信号和重建信号的对比图。</li>
</ol>
<p>运行结果如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/83005/202506/83005-20250608122232406-1042896090.png" alt="" loading="lazy"></p>
<p>注意:因为数据是<strong>随机生成</strong>的,所以你执行的结果也许和上图不一样。</p>
<h1 id="5-总结">5. 总结</h1>
<p><strong>压缩感知</strong>是一种强大的信号处理技术,它利用信号的稀疏性,在采样的同时进行压缩,并通过优化算法重建信号。</p>
<p>在实际应用中,<strong>压缩感知</strong>可以大大提高数据处理的效率,减少存储和传输成本,同时保持信号的质量。</p><br><br>
来源:https://www.cnblogs.com/wang_yb/p/18919251
頁:
[1]