## ## Octave-Script zur Uebung 16 (Streumatrizen) ## der Veranstaltung "Mathematische Methoden der Mustererkennung" ## ## Autor: Christoph Dalitz, Hochschule Niederrhein, 07.01.2011 ## Lizenz: frei nutzbar unter der BSD-Lizenz ## 1; # Format der Daten fuer die zwei Klassen: # jede Zeile ist ein Testpunkt w1 = [[1,0];[2,3];[1,1]]; # Testpunkte (1,0), (2,3) und (1,1) w2 = [[3,0];[4,1]]; # Testpunkte (3,0) und (4,1) # scatter plot clearplot; minx = min([w1(:,1);w2(:,1)])-1; maxx = max([w1(:,1);w2(:,1)])+1; miny = min([w1(:,2);w2(:,2)])-1; maxy = max([w1(:,2);w2(:,2)])+1; axis([minx,maxx,miny,maxy]); plot(w1(:,1),w1(:,2),'+1'); hold on; plot(w2(:,1),w2(:,2),'*3'); # berechne Streumatrizen mu1 = mean(w1)'; mu2 = mean(w2)'; mu = mean([w1;w2])'; # within scatter matrix Sw = zeros(2,2); for x = w2' Sw += (x-mu2)*(x-mu2)'; end for x = w1' Sw += (x-mu1)*(x-mu1)'; end Sw # between scatter matrix Sb = rows(w1)*(mu1-mu)*(mu1-mu)' + rows(w2)*(mu2-mu)*(mu2-mu)'; Sb # Test korrekter Berechnung: Sw + Sb = (n-1)*Cov disp("Sw + Sb =") disp(Sw + Sb) disp("\n(n-1)*Cov =") disp(cov([w1;w2])*(rows(w1)+rows(w2)-1)) disp("") # berechne Separationsmasze J1 = trace(Sb)/trace(Sw) J2 = trace(inv(Sw)*Sb)