编程作业(二)

逻辑回归

逻辑回归

任务一 可视化数据(选择)

在ex2.m文件中已经导入了ex2data1.txt中的数据,其代码如下:

data = load('ex2data1.txt');
X = data(:, [1, 2]);
y = data(:, 3);

我们只需在plotData.m文件中,将plotData()函数代码补充完整,代码如下:

positive = find(y==1);
negative = find(y==0);

plot(X(positive, 1), X(positive, 2), 'k+', 'LineWidth', 2, 'MarkerSize', 7);
plot(X(negative, 1), X(negative, 2), 'ko', 'MarkerFaceColor', 'y','MarkerSize', 7);

其中,此代码中涉及到的plot()函数的应用可查看本人的Octave教程(四)或自行查阅相关文档。

运行该任务部分代码,其结果如下图所示:

任务二 代价函数与梯度下降算法

在ex2.m文件中已经将相关参数初始化代码以及函数调用代码写好,其代码如下:

[m, n] = size(X);

% Add intercept term to x and X_test
X = [ones(m, 1) X];

% Initialize fitting parameters
initial_theta = zeros(n + 1, 1);

% Compute and display initial cost and gradient
[cost, grad] = costFunction(initial_theta, X, y);

我们只需在costFunction.m将代价函数和梯度下降算法相关代码补充完整即可。不过在此之前,我们需要在sigmoid.m文件中将sigmoid()函数补充完整。

首先,我们将要用到的公式列举一下:

  • 假设函数hθ(x):
  • 代价函数J(θ):

其向量化后为:

  • 梯度下降算法:

其向量化后为:


然后,我们在sigmoid.m文件中,根据假设函数hθ(x)公式键入如下代码:

g = 1 ./ (1+exp(-z));

最后,我们在costFunction.m文件中,将代价函数J(θ)和梯度下降算法分别补充完整,其代码分别如下:

代价函数J(θ)

J = (-y'*log(sigmoid(X*theta))-(1-y)'*log(1-sigmoid(X*theta))) / m;

梯度下降算法

grad = (X'*(sigmoid(X*theta)-y)) / m;

运行该部分代码,其结果为:

Cost at initial theta (zeros): 0.693147
Expected cost (approx): 0.693
Gradient at initial theta (zeros):
 -0.100000
 -12.009217
 -11.262842
Expected gradients (approx):
 -0.1000
 -12.0092
 -11.2628

Cost at test theta: 0.218330
Expected cost (approx): 0.218
Gradient at test theta:
 0.042903
 2.566234
 2.646797
Expected gradients (approx):
 0.043
 2.566
 2.647

任务三 高级优化算法

在ex2.m文件中已经将使用fminunc()函数的相关代码写好,我们只需运行即可,其代码如下:

%  Set options for fminunc
options = optimset('GradObj', 'on', 'MaxIter', 400);

%  Run fminunc to obtain the optimal theta
%  This function will return theta and the cost 
[theta, cost] = ...
    fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

% Print theta to screen
fprintf('Cost at theta found by fminunc: %f\n', cost);
fprintf('Expected cost (approx): 0.203\n');
fprintf('theta: \n');
fprintf(' %f \n', theta);
fprintf('Expected theta (approx):\n');
fprintf(' -25.161\n 0.206\n 0.201\n');

% Plot Boundary
plotDecisionBoundary(theta, X, y);

% Put some labels 
hold on;
% Labels and Legend
xlabel('Exam 1 score')
ylabel('Exam 2 score')

% Specified in plot order
legend('Admitted', 'Not admitted')
hold off;

该任务运行结果为:

Cost at theta found by fminunc: 0.203498
Expected cost (approx): 0.203
theta:
 -25.161272
 0.206233
 0.201470
Expected theta (approx):
 -25.161
 0.206
 0.201

任务四 逻辑回归的预测

根据逻辑函数g(z)可知:

  • 当z≥0.5时,我们可以预测y=1
  • 当z﹤0.5时,我们可以预测y=0

因此,根据以上结论,我们可在predict.m文件中将predict()函数代码补充完整,其代码如下:

p(sigmoid( X * theta) >= 0.5) = 1;
p(sigmoid( X * theta) < 0.5) = 0;

此处代码可拆成如下代码便于理解:

k = find(sigmoid( X * theta) >= 0.5 );
p(k)= 1;

d = find(sigmoid( X * theta) < 0.5 );
p(d)= 0;

该任务的运行结果为:

For a student with scores 45 and 85, we predict an admission probability of 0.776289
Expected value: 0.775 +/- 0.002

Train Accuracy: 89.000000
Expected accuracy (approx): 89.0

正则化的逻辑回归

任务一 可视化数据

由于ex2_reg.m文件和plotData.m文件中都已将相关代码写好,我们只需运行该任务代码即可,其运行结果为:

任务二 代价函数与梯度下降算法

正则化的代价函数J(θ):

正则化的梯度下降算法:

根据上述公式,我们可在costFunctionReg.m文件中将代价函数和梯度下降算法补充完整,其代码如下:

theta_s = [0; theta(2:end)];
J= (-1 * sum( y .* log( sigmoid(X*theta) ) + (1 - y ) .* log( (1 - sigmoid(X*theta)) ) ) / m) + (lambda / (2*m) * (theta_s' * theta_s));
grad = ( X' * (sigmoid(X*theta) - y ) )/ m + ((lambda/m)*theta_s);

其运行结果为:

Cost at initial theta (zeros): 0.693147
Expected cost (approx): 0.693
Gradient at initial theta (zeros) - first five values only:
 0.008475
 0.018788
 0.000078
 0.050345
 0.011501
Expected gradients (approx) - first five values only:
 0.0085
 0.0188
 0.0001
 0.0503
 0.0115

Program paused. Press enter to continue.

Cost at test theta (with lambda = 10): 3.164509
Expected cost (approx): 3.16
Gradient at test theta - first five values only:
 0.346045
 0.161352
 0.194796
 0.226863
 0.092186
Expected gradients (approx) - first five values only:
 0.3460
 0.1614
 0.1948
 0.2269
 0.0922

任务三 高级优化算法

其代码已经写好,我们只需运行即可,其结果为:

Train Accuracy: 83.050847
Expected accuracy (with lambda = 1): 83.1 (approx)

任务四 选择正则化参数λ(选做)

我们分别令正则化参数λ=0, 10, 100,其结果分别为:

λ=0

Train Accuracy: 86.440678

λ=10

Train Accuracy: 74.576271

λ=100

Train Accuracy: 61.016949

其中,关于图像绘制请自行查看plotDecisionBoundary.m文件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容

  • 正则化的线性回归以及偏差VS方差 正则化的线性回归 背景:数据集中包含水位变化的历史记录x和水坝的水量y。 任务一...
    SmallRookie阅读 416评论 0 0
  • 之前浏览Coursera上机器学习方面的课程,Andrew Ng的《Machine Learning》课程评分一直...
    黑洞王阅读 1,538评论 0 2
  • 作业1:<!DOCTYPE html> 图形 .box{width:0px;height:0px;bord...
    17057任合宇阅读 94评论 1 1
  • 神经网络学习 任务一 数据可视化 在本次编程练习中,我们使用编程练习三种的数据集。除此之外,我们随机从数据集中选取...
    SmallRookie阅读 432评论 0 0
  • 不管做什么都需要三殊胜摄持 公案:两个师父去见佛陀 一位喝了有虫的水见到了佛陀 一位没有喝而渴死 佛陀说面见佛陀的...
    塔秋旺姆阅读 563评论 0 0