此系列文章主要为记录作业过程,也为卡在某处提供些许思路,所以还是建议独立完成,这样对知识的理解最为深刻。

plotData

这部分内容是已经写好的,但还是应该认真读一遍代码,看看究竟是如何绘图的。核心的代码如下:

% 设置灰色图谱,这样就可以使用小数数值来
colormap(gray);% 计算example(一个数字可以看做一个example)的个数和每个example的像素高度(等于像素总数/像素宽度)
[m n] = size(X);
example_height = (n / example_width);% 计算展示多少行的example,每行展示多少个example
display_rows = floor(sqrt(m));
display_cols = ceil(m / display_rows);% 每个example上下左右的padding(参考CSS的盒模型)
pad = 1;% 初始化数组,初始值都是-1
display_array = - ones(pad + display_rows * (example_height + pad), ...pad + display_cols * (example_width + pad));% 将X中的值赋给display中对应的位置
curr_ex = 1;
for j = 1:display_rows...% 先取example列最大值,再使用reshape将行向量转为数组,除以最大值后赋给display_array的对应位置max_val = max(abs(X(curr_ex, :)));display_array(pad + (j - 1) * (example_height + pad) + (1:example_height), ...pad + (i - 1) * (example_width + pad) + (1:example_width)) = ...reshape(X(curr_ex, :), example_height, example_width) / max_val;curr_ex = curr_ex + 1;endif curr_ex > m, break; end
end% 展示图片
h = imagesc(display_array, [-1 1]);
lrCostFunction

直接套用线性回归的公式即可,需要注意的是第一个变量是不需要正规化的。参考代码如下:

tmp = theta;
tmp(1) = 0;
J = -1 / m * (y' * log(sigmoid(X * theta)) + (1 - y') * log(1 - sigmoid(X * theta))) + lambda / 2 / m * (tmp' * tmp);
grad = 1 / m * (X' * (sigmoid(X * theta) -y)) + (lambda / m) * tmp;
oneVsAll

根据提示很好写,我这里使用了for循环,应该可以直接用向量化来做的:

for c = 1:num_labels% Set Initial thetainitial_theta = zeros(n + 1, 1);% Set options for fminuncoptions = optimset('GradObj', 'on', 'MaxIter', 50);[all_theta(c,:), fX, i] = fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), initial_theta, options);
endfor
predictOneVsAll

这部分比较困难,主要还是对线性回归和Octave中的数组运算不熟悉。首先线性回归的预测计算的结果需要sigmoid,得到predictH;再使用max(predictH, [], 2)求出每一行的最大值;接着使用predictH == max(predictH, [], 2)使得最大值的位置得到1,其他位置都为0;然后使用find(tmp)来得到每一行最大值的列号;最后因为1 ~ 9的位置对应1 ~ 9的预测,10的位置对应0,所以直接使用p(i) = j就可以得到最终的预测结果,参考代码如下:

predictH = sigmoid(X * all_theta');
tmp = predictH == max(predictH, [], 2);
[i, j] = find(tmp);
p(i) = j;
predict

使用现成的参数,和上面一部分基本一致,只不过计算过程变成了后向传播算法,别忘加bias就行,参考代码如下:

X = [ones(m, 1), X];
a2 = sigmoid(X * Theta1');
a2 = [ones(size(a2, 1), 1), a2];
a3 = sigmoid(a2 * Theta2');
tmp = a3 == max(a3, [], 2);
[i, j] = find(tmp);
p(i) = j;

Machine Learning上机作业ex3解答相关推荐

  1. 网易云课堂 Machine Learning 编程作业 1:liner regression

    网易云课堂 Machine Learning 编程作业 1:liner regression 一.单变量线性回归 1. warmUpExercise.m:Output the 5 by 5 ident ...

  2. 機器學習基石 机器学习基石(Machine Learning Foundations) 作业1 习题解答

    大家好,我是Mac Jiang,今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业1的习题解答.笔者是在学习了Ng的Machine ...

  3. 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 课后习题解答

    今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业三的习题解答.笔者在做这些题目时遇到很多困难,当我在网上寻找答案时却找不到,而林老 ...

  4. 机器学习 Machine Learning中一元线性回归的学习笔记~

    1 前言 今天在做 Machine Learning的作业~ 2 一元线性回归 2.1 loss函数 带有规范化的loss函数: J(θ)=12m∑i=1m(hθ(x(i))−y(i))2+λ2m∑j ...

  5. 機器學習基石 机器学习基石 (Machine Learning Foundations) 作业二 Q19-20 C++实现

    大家好,我是Mac Jiang,今天和大家分享Coursera-NTU-機器學習基石(Machine Learning Foundations)-作业2 Q19-20的C++实现.虽然有很多大神已经在 ...

  6. Coursera 吴恩达《Machine Learning》视频 + 作业

    红色石头的个人网站:www.redstonewill.com 吴恩达(Andrew Ng)在 Coursera 上开设的机器学习入门课<Machine Learning>,授课地址是: C ...

  7. 大数据第一课(满分作业)——泰坦尼克号生存者预测(Titanic - Machine Learning from Disaster)

    大数据第一课(满分作业)--泰坦尼克号生存者预测(Titanic - Machine Learning from Disaster) 1 项目背景 1.1 The Challenge 1.2 What ...

  8. 吴恩达Coursera, 机器学习专项课程, Machine Learning:Advanced Learning Algorithms第三周编程作业...

    吴恩达Coursera, 机器学习专项课程, Machine Learning:Advanced Learning Algorithms第三周所有jupyter notebook文件: 吴恩达,机器学 ...

  9. 吴恩达Coursera, 机器学习专项课程, Machine Learning:Advanced Learning Algorithms第二周编程作业...

    吴恩达Coursera, 机器学习专项课程, Machine Learning:Advanced Learning Algorithms第二周所有jupyter notebook文件: 吴恩达,机器学 ...

最新文章

  1. mxmkc编译器参数!
  2. python 函数的*args,**kwargs
  3. python websocket server_Python Websocket服务端
  4. c mysql 编码_mysql编码转换 mysql编码设置详解
  5. Swift变量名的一种玩法
  6. filebeat 笔记
  7. 字符串截取mysql
  8. python下载numpy库_安装numpy库
  9. 规划资源管理常用表格
  10. windows域的创建
  11. FANUC机器人外部电缆连接示意图(一)
  12. 微笑识别(HOG+SVM+opencv+python)
  13. 最佳实践 缓存穿透,瞬间并发,缓存雪崩的解决方法
  14. 从0开始学习 GitHub 系列之「05.Git 进阶」----转载自stormzhang 原创文章
  15. xsell5 momokai配色
  16. qspi(spi四线模式)
  17. Obsidian DataView插件介绍
  18. 新手在Manjaro环境中安装pycharm--供参考
  19. 屏蔽百度广告,百度新闻
  20. RxJava从入门到精通:RxJava源码初步分析

热门文章

  1. 计算机科学中的“边际效益递减”理论
  2. PAT乙级-1048 数字加密
  3. 什么是短链接?长连接?
  4. 萤石推出宝宝看护摄像机,科技育儿赋能世代
  5. UINavigationController注意事项
  6. 【Java实战】Java实现简易坦克对战小游戏
  7. Black Hat USA 2021:通过无线基带-针对5G智能手机的RCE白皮书
  8. 计算机视觉岗秋招面经
  9. 【计算机动画】人体动画概览
  10. 需求-MTK平台降低闪光灯电流