【问题标题】:Linear regression -- Stuck in model comparison in Matlab after estimation?线性回归——估计后卡在 Matlab 中的模型比较?
【发布时间】:2017-09-22 21:30:17
【问题描述】:

我想确定估计模型与未来新数据的拟合程度。为此,经常使用预测误差图。基本上,我想比较测量输出和模型输出。我使用最小均方算法作为均衡技术。有人可以帮助绘制模型和测量数据之间的比较的正确方法是什么?如果估计值接近真实,那么曲线应该非常接近。下面是代码。 u 是均衡器的输入,x 是接收到的噪声信号,y 是均衡器的输出,w 是均衡器的权重。是否应该使用xy*w 绘制图形?但是x 很吵。我很困惑,因为测量的输出x 有噪声,而模型输出y*w 是无噪声的。

%% Channel and noise level
h = [0.9 0.3 -0.1]; % Channel
SNRr = 10;              % Noise Level

%% Input/Output data
N = 1000;               % Number of samples
Bits = 2;               % Number of bits for modulation (2-bit for Binary modulation)
data = randi([0 1],1,N);        % Random signal
d = real(pskmod(data,Bits));    % BPSK Modulated signal (desired/output)
r = filter(h,1,d);              % Signal after passing through channel
x = awgn(r, SNRr);              % Noisy Signal after channel (given/input)

%% LMS parameters
epoch = 10;        % Number of epochs (training repetation)
eta = 1e-3;         % Learning rate / step size
order=10;           % Order of the equalizer

U = zeros(1,order); % Input frame
W = zeros(1,order); % Initial Weigths



%% Algorithm
for k = 1 : epoch
    for n = 1 : N
        U(1,2:end) = U(1,1:end-1);  % Sliding window
        U(1,1) = x(n);              % Present Input

        y = (W)*U';             % Calculating output of LMS
        e = d(n) - y;           % Instantaneous error 
        W = W +  eta * e * U ;  % Weight update rule of LMS
        J(k,n) = e * e';        % Instantaneous square error
    end
end

【问题讨论】:

  • 如何应该绘制取决于你想在你的情节中显示什么......

标签: matlab signal-processing curve-fitting least-squares equalizer


【解决方案1】:

让我们一步一步开始:

  1. 首先,当使用一些拟合方法时,使用RMS error 是一个很好的做法。要做到这一点,我们必须找到输入和输出之间的错误。据我了解,x 是我们模型的输入,y 是输出。此外,您已经计算了它们之间的误差。但是您在没有保存的情况下循环使用它。让我们修改您的代码:

    %% Algorithm
    for k = 1 : epoch
        for n = 1 : N
            U(1,2:end) = U(1,1:end-1);  % Sliding window
            U(1,1) = x(n);              % Present Input
    
            y(n) = (W)*U';             % Calculating output of LMS
            e(n) = x(n) - y(n);           % Instantaneous error 
            W = W +  eta * e(n) * U ;  % Weight update rule of LMS
            J(k,n) = e(n) * (e(n))';        % Instantaneous square error
        end
    end
    

    现在e 包含最后一个时期的错误。所以我们可以使用这样的东西:

    rms(e)
    

    我还想用平均误差和标准差来比较结果:

    mean(e)
    std(e)
    

    还有一些可视化:

    histogram(e)
    

  2. 第二个时刻:我们不能将compare 函数仅用于向量!您可以将其用于dynamic system models。为此,您必须采取一些解决方法来将此方法用作动态模型。但是我们可以使用一些函数,例如goodnessOfFit。如果您希望在考虑所有先前数据点的每个步骤中出现类似错误,请进行一些数学解决方法 - 使用 [1:currentNumber] 在每个点计算它。

  3. 关于使用 LMS 方法。有计算LMS的内置函数。让我们尝试将它用于您的数据集:

    alg = lms(0.001);
    eqobj = lineareq(10,alg);
    y1 = equalize(eqobj,x);
    

    让我们看看结果:

    plot(x)
    hold on
    plot(y1)
    

    这种功能的实现有很多例子:例如看here

希望对你有帮助!

【讨论】:

  • 感谢您的回答。 x 是输入到均衡器的噪声信号。均衡器应该产生一个无噪声的输出,如果使用 LMS 估计没问题,均衡器的输出应该非常接近data 的输出。但在最后一张图中,x 与均衡器的清洁输出 y1 不匹配。从 LMS 获得的估计系数应如何使用测试数据集进行验证。我想这就是合身的意思。我不明白你的回答。也许我错了。
【解决方案2】:

模型输出与观察数据的比较称为残差。

因变量的观测值之间的差异 (y) 和预测值 (ŷ) 称为残差 (e)。每个数据 点有一个残差。

Residual = Observed value - Predicted value

e = y - ŷ

残差的总和和均值均为零。那是, Σ e = 0 和 e = 0。

残差图是在垂直方向显示残差的图​​形 轴和水平轴上的自变量。如果 残差图中的点随机分布在水平线上 轴,线性回归模型适用于数据; 否则,非线性模型更合适。

这是我的模型的残差图示例。纵轴是模型输出与测量值之间的差异。横轴是模型中使用的自变量之一。

我们可以看到大部分残差都在 0.2 个单位以内,这恰好是我对这个模型的容忍度。因此,我可以对模型的价值做出结论。

请参阅here 了解类似问题。

关于您的模型输出中没有噪音的问题。我们正在创建一个线性模型。有线索。

【讨论】:

  • 感谢您的回答。我想要一张ypredicted y 的图表。由于y 是嘈杂的,而predicted y 不是,那么我如何证明学习模型适用于未来看不见的数据?在我看到的许多论文中,尤其是在机器学习方面,模型在新的测试数据集上进行了测试。在我使用 LMS 算法的示例中,我该怎么做? Matlab 使用 inbuild 函数 'compare()' mathworks.com/help/ident/ref/compare.html 但我无法理解实际发生的情况。因此我需要你的帮助。
  • 能否提供一个代码 sn-p 如何在使用 LMS 估计后进行比较?
猜你喜欢
  • 2016-02-27
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 2019-09-29
  • 2019-10-15
  • 2018-08-10
  • 2021-07-19
相关资源
最近更新 更多