Линейная регрессия Застряли в сравнении моделей в Matlab после оценки?

Я хочу определить, насколько хорошо предполагаемая модель соответствует будущим новым данным. Для этого часто используется график ошибки предсказания. По сути, я хочу сравнить измеренный вывод и вывод модели. Я использую алгоритм наименьшего среднего квадрата в качестве метода выравнивания. Может кто-нибудь помочь, как правильно построить сравнение между моделью и измеренными данными? Если оценки близки к истине, то кривые должны быть очень близки друг к другу. Ниже приведен код. u — вход эквалайзера, x — зашумленный принятый сигнал, y — выход эквалайзера, w — веса эквалайзера. Следует ли строить график с использованием x и y*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

person Ria George    schedule 22.09.2017    source источник
comment
То, как это должно быть построено, зависит от того, что вы хотите показать на своем графике...   -  person Wolfie    schedule 25.09.2017


Ответы (2)


Начнем шаг за шагом:

  1. Прежде всего, при использовании какого-либо метода подгонки рекомендуется использовать RMS-ошибка . Чтобы получить это, мы должны найти ошибку между вводом и выводом. Как я понял 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 только для векторов! Вы можете использовать его для динамических системных моделей. Для этого вам нужно сделать обходной путь использования этого метода в качестве динамической модели. Но мы можем использовать некоторые функции, например, goodnessOfFit. Если вам нужно что-то вроде ошибки на каждом шаге, учитывающей все предыдущие точки данных, тогда сделайте какой-нибудь математический обходной путь — вычислите ее в каждой точке, используя [1: currentNumber].

  3. Об использовании метода LMS. Имеются встроенные функции расчета LMS. Давайте попробуем использовать его для ваших наборов данных:

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

    И давайте посмотрим на результат:

    plot(x)
    hold on
    plot(y1)
    

    введите здесь описание изображения Примеров такой реализации этой функции много: посмотрите здесь, например.

Я надеюсь, что это было полезно для вас!

person Mikhail_Sam    schedule 29.09.2017
comment
Спасибо за ваш ответ. x - зашумленный сигнал, поступающий на вход эквалайзера. Эквалайзер должен давать выходной сигнал без шума, и если оценка с использованием LMS в порядке, выходной сигнал эквалайзера должен быть очень близок к выходному сигналу data. Но на последнем графике x не совсем соответствует y1, который является очищенным выходом эквалайзера. Насколько хорошо оценочные коэффициенты, полученные из LMS, должны быть проверены с использованием набора тестовых данных. Я думаю, что это и означает хорошее соответствие. Я не понимаю вашего ответа. Может быть, я ошибаюсь. - person Ria George; 30.09.2017

Сравнение выходных данных модели с наблюдаемыми данными называется остатком.

Разница между наблюдаемым значением зависимой переменной (y) и прогнозируемым значением (ŷ) называется остатком (e). Каждая точка данных имеет одну невязку.

Residual = Observed value - Predicted value

e = y - ŷ

И сумма, и среднее значение остатков равны нулю. То есть Σ e = 0 и e = 0.

График остатков — это график, который показывает остатки по вертикальной оси и независимую переменную по горизонтальной оси. Если точки на остаточном графике случайным образом разбросаны по горизонтальной оси, для данных подходит модель линейной регрессии; в противном случае более подходящей является нелинейная модель.

Вот пример остаточных участков моей модели. По вертикальной оси отложена разница между выходом модели и измеренным значением. По горизонтальной оси отложена одна из независимых переменных, используемых в модели.

введите здесь описание изображения

Мы видим, что большая часть остатков находится в пределах 0,2 единицы, что является моим допуском для этой модели. Таким образом, я могу сделать вывод о ценности модели.

См. здесь аналогичный вопрос.

Касательно вашего вопроса об отсутствии шума в выходных данных ваших моделей. Мы создаем линейную модель. Вот подсказка.

person ldgorman    schedule 25.09.2017
comment
Спасибо за ответ. Мне нужен график y и predicted y. Поскольку y зашумлен, а predicted y нет, то как мне показать, что изученная модель хорошо работает для будущих невидимых данных? Во многих статьях я видел, особенно в области машинного обучения, что модель тестируется на новом наборе тестовых данных. В моем примере с использованием алгоритма LMS, как я могу сделать то же самое? Matlab использует встроенную функцию 'compare()' mathworks.com/help/ident/ref /compare.html, но я не могу понять, что на самом деле происходит. Поэтому мне нужна ваша помощь. - person Ria George; 25.09.2017
comment
Не могли бы вы предоставить фрагмент кода, как сравнить после оценки с использованием LMS? - person Ria George; 25.09.2017