2016-06-15 3 views
0
내가로부터 코드를 사용하여 그라데이션 하강을 구현하려고 해요

:그라데이션 하강 값

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 

하는 출력 다음주는 : 다음에

Gradient Descent implementation in octave

내가 수정 한 코드

X = 

    1 
    1 
    1 

y = 

    1 
    0 
    1 

theta = 

    0.32725 
    0.32725 

theta는 1x2 매트릭스이지만 1x3이 아니어야합니다 출력 (y)는 3x1?

그래서 예를 들어 훈련 예제로 곱 해져야하지만 x가 1x3이고 theta가 1x2이므로 x를 theta로 곱할 수 없습니까?

업데이트 : 여기

%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; 

답변

2

당신은 잘못 해석하는 차원. 귀하의 데이터는 3 포인트으로 구성되며 각각 의 단일 치수을가집니다. 또한,이 코드가 아니라 수학 기호 (당신을 통해 적용 할 수 있어야합니다 귀하의 매개 변수화를 1 초

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

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

    1 
    2 
    3 

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

    1 1 
    1 2 
    1 3 

theta의 더미 차원입니다 추가 )

h(x) = x1 * theta1 + theta0 

따라서 귀하의 세타는 차원이 있어야합니다. 하나는 더미 치수 (예 : 바이어스)의 가중치이고 실제 X 치수는 하나입니다. X에 K 치수가있는 경우, theta는 K + 1을가집니다. 따라서, 더미 차원 매트릭스를 추가 한 후 다음의 한 형태 :

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

그래서

X * theta is 3x1 

그때 가설 함수 H (X) = X1로 동일한

+0

세타 세타 × 10 인 경우 y로서 * 세타? theta가 2x2이면 가설은 h (x) = x1 * theta1 + theta0이되어야합니다. – thepen

+1

theta는 항상'[K + 1] xD'가 될 것입니다. 여기서 X는'NxK'이고 y는'NxD'입니다. – lejlot