大家好,我是Mac Jiang,今天和大家分享Coursera-NTU-機器學習基石(Machine Learning Foundations)-作业四 Q13-20的MATLAB实现。

曾经的代码都是通过C++实现的。可是发现C++实现这些代码太麻烦。这次作业还要频繁更改參数值,所以选择用MATLAB实现了。与C++相比。MATLAB实现显然轻松非常多。在数据导入方面也更加方便。我的代码尽管可以得到正确答案,可是当中可能有某些思想或者细节是错误的,假设各位博友发现,请及时留言纠正,谢谢。再次声明,博主提供实现代码的原因不是为了让各位通过測试,而是为学习有困难的同学提供一条解决思路。希望我的文章对您的学习有一些帮助!

本文出处:http://blog.csdn.net/a1015553840/article/details/51173020

其它问题解答请看汇总帖:http://blog.csdn.net/a1015553840/article/details/51085129

1.sign函数

function S = sign(x)  %计算sign
[m,n] = size(x);
for i = 1:m,
for j = 1:n; if x(i,j) <= 0,
S = 1;
else
S = -1;
end
end
end
end

2.计算正则化线性回归函数LGwithRegularization

function Wreg = LGwithRegularization(X,y,lambda)
[m,n] = size(X);
Wreg = inv(X' * X + lambda * eye(n)) * X' * y;%正则化的线性回归求解
end

3.错误计算函数Error01 (注意。这里用的是0/1错误)

function E = Error01(X,y,Wreg)
[m,n] = size(X);
E = 1 - sum(sign(X * Wreg) == y) / m;%计算错误率
end

4.主进程

clc
trainingData = load('trainingData.txt');
Xtrain = trainingData(:, [1, 2]); ytrain = trainingData(:, 3);
testData = load('testData.txt');
Xtest = testData(:,[1,2]);ytest = testData(:,3);
[m,n] = size(Xtrain);
Xtrain = [ones(m,1), Xtrain];
[a,b] = size(Xtest);
Xtest = [ones(a,1), Xtest]; %13-15
%lambda = 10^-3;
%Wreg = LGwithRegularization(Xtrain,ytrain,lambda);
%Ein = Error01(Xtrain,ytrain,Wreg)
%Eout = Error01(Xtest,ytest,Wreg) %16-17
%lambda = 10^-3;
%Wreg = LGwithRegularization(Xtrain(1:120,:),ytrain(1:120,:),lambda);
%Etrain = Error01(Xtrain(1:120,:),ytrain(1:120,:),Wreg)
%Eval = Error01(Xtrain(121:200,:),ytrain(121:200,:),Wreg)
%Eout = Error01(Xtest,ytest,Wreg) %18
%lambda = 10^0;
%Wreg = LGwithRegularization(Xtrain,ytrain,lambda);
%Ein = Error01(Xtrain,ytrain,Wreg)
%Eout = Error01(Xtest,ytest,Wreg) %19
%lambda = 10^-6
%Ecv = 0;
%v = 5;
%per = m / v;
%for i = 1:v,
% Xtemp = Xtrain;
% ytemp = ytrain;
% Xtemp(1+(i-1)*per:i*per,:) = [];%出去用于求交叉验证的样本
% ytemp(1+(i-1)*per:i*per,:) = [];
% Wreg = LGwithRegularization(Xtemp,ytemp,lambda);
% Error01(Xtrain(1+(i-1)*per:i*per,:),ytrain(1+(i-1)*per:i*per,:),Wreg)%利用交叉验证的样本求Ecv
% Ecv = Ecv + Error01(Xtrain(1+(i-1)*per:i*per,:),ytrain(1+(i-1)*per:i*per,:),Wreg);
%end
%Ecv = Ecv / v %20
%lambda = 10^-8;
%Wreg = LGwithRegularization(Xtrain,ytrain,lambda);
%Ein = Error01(Xtrain,ytrain,Wreg)
%Eout = Error01(Xtest,ytest,Wreg)

13.第十三题



(1)题意:从两个站点下载训练样本和測试样本,利用正则化的线性回归,參数lambda取10。得到Ein 和Eout

(2)答案:Ein = 0.050 Eout = 0.045

14-15:第14-15题

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

(1)题意: 14.分别取lamda值为.....计算Ein和Eout。选取最小的Ein相应的正确答案,假设两个lambda相应的答案一样,选择大的lambda

15.选取最小Eout相应的正确答案

(2)答案:14.log = -8, Ein = 0.015,Eout = 0.02

15.log = -7,Ein = 0.03,Eout = 0.015

16.第十六题

(1)题意:利用前120个样本作为训练样本,后80个样本作为測试样本,分别计算不同lambda相应的Etrain,Eval,Eout。选择最小的Etrain相应的答案

(2)答案:log = -8,Etrain = 0, Eval = 0.05, Eout = 0.025

17.第十七题

(1)题意:和16题的做法一样。选择最小Eval相应的正确答案

(2)答案:log = 0, Etrain = 0.0333,Eval = 0.0375,Eout = 0.0280

18.第十八题

(1)题意:利用17题得到的最优lambda,利用全部样本作为训练样本。计算Ein,Eout

(2)答案:Ein = 0.035 Eout=0.02

19-20:第19-20题

(1)题意:19.把样本分为5份,利用交叉验证的方法计算Ecv,计算得到最小的Ecv

20.利用19得到的最小Ecv相应的lambda值,计算Ein,Eout

(2)答案:19. log=-8, Eval = 0.03

20.Ein = 0.015。Eout = 0.02

本文出处:http://blog.csdn.net/a1015553840/article/details/51173020

其它问题解答请看汇总帖:http://blog.csdn.net/a1015553840/article/details/51085129

機器學習基石(Machine Learning Foundations) 机器学习基石 作业四 Q13-20 MATLAB实现的更多相关文章

  1. 機器學習基石(Machine Learning Foundations) 机器学习基石 课后习题链接汇总

    大家好,我是Mac Jiang,非常高兴您能在百忙之中阅读我的博客!这个专题我主要讲的是Coursera-台湾大学-機器學習基石(Machine Learning Foundations)的课后习题解 ...

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

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

  3. 機器學習基石 (Machine Learning Foundations) 作业1 Q15-17的C++实现

    大家好,我是Mac Jiang.今天和大家分享Coursera-台湾大学-機器學習基石 (Machine Learning Foundations) -作业1的Q15-17题的C++实现. 这部分作业 ...

  4. 機器學習基石 机器学习基石 (Machine Learining Foundations) 作业2 Q16-18 C++实现

    大家好,我是Mac Jiang,今天和大家分享Coursera-NTU-機器學習基石(Machine Learning Foundations)-作业2 Q16-18的C++实现.尽管有非常多大神已经 ...

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

    由于前面分享的几篇博客已经把其他题的解决方法给出了链接,而这道题并没有,于是这里分享一下: 原题: 这题说白了就是求一个二维平面上的数据用决策树来分开,这就是说平面上的点只能画横竖两个线就要把所有的点 ...

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

    这里写的是  习题1 中的    18 , 19, 20 题的解答. Packet 方法,我这里是这样认为的,它所指的贪心算法是不管权重更新是否会对train data有改进都进行修正,因为这里面没有 ...

  7. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  8. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习

    Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...

  9. 【Machine Learning】机器学习の特征

    绘制了一张导图,有不对的地方欢迎指正: 下载地址 机器学习中,特征是很关键的.其中包括,特征的提取和特征的选择.他们是降维的两种方法,但又有所不同: 特征抽取(Feature Extraction): ...

随机推荐

  1. poj 2242(已知三点求外接圆周长)

    The Circumference of the Circle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8310   ...

  2. Centos7重置root密码的方法(亲测有效)

    CentOS 7的更新还是非常大的,很多平时使用的命令已经变化了,要上手还真要一段时间.比如忘记root密码.在5.6的系统中直接进入单用户模式下,一个passwd命令修改,重启即可.但是在Cento ...

  3. Asp.net中的一个判断session是否合法的做法

    1 if (Session["UserID"] == "" || Session["UserID"] == null) 2 { 3     ...

  4. [thinkphp] 获取根目录绝对路径

    $root = realpath(__ROOT__);

  5. CF 1003C Intense Heat【前缀和/精度/双层暴力枚举】

    The heat during the last few days has been really intense. Scientists from all over the Berland stud ...

  6. C++指针和数组的区别(不能混用的情况)

    通常情况下,C++中指针和数组是可以混用的,但是,在编写字符数组的全排列的时候,混用却出了问题,因此,今天特地mark一下,以备日后查找 这里整理的,不包括用new开辟的动态数组 1.数组一旦声明,我 ...

  7. sdoi2018酱油鸡

    ruand1滚粗啦,然后过来写游记 四月是你の省选... day -1 老师突然告诉我们说 day2 回来参加月考,心态爆炸. day0 坐车,颓,和队爷zpd补了b站翻唱2017top100,晚上收 ...

  8. 【树链剖分】【线段树】bzoj2157 旅游

    #include<cstdio> #include<algorithm> using namespace std; #define INF 2147483647 #define ...

  9. 【秦九韶算法】【字符串哈希】bzoj3751 [NOIP2014]解方程

    在模意义下枚举m进行验证,多设置几个模数,而且小一些,利用f(x+p)%p=f(x)%p降低计算次数.UOJ AC,bzoj OLE. #include<cstdio> #include& ...

  10. python3-关于GitHub的最基本操作

    阅读目录 介绍 什么是GitHub? 创建存储库 创建一个分支 做一个提交 打开拉取请求 合并拉取请求 一.介绍 Hello World项目是计算机编程历史悠久的传统.这是一个简单的练习,可以让你在学 ...