2016-03-26 3 views
1

Ich verwende den Monte-Carlo-Ansatz, um N Szenarien für meine zufällige Variable zu generieren. Ich speichere diese Szenarien in einer M x N Matrix. Ich möchte die Wahrscheinlichkeit jedes Szenarios (Spalte) in der Matrix berechnen.Finden Sie die Wahrscheinlichkeit jeder Spalte in Matrix

Ich habe versucht, den Befehl histc() zu verwenden, aber es funktioniert nicht. Wie kann ich diese Wahrscheinlichkeiten finden und in einem Vektor speichern, um sie für ein Optimierungsproblem zu verwenden?

Antwort

0

Sie können unique auf die Transponierung dieser "Szenario" -Matrix verwenden und die dritte Ausgabe des Funktionsaufrufs untersuchen. Die dritte Ausgabe weist jedem möglichen eindeutigen Vorkommen in der Matrix eine eindeutige ID zu. Sie sollten auch das Flag 'rows' angeben, um jede Zeile als eine einzelne Instanz zu betrachten. Wenn Sie nicht 'rows' angeben, wird jedes einzelne Element in Ihrer Matrix als eine einzelne Instanz betrachtet, bei der die gesamte Spalte (oder Zeile der transponierten Matrix) eine einzelne Instanz sein soll. Außerdem können wir leider nicht mit unique entlang der Spalten operieren, weshalb Sie stattdessen die Matrix transponieren müssen.

Sie möchten auch die erste Ausgabe, um zu untersuchen, wie jede ID jedem eindeutigen Vorkommen zugeordnet ist. Stellen Sie sicher, dass Sie diese Ausgangsvariable am Ende transponieren, damit die Ausgänge Spalten zugeordnet werden. Sie können dann histc oder histcounts verwenden, um das Auftreten jedes "Szenarios" zu bestimmen und somit die Wahrscheinlichkeit unter Annahme einer gleichwertigen Situation zu finden.

Hier ist ein kurzes Beispiel. Angenommen, ich habe diese Matrix von Ereignissen in A gespeichert:

>> A = [0 0 0; 1 1 1; 1 0 0; 0 0 1; 0 0 0; 0 0 1; 1 1 1].' 

A = 

    0  1  1  0  0  0  1 
    0  1  0  0  0  0  1 
    0  1  0  1  0  1  1 

Wir sehen, dass die Dimensionalität des Szenarios 3 ist, während es gibt 7 Veranstaltungen. Tun, was ich sagte mit unique gibt:

>> [un, ~, id] = unique(A.', 'rows'); %' 
>> un = un.' %' 

un = 

    0  0  1  1 
    0  0  0  1 
    0  1  0  1 

>> id 

id = 

    1 
    4 
    3 
    2 
    1 
    2 
    4 

Wir können sehen, dass die Spalte [0; 0; 0] gehört ID 1, die Spalte [0; 0; 1] Karten ID 2, die Spalte [1; 0; 0] Karten ID 3 und schließlich [1; 1; 1] Karten ID 4. un speichert alle eindeutigen Spalten, während id uns diese Zuordnung zur Verfügung stellt. Sie können überprüfen, ob Sie, wenn Sie die id Variable konsultieren und die Abbildung, die wir oben gesehen haben, konsultieren, können Sie jede Spalte mit ihren entsprechenden IDs ersetzen.

Wir können dann die Wahrscheinlichkeiten von jedem Vorkommen bestimmen:

N = size(un,2); %// Get total number of unique scenarios 
M = size(A,2); %// Get total number of scenarios 
prob = histc(id, 1 : N)/M; %// Finding probabilities 

Wir erhalten:

>> prob 

prob = 

    0.2857 
    0.2857 
    0.1429 
    0.2857 

Dies stimmt mit unseren Daten. Für die Spalten [0; 0; 0], [0; 0; 1] und [1; 1; 1] gibt es zwei Vorkommen für jede Spalte und die Wahrscheinlichkeiten sind 2/7 = 0.2857. Die andere Spalte von [1; 0; 0] hat nur ein Vorkommen, und so ist die Wahrscheinlichkeit 1/7 = 0.1429.

[un, ~, id] = unique(A.', 'rows'); %'// Assigning each event a unique ID 
un = un.'; %'// Transpose to ensure compatibility 
N = size(un,2); %// Get total number of unique scenarios 
M = size(A,2); %// Get total number of scenarios 
prob = histc(id, 1 : N)/M; %// Finding probabilities 
:


Für die vollständige Codeauflistung so können Sie ganz einfach kopieren und einfügen, Ihre Matrix unter der Annahme in A gespeichert