2016-06-15 4 views
0

Ich versuche Gradientenabfallsaktualisierung zu implementieren unter Verwendung von Code aus:Gradientenabstieg Werte nicht korrekt

Gradient Descent implementation in octave

ich folgenden geänderten Code haben:

X = [1; 1; 1;] 
y = [1; 0; 1;] 
m = length(y); 
X = [ones(m, 1), data(:,1)]; 
theta = zeros(2, 1);   
iterations = 2000; 
alpha = 0.001; 

for iter = 1:iterations 
    theta = theta -((1/m) * ((X * theta) - y)' * X)' * alpha; 
end 

theta 

Welche folgende Ausgabe ergibt:

X = 

    1 
    1 
    1 

y = 

    1 
    0 
    1 

theta = 

    0.32725 
    0.32725 

Theta ist eine 1x2 Matrix, sollte aber nicht 1x3 sein wie die Ausgabe (y) ist 3x1?

Also sollte ich Theta durch das Trainingsbeispiel multiplizieren können, um eine Vorhersage zu machen, aber kann nicht x mit Theta multiplizieren, wie x ist 1x3 und Theta ist 1x2?

Update:

%X = [1 1; 1 1; 1 1;] 
%y = [1 1; 0 1; 1 1;] 

X = [1 1 1; 1 1 1; 0 0 0;] 
y = [1 1 1; 0 0 0; 1 1 1;] 

m = length(y); 
X = [ones(m, 1), X]; 
theta = zeros(4, 1);  
theta 

iterations = 2000; 
alpha = 0.001; 

for iter = 1:iterations 
    theta = theta -((1/m) * ((X * theta) - y)' * X)' * alpha; 
end 

%to make prediction 
m = size(X, 1); % Number of training examples 
p = zeros(m, 1); 
htheta = sigmoid(X * theta); 
p = htheta >= 0.5; 

Antwort

2

Sie sind falsch interpretiert Dimensionen hier. Ihre Daten bestehen aus 3 Punkten, die jeweils eine einzelne Dimension haben. Darüber hinaus Sie eine Dummy-Dimension von 1s

X = [ones(m, 1), data(:,1)]; 

so

octave:1> data = [1;2;3] 
data = 

    1 
    2 
    3 

octave:2> [ones(m, 1), data(:,1)] 
ans = 

    1 1 
    1 2 
    1 3 

und theta ist Ihre Parametrisierung, hinzufügen, die Sie sollten anwenden durch Lage sein (dies ist kein Code, sondern mathematische Schreibweise

)
h(x) = x1 * theta1 + theta0 

damit Ihr Theta sollte zwei Dimensionen haben. Einer ist ein Gewicht für Ihre Dummy-Dimension (so genannte Vorspannung) und eine für tatsächliche X-Dimension. Wenn Ihr X K-Dimensionen hat, würde Theta K + 1 haben. Somit wird nach einer Dummy-Dimension Matrices Zugabe wurden folgende Formen:

X is 3x2 
y is 3x1 
theta is 2x1 

so

X * theta is 3x1 

die gleiche wie y

+0

wenn theta Theta 2x1 dann ist die Hypothese, Funktion h (x) = x1 * Theta? Wenn Theta 2x2 war, dann sollte die Hypothese h (x) = x1 * theta1 + theta0 und so weiter sein? – thepen

+1

Theta wird immer '[K + 1] x D 'sein, wobei X' N x K 'und y' N x D 'ist – lejlot