1、正则化线性回归
1.1、数据集的可视化
训练数据集:X表示水位变化的历史记录,y表示流出大坝的水量;
交叉验证数据集:Xval,yval;
测试数据集:Xtest,ytest;

其中,训练数据集12组,交叉验证数据集21组,测试数据集21组。

1.2、正则化线性回归损失函数

不对theta0进行惩罚,lambda为正则化参数。
补充函数linearRegCostFunction:

J = (X*theta-y)'*(X*theta-y)/(2*m)+...(theta'*theta-theta(1)*theta(1))*lambda/(2*m);

计算得到:

J =303.9932

1.3、正则化线性回归梯度
梯度计算公式为:

补充函数linearRegCostFunction:

grad = (X*theta-y)'*X(:,2)/m+lambda*theta/m;
grad(1) = (X*theta-y)'*X(:,1)/m;

计算得到:

grad =-15.3030598.2507

1.4、训练神经网络
使用函数fmincg对神经网络进行训练,得到的theta为

theta =13.08790.3678

作出其拟合函数 y = theta0 + theta1*x:

2、偏差与方差
偏差与方差的权衡是机器学习中的一个重要内容。高偏差的模型结构偏简单趋近于欠拟合,而高方差的模型模型复杂趋近于过拟合。
2.1、学习曲线
学习曲线对于调试学习算法是非常有效的,其横坐标为训练样本的数量,纵坐标为误差(训练误差和交叉验证误差)。
其中训练误差计算公式为:

交叉验证误差计算公式与此类似。
将函数learningCurve补充完整:

for i=1:1:m[theta] = trainLinearReg(X(1:i,:), y(1:i,:), lambda);error_train(i,1) = linearRegCostFunction(X(1:i,:),y(1:i,:),theta,0);error_val(i,1) = linearRegCostFunction(Xval,yval,theta,0);
end

运行程序得到:

# Training Examples  Train Error Cross Validation Error1     0.000000    205.1210962     0.000000    110.3003663     3.286595    45.0102314      2.842678    48.3689115      13.154049   35.8651656      19.443963   33.8299627      20.098522   31.9709868      18.172859   30.8624469      22.609405   31.13599810     23.261462   28.93620711     24.317250   29.55143212     22.373906   29.433818


观察得知,随着训练样本的增加,训练误差和交叉验证样本误差都很高,这反映出是一个高偏差的问题,即选用的线性回归模型过于简单,不能很好的拟合数据集,为欠拟合状态,因此需要改用复杂的回归函数。
3、多项式回归
假设本次选用的复杂模型为:

3.1、学习多项式回归
选取多项式次数为8,即p=8。
首先补充完整polyFeatures函数,该函数的目的是将一维X,扩大为p维X。

for i = 1:pX_poly(:,i) = X.^i;
end
p = 8;% Map X onto Polynomial Features and Normalize
X_poly = polyFeatures(X, p);
[X_poly, mu, sigma] = featureNormalize(X_poly);  % Normalize
X_poly = [ones(m, 1), X_poly];                   % Add Ones% Map X_poly_test and normalize (using mu and sigma)
X_poly_test = polyFeatures(Xtest, p);
X_poly_test = bsxfun(@minus, X_poly_test, mu);
X_poly_test = bsxfun(@rdivide, X_poly_test, sigma);
X_poly_test = [ones(size(X_poly_test, 1), 1), X_poly_test];         % Add Ones% Map X_poly_val and normalize (using mu and sigma)
X_poly_val = polyFeatures(Xval, p);
X_poly_val = bsxfun(@minus, X_poly_val, mu);
X_poly_val = bsxfun(@rdivide, X_poly_val, sigma);
X_poly_val = [ones(size(X_poly_val, 1), 1), X_poly_val];           % Add Ones

对于该段代码解释如下:
X_poly = polyFeatures(X, p)是将特征参数扩大为多项式特征参数;
[X_poly, mu, sigma] = featureNormalize(X_poly)返回归一化后特征参数集,其中返回值mu为每个特征参数的均值(期望),返回值sigma为每个特征参数的标准差,其归一化方法为X-mu/sigma;
X_poly = [ones(m, 1), X_poly]增加第一列为1;

同理,对于X_poly_test特征参数:
X_poly_test = polyFeatures(Xtest, p)将特征参数矩阵扩大为p阶多项式特征参数;
X_poly_test = bsxfun(@minus, X_poly_test, mu)使用X_poly_test-mu按列进行处理;
X_poly_test = bsxfun(@rdivide, X_poly_test, sigma)使用X_poly_test/sigma按列进行处理,综合上行代码即为X_poly_test-mu/sigma,为归一化操作;

此处,仍然使用训练集的mu和sigma两个参数对于交叉验证集和测试集进行归一化的原因:此处的归一化后的特征参数集是为训练theta值准备的,而theta值只能从训练集中训练获得,若交叉验证集和测试集独立对自身进行归一化,此处将失去其验证集和测试集的功能定位,所以所有的参数均应该从训练集中获得,而交叉验证集和测试集仅为验证使用。

归一化后获取到的三个数据集为:



当lambda=0,绘制出拟合曲线有:

训练误差和交叉验证误差的关系:

可以看到交叉验证误差比训练误差高很多,并且越来越高,因此为高方差状态,过拟合,需要进行正则化。
3.3、正则化参数lambda的选择
补充完整validationCurve函数

function [lambda_vec, error_train, error_val] = ...validationCurve(X, y, Xval, yval)% Selected values of lambda (you should not change this)
lambda_vec = [0 0.001 0.003 0.01 0.03 0.1 0.3 1 3 10 15 20 25]';% You need to return these variables correctly.
error_train = zeros(length(lambda_vec), 1);
error_val = zeros(length(lambda_vec), 1);for i = 1:length(lambda_vec)lambda = lambda_vec(i);[theta] = trainLinearReg(X, y, lambda);error_train(i,1) = linearRegCostFunction(X,y,theta,0);error_val(i,1) = linearRegCostFunction(Xval,yval,theta,0);
end
end

运行程序有:

可知当正则化参数lambda=17左右时效果最佳。
返回3.1,设置lambda=17,绘制拟合曲线、训练误差和交叉验证误差有:

吴恩达机器学习ex5:正则化线性回归和方差与偏差相关推荐

  1. 吴恩达——机器学习(正则化Regularization)

    正则化 Regularization 1.过拟合 overfitting eg1:线性回归 图一:欠拟合,高偏差 图三:过拟合,高方差(一般在变量很多的时候发生,这种时候训练出的方程总能很好拟合训练数 ...

  2. 吴恩达机器学习课后作业——线性回归(Python实现)

    1.写在前面 吴恩达机器学习的课后作业及数据可以在coursera平台上进行下载,只要注册一下就可以添加课程了.所以这里就不写题目和数据了,有需要的小伙伴自行去下载就可以了. 作业及数据下载网址:吴恩 ...

  3. 吴恩达机器学习--单变量线性回归【学习笔记】

    说明:本文是本人用于记录学习吴恩达机器学习的学习笔记,如有不对之处请多多包涵. 作者:爱做梦的90后 一.模型的描述: 下面的这张图片是对于课程中一些符号的基本的定义: 吴老师列举的最简单的单变量线性 ...

  4. 吴恩达机器学习课后作业——线性回归

    一.单变量线性回归 一.作业内容 假设你是一家特许经营餐厅的首席执行官,正在考虑在不同的城市开一家新店,该连锁店已经在各个城市开设了餐车,文件ex1data1.txt中包含你这些城市的利润和人口数据. ...

  5. 吴恩达机器学习之多变量线性回归实现部分

    C++实现梯度下降法 "linear_regression.h" //多变量线性回归模型 struct elem_var2 {double y;double* x; //用数组传入 ...

  6. 吴恩达机器学习 5.正则化

    1.理解过拟合问题 在训练集的基础上用模型去拟合,得到的假设可能能够非常好地适应训练集(代价函数可能几乎为0,即最小化J(θ)J(\theta)J(θ)几乎为0),但是可能会不能推广到新的数据. 举例 ...

  7. 吴恩达机器学习笔记 —— 3 线性回归回顾

    http://www.cnblogs.com/xing901022/p/9312028.html 更多内容参考 机器学习&深度学习 矩阵的表示 矩阵的索引 向量的表示 矩阵的加法 矩阵与实数的 ...

  8. 吴恩达机器学习作业 1线性回归

    一.单变量线性回归 数据可视化 import numpy as np import pandas as pd import matplotlib.pyplot as plt #print(np.eye ...

  9. pytorch实现吴恩达机器学习课后作业——线性回归

    线性回归 题目和数据 题目:使用ex1data1.txt中给出的两个变量,分别设为x,y,来预测卡车利润(y)的收益值. 在数据集,第一列表示城市人数(x),第二列该城市的卡车利润(y) 数据集: 6 ...

最新文章

  1. 办公求生指南:分享10个可以提高办公效率的优质神器
  2. Arch Linux PDF格式文件无法显示中文
  3. CVPR 2021 | 对抗攻防新方向:动作识别算法容易被攻击!
  4. 正面管教之PHP_正面管教
  5. hbase集群重启后异常删除zookeeper中的元数据
  6. shiro前后端分离_为什么要前后端分离?前后端分离的优点是什么?
  7. Host SMBus controller not enabled的解决方法
  8. session在.ashx文件操作问题
  9. angularjs中的单选框绑定数据注意事项
  10. HTML中合并单元格(水平和垂直)
  11. echarts 模拟迁徙
  12. 关于C++ const成员的一些细节
  13. 如何覆盖上一次commit_如何在 Linux 上一次性批量重命名一组文件?
  14. 利用 ucinet 和 netdraw进行可视化中心度分析
  15. mysql多表查询(一口气解决掉:自连接 左右连接 满连接等)
  16. ldap 身份认证 概念和原理介绍
  17. python颜色识别_python实现简单颜色识别程序
  18. Android Studio学习#2
  19. (转)MVS-OS390系统管理-第二章 大型服务器外存管理
  20. mv移动或重命名文件

热门文章

  1. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取
  2. 操作系统——进程与线程
  3. Android 仿QQ消息界面
  4. Bioconductor Workflows
  5. Android开源git40个App源码
  6. 原码 反码 补码 详解
  7. 从“信件装错”问题向递推问题的延伸
  8. python极简代码实现快速排序
  9. RFC1323 timestamp PAWS的实现陷阱
  10. git笔记之解决eclipse不能提交jar等文件的问题