2016-05-23 10 views
0

Ich versuche, ein Testset mit GMM zu klassifizieren. Ich habe einen Trainset (n * 4 Matrix) mit den Bezeichnungen {1,2,3}, n bedeutet die Anzahl der Trainingsbeispiele, die 4 Eigenschaften haben. Und ich habe auch ein Testset (m * 4) zu klassifizieren.Klassifizierung mit GMM mit MATLAB

Mein Ziel ist es, eine Wahrscheinlichkeitsmatrix (m * 3) für jedes Testbeispiel zu haben, die jedes Label P(x_test|labels) gibt. Genau wie weiche Clusterbildung.

Zuerst erstelle ich einen GMM mit k = 9 Komponenten über den gesamten Zug. Ich weiß in einigen Zeitungen, der Autor erstellt ein GMM für jedes Etikett im Zugverband. Aber ich möchte mit den Daten aus allen Klassen umgehen.

GMModel = fitgmdist(trainset,k_component,'RegularizationValue',0.1,'Start','plus'); 

Mein Problem ist, möchte ich die Beziehung P(component|labels) zwischen den Komponenten und Etiketten bestätigen. Also schreibe ich einen Code wie unten, aber nicht sicher, ob es richtig ist,

idx_ex_of_c1 = find(trainset_label==1); 
    idx_ex_of_c2 = find(trainset_label==2); 
    idx_ex_of_c3 = find(trainset_label==3); 

    [~,~,post] = cluster(GMModel,trainset); 
    cita_c_k = zeros(3,k_component); 
    for id_k = 1:k_component 
     cita_c_k(1,id_k) = sum(post(idx_ex_of_c1,id_k))/numel(idx_ex_of_c1); 
     cita_c_k(2,id_k) = sum(post(idx_ex_of_c2,id_k))/numel(idx_ex_of_c2); 
     cita_c_k(3,id_k) = sum(post(idx_ex_of_c3,id_k))/numel(idx_ex_of_c3); 
    end 

cita_c_k ist eine (3 * 9) Matrix, die die Beziehungen zu speichern. idx_ex_of_c1 ist der Index von Beispielen, deren Bezeichnung "1" im Zugverband lautet.

Für den Testprozess. Ich wende zuerst die GMModel

[P,~] = posterior(GMModel,testset); % P is a m*9 matrix 

Und dann Summe aller Komponenten Testset,

P_testset = P*cita_c_k'; 
    [a,b] = max(P_testset,3); 
    imagesc(b); 

Das Ergebnis ist in Ordnung, aber nicht gut genug. Kann mir jemand ein paar Tipps geben?

Danke!

+0

warum haben Sie sich 9 Kompo zu trainieren nents für Ihren GMM? Mehr ist nicht unbedingt besser, tatsächlich habe ich extrem komplexe Trainingssets mit nur 5-7 Komponenten gesehen. – GameOfThrows

+0

Ich bin mir nicht sicher, wie viele Komponenten am besten funktionieren. Vielleicht hast du recht. Ich werde die optimalen # Komponenten herausfinden. –

Antwort

0

können Sie folgende Schritte ausführen:

  1. Zunahme Zielfehler und/oder optimale Netzwerk Größe im Training verwenden, aber über-Ausbildung und Netzwerkgröße Anstieg in der Regel werden dazu beitragen, nicht

  2. Am wichtigsten ist es, Trainingsdaten während des Trainings zu mischen und nur wichtige Datenpunkte für ein zu trainierendes Label zu verwenden (Datenpunkte ignorieren, die zu mehr als einem Label gehören können)

Trennbarkeit

Trennbarkeit der Daten überprüfen Eigenschaften mit Hilfe Korrelation verwendet wird.

  1. Korrelation aller Daten in einem Etikett (X) sollte (in der Nähe von einem)
  2. Kreuzkorrelation aller Daten im Etikett (X) mit Daten hoch sein sollte, in Etikett (! = X) niedrig sein (nahe Null).

Wenn Sie beobachten, dass Datenpunkte in einem Label haben eine geringe Korrelation und Datenpunkte über Etiketten hohe Korrelation haben - Es stellt eine Frage zur Auswahl von Eigenschaften (es Eigenschaften werden könnten, die tatsächlich nicht Daten trennbar machen).Sein so tun folgt:

  1. Fügen Sie weitere relevante Eigenschaften, um Datenpunkte und entfernen weniger relevanten Eigenschaften (Technik zu verwenden, das PCA ist)
  2. Verwenden abgeleiteten Parameter wie obere Frequenzkomponente usw. aus Datenpunkte zu trainieren, anstatt direkte Punkte
  3. eine Zeitverzögerung Netzwerk verwenden Zeitreihe (immer)
Verwandte Themen