我正在解决关于机器学习的在线课程形式 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;
请告诉我我在哪里做错了。如果有什么我误解了,请告诉我。