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:
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?
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?
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.
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.
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.
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.
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:
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??
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?
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');
% 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?!?
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
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.