机器学习编程作业ex5(matlab/octave实现)-吴恩达coursera 多项式线性回归

这篇博客回顾了吴恩达机器学习课程中第六周的内容,包括正则化线性回归和多项式回归。作业涉及加载数据、绘制图表、实现正则化线性回归的代价函数和梯度计算、训练线性回归模型、学习曲线的绘制,并通过交叉验证选择最佳的正则化参数λ。博主还讨论了如何处理高偏差和高方差问题,并提供了多项式特征缩放的实现。
摘要由CSDN通过智能技术生成

分成两部分,一是本节课程内容的简要回顾,二是作业步骤的推导
程序打包网盘地址提取码1111

一、(Week 6)内容回顾

(按上课视频的顺序来)

  • 1.1第一部分:Advice for Applying Machine Learning

    1.将由训练集得到的假设函数应用到测试集,发现有很大的误差,可以用一些常见的调参方法。
    2.在数据集划分上,训练集:交叉验证集:测试集=6:2:2。首先对不同的多项式次数d,训练训练集得到对应的参数theta,然后将这些参数应用到交叉验证集上,选取代价最小的d,如d=4,最后将这个d对应的参数应用到测试集上,评估参数的表现效果。
    3.常用的调参方法如下:
    在这里插入图片描述
    (1)获得更多的训练实例——解决高方差
    (2)尝试减少特征的数量——解决高方差
    (3)尝试获得更多的特征——解决高偏差
    (4)尝试增加多项式特征——解决高偏差
    (5)尝试减少正则化程度 λ——解决高偏差
    (6)尝试增加正则化程度 λ——解决高方差

    对上面内容我的理解是,高方差为过拟合情况,即此时低偏差,如:在这里插入图片描述
    训练集误差0.1,测试集误差0.3,处于高方差情况。高偏差为训练集训练效果不好。调参方法的理解:
    (1)训练集数据过少,如只有单个样本数据,训练集很好拟合,但测试集误差会很大。
    (2)、(3)特征过多,会导致过拟合情况,此时会出现高方差。
    (4)多项式特征过少,不能很好的拟合测试集,此时出现高偏差。
    (5)、(6)正则化是为了解决过拟合问题,即增加λ来解决高方差,减少λ解决高偏差。

  • 1.2第一部分:Machine Learning System Design

1.机器学习系统设计的例子:垃圾邮件分类,其常用方法是统计邮件数据集中前20000个出现频率最高的词,遍历查询某封邮件中是否出现对应的词,以向量形式作为输入集。
2.类偏斜skewed classes问题中,用查准率P precision和查全率R recall评估算法效果,如下图的P=0.8,R=0.5。综合权衡两者的关系式为2/(1/P+1/R),称为F score。
在这里插入图片描述
需要编辑以下的红色文件。(后续部分,需要填入的代码为深色框,已经提供的代码为浅色框。)

文件 内容
ex5.m 正则化线性回归主程序
ex4data1.mat 数据集
featureNormalize.m 特征标准化函数
fmincg.m 优化函数
plotFit.m 绘制多项式拟合图
trainLinearReg.m 训练线性回归
linearRegCostFunction.m 正则化的线性回归代价函数
learningCurve.m 学习曲线
polyFeatures.m 得到特征多项式
validationCurve.m 输出交叉验证数据集的曲线
random_learningCurve.m (可选作业)随机选择数据集的学习曲线

二、作业- Regularized Linear Regression 正则化线性回归

在作业的前半部分,实现正则化的线性回归-根据水库水位的变化(输入数据集)来预测从大坝流出的水量,后半部分通过调试学习算法来比较偏差bias - 方差variance的变化特点。

2.1 Part 1: Loading and Visualizing Data 绘图

一如往常,主程序提供加载数据及数据画图的代码。

load (‘ex5data1.mat’);
% m = Number of examples
m = size(X, 1);
% Plot training data
plot(X, y, ‘rx’, ‘MarkerSize’, 10, ‘LineWidth’, 1.5);
xlabel(‘Change in water level (x)’);
ylabel(‘Water flowing out of the dam (y)’);

输出:
在这里插入图片描述注意到,这里只加载了training set训练集X和对应的输出集y,可以用下列代码查看mat文件的变量名:

b=whos(’-file’,‘ex5data1.mat’);
b.name

得到输出:

ans = X %121
ans = Xtest %21
1
ans = Xval %21*1
ans = y
ans = ytest
ans = yval

2.2 Part 2: Regularized Linear Regression Cost 正则化线性回归代价函数

主函数ex5提供了代价函数及测试接口,如下:

theta = [1 ; 1];
J = linearRegCostFunction([ones(m, 1) X], y, theta, 1);
fprintf(['Cost at theta = [1 ; 1]: %f '…
‘\n(this value should be about 303.993192)\n’], J);

正则化线性回归的代价函数为:
在这里插入图片描述
在向量化的基础下,需要在linearRegCostFunction.m文件中填入以下代码:

J = sum((X * theta - y) .^ 2) / (2*m) + lambda / (2*m) * sum(theta(2:end) .^ 2);

与之前一样,因为正则项regularization的第一项对应输入的特征量1,因此,约定俗成,在这里只选取2:end进行计算,对于θ0不进行正则化。

2.3 Part 3: Regularized Linear Regression Gradient 正则化线性回归梯度计算

主函数这部分提供梯度函数接口及验证函数准确性:

theta = [1 ; 1];
[J, grad] = linearRegCostFunction([ones(m, 1) X], y, theta, 1);
fprintf(['Gradient at theta = [1 ; 1]: [%f; %f] '…
‘\n(this value should be about [-15.303016; 598.250744])\n’], …
grad(1), grad(2));

在这里插入图片描述
linearRegCostFunction.m文件中填入代码:

grad = X' * (X * theta - y) / m;
grad(2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值