2017-11-29 12 views
0

Also versuche ich einen EM-Algorithmus zu implementieren, um ein Gaussian Class Conditional Modell zum Klassifizieren von Daten zu trainieren. Ich stecke im Moment im M-Step fest, weil ich nicht herausfinden kann, wie man die Kovarianzmatrix berechnet.Berechnung der Kovarianz in Matlab für großen Datensatz und anderen Mittelwert

Das Problem ist, ich habe einen großen Datensatz und die Verwendung einer for-Schleife, um durch jeden Punkt zu gehen, wäre viel zu langsam. Ich kann auch nicht die Covarianzfunktion cov() verwenden, weil ich einen Mittelwert verwenden müssen, die ich mit dieser Formel (mu Symbol eins) berechnet

M-step

Gibt es eine Möglichkeit cov(), um zu justieren verwende das Mittel, das ich will? Oder gibt es eine andere Möglichkeit, dies ohne for-Schleifen zu machen?

Edit: Vergessen zu erklären, wie die Datenmatrix ist. Es ist ein nx3, wobei jede Zeile ein Datenpunkt ist.

Es muss technisch für den allgemeinen Fall nxm arbeiten, aber n ist normalerweise wirklich groß (1000 oder mehr), während m relativ klein ist.

+0

Können Sie den Beitrag bearbeiten, um die funktionierende (wenn auch langsame) Version mit der Schleife einzuschließen? Das wäre ein guter Ausgangspunkt, um Leistungsoptimierungen zu finden. – mikkola

+0

@mikkola Entschuldigung, aber ich habe diesen Code nicht. Mir wurde ausdrücklich gesagt, dass ich die Daten nicht durchschleifen kann, da dies zu lange dauern würde. Was ich suche, ist eine Alternative zu For-Loops. – user1804234

Antwort

0

Sie können Ihre Kovarianzmatrix manuell berechnen. Lassen Sie data die Matrix sein, die alle Variablen (zB [x y]) und mu Ihre benutzerdefinierten bedeuten, gehen Sie wie folgt vor:

n = size(data,1); 
data_dem = data - (ones(n,1) * mu); 
cov_mat = (data_dem.' * data_dem) ./ (n - 1); 

Beachten Sie, dass ich verwendet, um die Bessel's Correction (n-1 statt n), weil die Matlab cov Funktion verwendet es, wenn man das dritte Argument als 1 angeben:

cov_mat = cov(x,y,1); 

C = cov (___, w) gibt das Normalisierungsgewicht fo r irgendeine der vorherigen Syntaxen. Wenn w = 0 (Standard), wird C durch die Zahl von Beobachtungen-1 normalisiert. Wenn w = 1 ist, wird es durch die Anzahl von Beobachtungen normalisiert.

+0

Sorry, aber ich habe vergessen zu erklären, wie groß der Datensatz ist. Ich habe den ursprünglichen Beitrag bearbeitet, aber es ist eine nx3-Matrix, bei der jede Zeile ein Datenpunkt ist. Funktioniert diese Methode für eine solche Datenmatrix? Von dem, was ich von Kovarianz verstehe (was nicht viel ist, da es mich manchmal verwirrt), sollte diese Methode nicht funktionieren, obwohl ich falsch liegen könnte. – user1804234

Verwandte Themen