岭回归等价于对数据矩阵进行维纳滤波

岭回归等价于对数据矩阵进行维纳滤波

背景知识之普通最小二乘法

假设训练集 D \mathcal{D} D 包含 m m m 个样本 { x ( i ) , y ( i ) } i = 1 m \left\{\mathbf{x}^{(i)}, y^{(i)}\right\}_{i=1}^{m} { x(i),y(i)}i=1m。每个样本 i i i 包括一个标量目标值 y ( i ) y^{(i)} y(i) 和一个包含 n n n 个特征的特征向量 x ( i ) \mathbf{x}^{(i)} x(i),即 x ( i ) = [ x 1 ( i ) , x 2 ( i ) , … , x n ( i ) ] T ⁡ \mathbf{x}^{(i)}=\left[x_{1}^{(i)}, x_{2}^{(i)}, \dots, x_{n}^{(i)}\right]^{\operatorname{T}} x(i)=[x1(i),x2(i),,xn(i)]T。这一般会是一个过定系统,也就是说方程组中的方程数量多于未知数的数量,也即 m > n m > n m>n。训练样本数量一般远大于模型参数在线性回归模型中,目标变量 y ( i ) y^{(i)} y(i) 是特征的线性函数:

∑ j = 1 n x j ( i ) θ j = y ( i ) , ( i = 1 , 2 , … , m ) , \sum _{j=1}^{n}x_{j}^{(i)}\theta _{j}=y^{(i)}, \quad (i=1,2,\dots ,m), j=1nxj(i)θj=y(i),(i=1,2,,m),

该系统包含 m m m 个线性方程和 n n n 个未知系数 θ 1 , θ 2 , … , θ n \theta_{1}, \theta_{2}, \dots, \theta_{n} θ1,θ2,,θn,并且满足 m > n m > n m>n。可以将其写成矩阵形式为

X θ = y , \mathbf{X} \boldsymbol{\theta} = \mathbf{y}, Xθ=y,

其中

X = [ x 1 ( 1 ) x 2 ( 1 ) ⋯ x n ( 1 ) x 1 ( 2 ) x 2 ( 2 ) ⋯ x n ( 2 ) ⋮ ⋮ ⋱ ⋮ x 1 ( m ) x 2 ( m ) ⋯ x n ( m ) ] , θ = [ θ 1 θ 2 ⋮ θ n ] , y = [ y ( 1 ) y ( 2 ) ⋮ y ( m ) ] . \mathbf{X} = \begin{bmatrix} x_{1}^{(1)} & x_{2}^{(1)} & \cdots & x_{n}^{(1)} \\ x_{1}^{(2)} & x_{2}^{(2)} & \cdots & x_{n}^{(2)} \\ \vdots & \vdots & \ddots & \vdots \\ x_{1}^{(m)} & x_{2}^{(m)} & \cdots & x_{n}^{(m)} \end{bmatrix}, \quad \boldsymbol{\theta} = \begin{bmatrix} \theta_{1} \\ \theta_{2} \\ \vdots \\ \theta_{n} \end{bmatrix}, \quad \mathbf{y} = \begin{bmatrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(m)} \end{bmatrix}. X= x1(1)x1(2)x1(m)x2(1)x2(2)x2(m)xn(1)xn(2)xn(m) ,θ= θ1θ2θn ,y= y(1)y(2)y(m) .

(注意:对于上述线性模型, X \mathbf{X} X 的第一列通常全为1,称为"截距项"或"偏置项",其余列则包含实际的特征数据。这里的 n n n 等于特征数量加一。)

这样的系统通常没有精确解,因此目标是找到系数 θ \boldsymbol{\theta} θ,使方程的拟合"最佳",在这种情况下,通过求解二次最小化问题来实现:

θ ^ = arg min ⁡ θ   J ( θ ) , \hat{\boldsymbol{\theta}} = \underset{\boldsymbol{\theta}}{\operatorname{arg\,min}} \, J(\boldsymbol{\theta}), θ^=θargminJ(θ),

其中目标函数 J J J 定义为

J ( θ ) = ∑ i = 1 m ( y ( i ) − ∑ j = 1 n x j ( i ) θ j ) 2 = ∥ y − X θ ∥ 2 = ( y − X θ ) T ⁡ ( y − X θ ) . J(\boldsymbol{\theta}) = \sum_{i=1}^{m}\left(y^{(i)}-\sum_{j=1}^{n}x^{(i)}_{j}\theta_{j}\right)^{2} = \left\| \mathbf{y} - \mathbf{X} \boldsymbol{\theta} \right\|^{2} = \left(\mathbf{y} - \mathbf{X} \boldsymbol{\theta}\right)^{\operatorname{T}}\left(\mathbf{y} - \mathbf{X} \boldsymbol{\theta}\right). J(θ)=i=1m

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对二进制数据进行维纳滤波的思路是,先将二进制数据转换为符号形式(例如 BPSK 或 QPSK 等),然后进行复数形式的卷积和滤波,最后将符号形式的输出转换回二进制形式。 以下是一个简单的 MATLAB 实现: ```matlab % 生成二进制数据 data = randi([0, 1], 1, 10000); % 将二进制数据转换为符号形式 symbols = 2 * data - 1; % 生成信道响应 h = [1, 0.5, 0.2, 0.1]; % 对符号进行卷积 conv_symbols = conv(symbols, h); % 添加高斯噪声 noise = randn(1, length(conv_symbols)); snr = 10; % 信噪比为 10dB noise_power = norm(noise)^2 / length(noise); signal_power = norm(conv_symbols)^2 / length(conv_symbols); scale_factor = sqrt(signal_power / (noise_power * 10^(snr/10))); noisy_symbols = conv_symbols + scale_factor * noise; % 使用 Wiener 滤波器进行滤波 wiener_filter = conj(fft(h, length(noisy_symbols))) ./ (abs(fft(h, length(noisy_symbols))).^2 + noise_power/signal_power/10^(snr/10)); filtered_symbols = ifft(fft(noisy_symbols, length(noisy_symbols)) .* wiener_filter); % 将符号形式的输出转换为二进制形式 filtered_data = (real(filtered_symbols) > 0); % 计算误码率 error_rate = sum(abs(filtered_data - data)) / length(data); ``` 其中,`data` 是输入的二进制数据,`h` 是信道响应,`snr` 是信噪比(以分贝为单位)。代码首先将二进制数据转换为符号形式,然后生成经过信道的符号数据,并添加高斯噪声,然后使用 Wiener 滤波器进行滤波,最后将符号形式的输出转换回二进制形式并计算误码率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值