2016-10-09 1 views
-1

Hier ist das Beispiel.Warum ist keine Matrixzuweisung, z. p (1) = 1, funktioniert in Octave wie andere Programmiersprachen?

Dies funktioniert nicht ---

m = size(X, 1); % Number of training examples 
p = zeros(m, 1); 
p = sigmoid(X * theta); % sigmoid returns a mx1 dimensional vector 
for i = 1:m 
    if (p(i) >= 0.5) 
     p(i) = 1;   % overwrite whatever value in p(i) 
    endif 
end 

Die folgenden Werke ---

m = size(X, 1); % Number of training examples 
p = zeros(m, 1); 
sig = sigmoid(X * theta); 
for i = 1:m 
    if (sig(i) >= 0.5) 
     p(i) = 1; 
    endif 
end 

Erstes Beispiel gibt Float-Zahlen eher als 1 oder 0 Das Ziel ist es, 1 in 'p' von m-Zeilen für jeden Eintrag zu speichern, der die Bedingung erfüllt. Mit der Programmierlogik sollten die erste und die zweite das gleiche Ergebnis liefern, da ich gerade Einträge überschreibe, die die if-Bedingung erfüllen, richtig? Fehle ich etwas?

+0

ich die Etiketten 'Maschinen learning' bin Entfernen' neural-Netz ' "Logistikregression", weil sie nichts mit der Frage zu tun haben. –

Antwort

0

Ihr erstes Beispiel führt Folgendes aus: „Sigmoid auf X aufrufen und ersetzen alle Werte> 0,5 mit 1“

m = size(X, 1); 
p = zeros(m, 1); 
## Here you overwrite your entire p vector do the line above has no effect 
p = sigmoid(X * theta); 
for i = 1:m 
    if (p(i) >= 0.5) 
    p(i) = 1;   % overwrite whatever value in p(i) 
    endif 
end 

Je einfacher wäre vektorisiert Weg gewesen:

p = sigmoid(X * theta); 
p(p>0.5) = 1; 

Ihre zweite Beispiel initialisiert mit Nullen und setzt die Elemente auf 1, wenn Sigmoid> 0,5 zurückgibt. Welche (eine Zeile ... ja, wirklich nur) würde vektorisiert

p = sigmoid(X * theta) >= 0.5; 

Ich hoffe, dass Sie Ihre Logik Problem sehen jetzt

+0

Ich versuche tatsächlich, den gesamten Inhalt von p (dh; Nullen) mit Inhalt von Sigmoid-Werten zu überschreiben. Unabhängig davon hat p vor und nach dem Überschreiben die gleiche Dimension von mx1. Was bedeutet das Überschreiben für die For-Schleife? Selbst dann, wenn Sie jedes Element ersetzen, erhalten Sie dasselbe Ergebnis wie das zweite Codeelement. – Arean

+0

überschreiben Sie nicht "jedes Element" von p in der for-Schleife, nur diejenigen, in denen die Bedingung in "if" erfüllt ist. – Andy

+0

Ok. Sagen wir einfach m = 5 und p = [0; 0; 15; 20; 55] (nach Sigmoid-Rückkehr). Das bedeutet p (1) = 0, p (2) = 0, p (3) = 15, p (4) = 20, p (5) = 55. Nun würde die Verwendung der for-Schleife genau wie oben jedes Element von ersetzen Kuchen; p (i), mit "1", wenn p (i) größer als 0,5 ist. Während der for-Schleife werden nun Elemente von p (3) p (4) und p (5) mit '1' überschrieben, so dass p = [0; 0; 1; 1; 1] gilt. So würde ich in anderen Sprachen wie Python implementieren, wenn es Array ist. Ist es nicht? – Arean

Verwandte Themen