-2

Je veux déterminer dans quelle mesure le modèle estimé correspond aux futures nouvelles données. Pour ce faire, un tracé d'erreur de prédiction est souvent utilisé. Fondamentalement, je veux comparer la sortie mesurée et la sortie du modèle. J'utilise l'algorithme Least Mean Square comme technique d'égalisation. Quelqu'un peut-il aider s'il vous plaît quelle est la bonne façon de tracer la comparaison entre le modèle et les données mesurées? Si les estimations sont proches de true, les courbes doivent être très proches les unes des autres. Voici le code. u est l'entrée de l'égaliseur, x est le signal bruyant reçu, y est la sortie de l'égaliseur, w est le poids de l'égaliseur. Le graphique doit-il être tracé en utilisant x et y*w? Mais x est bruyant. Je suis confus puisque la sortie mesurée x est bruyante et la sortie du modèle y*w est sans bruit.Régression linéaire - Collé dans la comparaison de modèles dans Matlab après estimation?

%% 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

Comment * devrait * être tracée dépend de ce que vous voulez montrer dans votre parcelle ... – Wolfie

Répondre

-1

La comparaison de la sortie du modèle avec les données observées est connue comme résiduelle.

La différence entre la valeur observée de la variable dépendante (y) et la valeur prédite (Y) est appelée la valeur résiduelle (e). Chaque point de données a un résidu.

Residual = Observed value - Predicted value 

e = y - ŷ 

La somme et la moyenne des résidus sont égales à zéro. C'est-à-dire, Σ e = 0 et e = 0.

Un tracé résiduel est un graphique qui montre les résidus sur l'axe vertical et la variable indépendante sur l'axe horizontal. Si les points dans un tracé résiduel sont dispersés au hasard autour de l'axe horizontal , un modèle de régression linéaire est approprié pour les données; sinon, un modèle non linéaire est plus approprié.

Voici un exemple de parcelles résiduelles d'un modèle de mine. Sur l'axe vertical est la différence entre la sortie du modèle et la valeur mesurée. Sur l'axe horizontal est l'une des variables indépendantes utilisées dans le modèle.

enter image description here

Nous pouvons voir que la plupart des résidus sont à 0,2 unités qui se trouve être ma tolérance pour ce modèle. Je peux donc tirer une conclusion quant à la valeur du modèle. Pour une question similaire, voir here.

En ce qui concerne votre question sur le manque de bruit dans la sortie de vos modèles. Nous créons un modèle linéaire. Il y a l'indice.

+0

Merci d'avoir répondu. Je voulais un graphique du «y» et du «y prédit». Comme 'y' est bruyant et que' y ne l'est pas, alors comment montrer que le modèle appris fonctionne bien pour de futures données invisibles? Dans de nombreux articles, j'ai vu surtout dans l'apprentissage automatique que le modèle est testé sur le nouvel ensemble de données de test. Dans mon exemple utilisant l'algorithme LMS, comment puis-je faire la même chose? Matlab utilise la fonction inbuild 'compare()' https://www.mathworks.com/help/ident/ref/compare.html mais je n'arrive pas à comprendre ce qui se passe réellement. D'où j'ai besoin de votre aide. –

+0

Pourriez-vous s'il vous plaît fournir un extrait de code comment comparer après l'estimation en utilisant LMS? –

0

permet de démarrer étape par étape:

  1. tout d'abord lors de l'utilisation d'une méthode de montage, il est une bonne pratique d'utiliser RMS error. Pour obtenir cela, nous devons trouver une erreur entre l'entrée et la sortie. Comme je l'ai compris x est une entrée pour notre modèle et y est une sortie. De plus, vous avez déjà calculé l'erreur entre eux. Mais vous l'avez utilisé en boucle sans enregistrer.Permet de modifier votre code:

    %% 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 
    

    maintenant e se compose d'erreurs à la dernière époque. On peut donc utiliser quelque chose comme ceci:

    rms(e) 
    

    Aussi je voudrais comparer les résultats en utilisant l'erreur moyenne et écart-type:

    mean(e) 
    std(e) 
    

    Et une visualisation:

    histogram(e) 
    

    enter image description here

  2. Deuxième moment: nous ne pouvons pas utiliser compare fonctionne uniquement pour les vecteurs! Vous pouvez l'utiliser pour dynamic system models. Pour cela, vous devez contourner l'utilisation de cette méthode en tant que modèle dynamique. Mais nous pouvons utiliser certaines fonctions comme goodnessOfFit par exemple. Si vous voulez quelque chose comme une erreur à chaque étape qui prend en compte tous les points de données précédents, faites quelques calculs mathématiques - calculez-le à chaque point en utilisant [1: currentNumber].

  3. À propos de l'utilisation de la méthode LMS. Il y a une fonction intégrée qui calcule le LMS. Permet d'essayer de l'utiliser pour vos ensembles de données:

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

    Et permet de voir le résultat:

    plot(x) 
    hold on 
    plot(y1) 
    

    enter image description here Il y a beaucoup d'exemples d'une telle mise en œuvre de cette fonction: comparer here par exemple .

J'espère que cela a été utile pour vous!

+0

Merci pour votre réponse. 'x' est un signal bruyant qui est entré dans l'égaliseur. L'égaliseur doit produire une sortie sans bruit et si l'estimation en LMS est correcte, la sortie de l'égaliseur doit être très proche de celle de 'data'. Mais dans le dernier graphe, 'x' ne correspond pas exactement à' y1', qui est la sortie nettoyée de l'égaliseur. Dans quelle mesure les coefficients estimés obtenus à partir du LMS doivent-ils être validés en utilisant un ensemble de données de test. Je pense que c'est ce que signifie la qualité de l'ajustement. Je ne comprends pas ta réponse. Peut-être que je me trompe. –