【问题标题】:Gradient descent values not correct梯度下降值不正确
【发布时间】:2016-06-15 20:58:15
【问题描述】:

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

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;

【问题讨论】:

    标签: machine-learning gradient-descent


    【解决方案1】:

    您在这里误解了维度。您的数据由 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 应该有 两个 维度。一个是虚拟维度的权重(所谓的bias),一个是实际 X 维度的权重。如果您的 X 有 K 个维度,则 theta 将有 K+1。因此,添加虚拟维度矩阵后,矩阵具有以下形状:

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

    所以

    X * theta  is 3x1 
    

    y

    【讨论】:

    • 如果 theta theta 是 2x1 那么假设函数是 h(x) = x1 * theta ?如果 theta 是 2x2,那么假设应该是 h(x) = x1 * theta1 + theta0 等等?
    • theta 将始终为 [K+1] x D,其中 X 是 N x K,y 是 N x D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多