WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Lineare Diskriminanz Analyse (LDA)

 

Grünschnabel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 02.01.2014, 18:10     Titel: Lineare Diskriminanz Analyse (LDA)
  Antworten mit Zitat      
Hallo Community,
ich wünsche Euch allen ein fröhliches neues Jahr!!!

Ich habe gerade versucht, dass in der MATLAB Hilfe aufgeführte Beispiel zur linearen Diskriminanz Anayse (LDA) nachzuvollziehen. Das Beispiel arbeitet mit den Daten von A. R. Fisher die im Jahr 1936 veöffentlicht wurden. Das dieses Beipiel in der MATLAB Hilfe aufgeführt wird, finde ich sehr gut! Jedoch wird in der MATLAB Hilfe nicht gezeigt, wie ich die Diskriminante Function (mit den Wichtungskoeffizienten) bestimmen kann.
In der Veröffentlichung von A. R. Fisher (als pdf im Netz zugänglich) lautet die Funktion wie folgt:
X = x1 + 5,9037x2 - 7,1299x3 -10,1036x4

Weiß einer von Euch, wie ich mir diese Funkiton (bzw. die jeweiligen Koeffizienten) mit Hilfe von MATLBA berechnen kann? Gibt es da schon irgendwelche MATLAB-Funktionen die ich verwenden kann um mir die Gleichung zu bestimmen?

Vielen Dank im Voraus.
Der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen


Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 03.01.2014, 13:37     Titel:
  Antworten mit Zitat      
Nochmals an die Community,
beim stöbern im Netz bin ich auf folgenden Link gestoßen:
http://www.mathworks.com/matlabcent.....ange/31760-multiclass-lda

So wie ich das verstehe, hat sich "Darko Juric" mit der Programmierung der "multiclass linear discriminant analysis" befasst und diesen Code auf die Platform gestellt.

Kann mir einer von euch vielleicht erklären, wie ich diesen Code in Matlab nutzen/testen kann?

Vielen Dank im Voraus.
Der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen
 
Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 08.01.2014, 12:45     Titel:
  Antworten mit Zitat      
Hallo liebe Mitglieder,
ich versuche immernoch, dass in der MATLAB Hilfe aufgeführte Beispiel zur linearen Diskriminanz Anayse (LDA) von A. R. Fisher nachzuvollziehen.

Arbeitet jemand von euch mit der LDA bzw. kann nachvollziehen wie man an an die Koeffizienten der Diskriminant function kommt? Des Weiteren bin ich auf der Suche nach den Kovarianzmatrizen die in der LDA benötigt werden.

Kann mir da vielleicht jemand weiterhelfen?

Ich bin völlig verloren... Crying or Very sad

Vielen Dank im Voraus wünscht
der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen
 
Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 09.01.2014, 17:46     Titel:
  Antworten mit Zitat      
Hallo miteinander,
hmm... Ist meine Frage zu schwammig formuliert oder nutze ich gar eine falsche Funktion (oder falsches Beispiel) die mich nicht ans Ziel bringt?!?

Ich versuchen nochmal mein Problem zu erklären:
Die "discriminant analysis" wurde erstmals in dem Beispiel von R.A. Fisher beschrieben und kann unter:
http://rcs.chph.ras.ru/Tutorials/classification/Fisher.pdf
herunter geladen und eingesehen werden.

Jetzt gibt es in MATLAB 2013 ein Beispiel das sich genau auf dieses Paper bezieht (Toll!).
http://www.mathworks.de/de/help/sta.....iondiscriminantclass.html

Ich verwende den folgenden Code der auch in dem Beispiel zu finden ist:
Code:
load fisheriris
obj = ClassificationDiscriminant.fit(meas,species)


Mit dem Code kann ich aber lediglich die Matlab Ergebnisse für die Variable obj.Mu nachvollziehen, da sie ebenfalls im Paper vorhanden ist. Alle anderen Variablen wie obj.Sigma etc. sind für mich nicht nachvollziehbar.

Gibt es vielleicht eine Möglichkeit die discriminant function mit Matlab zu bestimmen?
Im Paper wird sie durch folgende Gleichung beschrieben:
X = x1 + 5,9037x2 - 7,1299x3 - 10,1036x4

Über eine Idee, Hinweis, Ratschlag würde ich mich sehr freuen.
Ich steh schon gut einer Woche auf dem Schlauch und komme nicht weiter. Crying or Very sad

Vielen Dank im Voraus.
Der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2014, 09:48     Titel:
  Antworten mit Zitat      
Hallo,

die Koeffizienten müssten in Coeffs stehen. Kann das leider nicht nachprüfen. Im Gegensatz zum Paper gibt es in fisheriris auch 3 Arten. Also musst du ein wenig schauen welchen Koeffizienten die richtigen sind.

Hast du das schon durchgelesen:
http://www.mathworks.de/de/help/stats/discriminant-analysis.html ?

viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 10.01.2014, 14:07     Titel:
  Antworten mit Zitat      
Hallo Thomas,
vielen Dank für deinen Beitrag, sehr nett von Dir! Deinen Link bin ich auch schon mehrmals durchgegangen aber leider (bisher) ohne Erfolg.

Ja, es ist richtig im paper werden 2 Arten verwendet im Matlab Beispiel 3. Den Matlab Input habe ich bereits auf nur 2 Arten reduziert und versuche die gelieferten Ergebnisse zu verstehen. Hier ist mein kleiner Code den ich verwende:
Code:

load fisheriris;

for i=1:100
    for j= 1:4
        Matrix(i,j)=meas(i,j);
    end
end

for k=1:100
    Species_new(k,1) = species(k,1);
end

obj = ClassificationDiscriminant.fit(Matrix,Species_new);

Coeff_C12 = obj.Coeffs(1,2).Const
Coeff_L12 = obj.Coeffs(1,2).Linear
Coeff_C21 = obj.Coeffs(2,1).Const
Coeff_L21 = obj.Coeffs(2,1).Linear  
 


Table II. des Papers kann ich nachvollziehen ebnso Table III.
Bei Table III handelt es sich um die Kovarianzmatrix multipliziert mit dem Stichprobenumfang von 98. Die Kovarianzmatrix wird in Matlab gegeben (siehe obj.Sigma).

Jetzt kämpfe ich mit Table IV des Papers "Matrix of multipliers reciprocral to the sums of squares and products within species (cm^-2).

Wenn ich mir die Koeffizienten (Coeff_C12 etc.) anschaue die mir MATLAB ausgibt, sind sie komplett verschieden zu Fishers. Hättest Du eine weitere Idee??

Vielen Dankim Voraus.
Der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen
 
Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 14.01.2014, 16:58     Titel:
  Antworten mit Zitat      
Hallo Zusammen,
mit meinem Thema habe ich anscheinend einen Bereich getroffen, der von vielen Forenmitgliedern nicht so sehr oft verwendet wird, nämlich der Diskriminanzanalyse...

Vermuttlich nutzen die meisten Menschen andere Software Pakete (SPSS, R), ich wollte aber gerne (sofern es geht) bei Matlab bleiben...

Da ich immernoch auf der Suche nach den Koeffizienten der linearen Diskriminanzfunktion bin und mir hier als auch unter (http://www.mathworks.de/matlabcentral/answers/) keine Antwort für meine Frage erhalten habe, würde ich gerne von euch wissen, an wen ich mich jetzt noch wenden könnte?

Crying or Very sad
Vielen Dank im Voraus.
Der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen
 
Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 05.02.2014, 17:51     Titel:
  Antworten mit Zitat      
Liebe Community,
ich habe vor längerem einen Beitrag gepostet und leider keine Antwort bekommen. Mit der Literatur von Backhaus etc. "Multivariate Analysemethoden" bin ich einen Schritt weiter gekommen, habe aber dennoch ein Verständnisproblem.

Für die Berechnung meiner linearen Diskriminanzfunktion benutze ich folgenden Code (Vorgehensweise wie in der oben aufgeführten Literatur):
Code:

% "FAES BSP mit 4 Merkmale
Matrix = load ('2Gruppen_Matrix.txt');
Species = load ('2Gruppen_Zuordnung.txt');

% % Backhaus BSP mit 2 Merkmale
% Matrix = load ('Stammkaeufer_2G.txt');
% Species = load ('Stammkaeufer_2GZuordnung.txt');


Anz_Merkmale = size (Matrix,2);
NRowsMat = size (Matrix,1);
AnzGruppen =2;
Stichprobenumfang = NRowsMat-AnzGruppen;
Stichprobe_pro_Gruppe =(Stichprobenumfang + AnzGruppen) / AnzGruppen;

obj = ClassificationDiscriminant.fit(Matrix,Species);
Gesamtmittelwert = Def_Gesamtmittelwert (obj.Mu, AnzGruppen, Anz_Merkmale)                                                  

% Ablauf wie in der Literatur Backhaus "Mulitvatiate Analysemethoden"
I = NRowsMat;
B = Stichprobe_pro_Gruppe * obj.BetweenSigma;           % Merkmalsvariablen zwischen den Gruppen
W = Stichprobenumfang * obj.Sigma;                             % Merkmalsvariablen in den Gruppen (Stichprobenumfang * Gesamtkovarianzmatrix)
A = W \ B;                                                                    % S. 235
Lambda = eig( A );                                                        % S. 236
Lamba_Relevant = max( Lambda );                                % grösstes Lambda
E = eye( Anz_Merkmale );                                             % Einheitsmatrix
R = A - Lamba_Relevant * E;                                         % S. 236
[V, D] = eig(R);
v = V(:,1);
Y_NotNorm = v';                                                           % Nicht normierte Diskriminanzfunktion
s = sqrt((1 /( I - AnzGruppen) * v' * W * v ));                 % A10 S. 235 und S. 236
b = v / s;                                                                      % A10 S. 235 und S. 236
b0 = - ( Gesamtmittelwert * b );                                     % A11 S. 235 und S. 236
Y_Norm(1,1) = b0;                                                         % Nullstelle b0
NRows = size (b,1);
for i=1:NRows
    Y_Norm(1,i+1) = b(i);
end
Y_Norm  

Um den Code laufen zu lassen werden die folgenden 2 bzw. Anhänge benötigt.

In der Literatur "Backhaus" wird folgender Weg beschrieben:
1. Berechnung der Matrix B (Merkmalsvariablen zwischen den Gruppen) -> verstanden
2. Berechnung der Matrix W (Merkmalsvariablen in den Gruppen) -> verstanden
3. Berechnung der Matrix A = W^-1B -> verstanden
4. Berechnung der Determinante von A. Hier wird der Eigenwert 0,91225 berechnet -> ok, kann ich in Matlab mit Lambda = eig (A) nachvollziehen
5. Berechnung der reduzierten Matrix R (R = A -Lambda*E). R ergibt sich zu:
R = [-0,14082 -0,25714; -,042245 -0,77143] -> kann ich auch nachvollziehen.

In der Literatur wird folgendes aufgeführt. Zitat:
"Der zugehörige Eigenvektor v lässt sich durch Lösen des Gleichungssystems Rv = 0 finden. Da die Zeilen der Matrix R proportional zueinander sind (...), lässt sich unschwer erkennen, dass die beiden folgenden Vektoren Lösungsvektroen sind: v = [0,77143; -0,42245] oder [-0,25714; 0,14082]. Man erhält sie, indem man die Diagonalelemente von R vertauscht und ihre Vorzeichen ändert."

An diesem Beispiel bei der B, W, A eine 2 x 2 Matrix ist kann ich das gut nachvollziehen, auch die Ermittlung der Lösungsvektoren "glaubte ich" verstanden zu haben. Nachdem ich das ganze aber auf ein weiteres Beispiel "FAES" mit 4 Merkmalen angewendet habe, funktioniert das ganze nicht mehr?!?

Jetzt bekomme ich für
Y_Norm = -4,6957-0,0247x1-0,4823x2+0,3038x3+0,9031x4
anstatt:
Y_Norm = 4,6957+0,0247x1+0,4823x2-0,3038x3-0,9031x4

Also sind die Vorzeichen passen nicht mehr. Kann das etwas mit meinen Eigenwerten bzw. Eigenvektoren zu tun haben?

Sorry, ist viel Text aber ich hoffe, es kann mir jemand helfen?!? Crying or Very sad

Vielen Dank im Voraus
Der Grünschnabel

Stammkaeufer_2GZuordnung.txt
 Beschreibung:
Gruppenzuordnung für das "Stammkäufer Beispiel"

Download
 Dateiname:  Stammkaeufer_2GZuordnung.txt
 Dateigröße:  72 Bytes
 Heruntergeladen:  434 mal
Stammkaeufer_2G.txt
 Beschreibung:
Matrix für das "Stammkäufer Beispiel"

Download
 Dateiname:  Stammkaeufer_2G.txt
 Dateigröße:  96 Bytes
 Heruntergeladen:  410 mal
2Gruppen_Matrix.txt
 Beschreibung:
Matrix für das "FAES Beispiel"

Download
 Dateiname:  2Gruppen_Matrix.txt
 Dateigröße:  249 Bytes
 Heruntergeladen:  403 mal
2Gruppen_Zuordnung.txt
 Beschreibung:
Gruppenzuordnung für das "FAES Beispiel"

Download
 Dateiname:  2Gruppen_Zuordnung.txt
 Dateigröße:  60 Bytes
 Heruntergeladen:  425 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.