分成两部分,一是本节课程内容的简要回顾,二是作业步骤的推导
程序打包网盘地址提取码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 %211
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