梯度下降值不正确

时间:2016-06-15 20:58:15

标签: machine-learning gradient-descent

我正在尝试使用以下代码实现梯度下降:

Gradient Descent implementation in octave

我修改了以下代码:

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

提供以下输出:

X =

   1
   1
   1

y =

   1
   0
   1

theta =

   0.32725
   0.32725

theta是1x2矩阵但不应该是1x3,因为输出(y)是3x1?

所以我应该能够将theta乘以训练样例来进行预测但是不能将x乘以θ,因为x是1x3而theta是1x2?

更新:

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

1 个答案:

答案 0 :(得分:2)

你在这里误解了尺寸。您的数据包含 3分,每个单个维度。此外,您添加1s的虚拟维度

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

因此你的theta应该有两个维度。一个是虚拟维度的权重(所谓的偏差),一个是实际X维度的权重。如果你的X有K个维度,那么theta将有K + 1。因此,在添加虚拟尺寸矩阵后,具有以下形状:

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

所以

X * theta  is 3x1 

y

相同