梯度下降值不正确
Gradient descent values not correct
我正在尝试使用以下代码实现梯度下降:
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 乘以 theta,因为 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;
您在这里误解了维度。您的数据包含 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
因此您的 theta 应该有 两个 维度。一个是虚拟维度的权重(所谓的 bias),一个是实际 X 维度的权重。如果您的 X 有 K 个维度,则 theta 将有 K+1。因此,在添加虚拟维度矩阵后具有以下形状:
X is 3x2
y is 3x1
theta is 2x1
所以
X * theta is 3x1
与y
相同
我正在尝试使用以下代码实现梯度下降:
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 乘以 theta,因为 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;
您在这里误解了维度。您的数据包含 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
因此您的 theta 应该有 两个 维度。一个是虚拟维度的权重(所谓的 bias),一个是实际 X 维度的权重。如果您的 X 有 K 个维度,则 theta 将有 K+1。因此,在添加虚拟维度矩阵后具有以下形状:
X is 3x2
y is 3x1
theta is 2x1
所以
X * theta is 3x1
与y
相同