0

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

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

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

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

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

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

我得到的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;

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

4

1 回答 1

0

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

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

为 [-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

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

于 2015-04-07T22:40:35.123 回答