【问题标题】:How to solve logistic regression using gradient Descent?如何使用梯度下降解决逻辑回归?
【发布时间】:2015-06-08 08:53:13
【问题描述】:

我正在解决关于机器学习的在线课程的练习。问题陈述是:

假设一所高中有一个数据集,代表 40 名被大学录取的学生和 40 名未被录取的学生。每个( x(i), y(i) ) 训练示例都包含一个学生在两次标准化考试中的成绩以及该学生是否被录取的标签。

我们的任务是构建一个二元分类模型,该模型根据学生在两次考试中的成绩来估计大学录取机会。在training data

一个。 x 数组的第一列代表所有测试 1 的分数,第二列代表所有测试 2 的分数。

b. y 向量使用“1”标记被录取的学生,使用“0”标记未被录取的学生。

我已经通过使用名为fminunc 的预定义函数解决了这个问题。现在,我正在通过使用梯度下降来解决它,但我的成本与迭代次数的图表没有转换,即成本函数值不会随着迭代次数而减少。我的 theta 值也与我应该得到的答案不匹配。

我得到的θ值:

[-0.085260 0.047703 -0.022851]

我应该得到的θ值(答案):

[-16.38 0.1483 0.1589]

我的源代码:

clear ; close all; clc
x = load('/home/utlesh/Downloads/ex4x.txt'); 
y = load('/home/utlesh/Downloads/ex4y.txt');
theta = [0,0,0];
alpha = 0.00002;
a = [0,0,0];
m = size(x,1);

x = [ones(m,1) x];
n = size(x,2);
y_hyp = y*ones(1,n);

for kk = 1:100000
  hyposis = 1./(1 + exp(-(x*theta')));
  x_hyp = hyposis*ones(1,n);
  theta = theta - alpha*1/m*sum((x_hyp - y_hyp).*x);
  a(kk,:) = theta ;
end

cost = [0];
for kk = 1:100000
  h = 1./(1 + exp(-(x*a(kk,:)')));
  cost(kk,:) = sum(-y .* log(h) - (1 - y) .* log(1 - h));
end

x_axis = [0];
for kk = 1:100000
  x_axis(kk,:) = kk;
end

plot(x_axis,cost);

我得到的图形看起来像 1/x;

请告诉我我在哪里做错了。如果有什么我误解了,请告诉我。

【问题讨论】:

    标签: artificial-intelligence octave logistic-regression gradient-descent


    【解决方案1】:

    我可以看到缺少的是学习率和权重的使用。重量可以在线和批量两种模式调整。

    权重应在 [-0.01,0.01] 之间随机分配值。在我的硕士期间,我做了一个练习作为 HW 的一部分。下面是sn-p:

    为 [-0.01,0.01] 之间的权重赋值,即没有。重量值将是,不。特征数 + 1:

    weights = -.01 + 0.02 * rand(3,1);
    learnRate = 0.001;
    

    在这里运行设定迭代次数的代码:(它也在 100 次迭代中收敛)。

    while iter < 100
        old_output = new_output;
        delta = zeros(cols-1,1);
            for t = 1:rows
               input = 0;
               for j = 1:cols-1 
                   input = input + weights(j) * numericdata(t,j);
               end
               new_output(t) = (1 ./ (1 + exp(-input)));
               for j = 1:cols-1 
                   delta(j) = delta(j) + (numericdata(t,4)-new_output(t)) * numericdata(t,j);
               end
            end
    
    #Adjusting weights (Batch Mode):
    
        for j=1:cols-1
            weights(j) = weights(j) + learnRate * (delta(j));
        end
    
        error = abs(numericdata(:,4) - new_output);
        errorStr(i) = (error(:));
        error = 0;
        iter = iter + 1;
        i = i + 1;
    end
    

    另外,我在学习的时候和我的教授谈过。他说,如果给定的数据集具有收敛的特性,那么当你随机运行它进行不同次数的迭代时,你就会看到。

    【讨论】:

    • 我无法理解你写的任何东西。告诉我,我可以在分类问题上使用梯度下降,就像我在简单线性回归问题上使用的那样。你可能也解决了第二个练习。我使用了同样的概念,我得到了正确的答案,但我在这个练习中遇到了问题。
    猜你喜欢
    • 2021-12-22
    • 2020-05-01
    • 1970-01-01
    • 2014-08-26
    • 2015-07-15
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多