线性回归 - 在估算后陷入Matlab中的模型比较?

时间:2017-09-22 21:30:18

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

我想确定估算模型与未来新数据的匹配程度。为此,经常使用预测误差图。基本上,我想比较测量输出和模型输出。我使用最小均方算法作为均衡技术。有人可以帮助绘制模型和测量数据之间的比较的正确方法吗?如果估计接近真,那么曲线应该彼此非常接近。下面是代码。 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

2 个答案:

答案 0 :(得分: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)
    

    enter image description here

  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)
    

    enter image description here 这个函数的实现有很多例子:例如here

  4. 我希望这对你有所帮助!

答案 1 :(得分:-1)

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

  

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

Residual = Observed value - Predicted value

e = y - ŷ
     

残差的和和均等于零。那是,   Σe= 0且e = 0.

     

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

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

enter image description here

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

有关类似问题,请参阅here

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