监督学习模型描述


学习算法通过训练集得到一个假设函数h,h接收输入可以得到一个输出。
列如:
已知房子大小与对应的价格,通过学习算法驯良可以得到一个假设函数 h h h:
h = θ 0 + θ 1 x h=\theta_0+\theta_1x h=θ0​+θ1​x
设x为房子大小, h h h所得到值即为房价。通过训练集的学习确定假设h的两个系数。

代价函数

对于我们的假设函数h,需要定义一个标准来表明假设所得值与真实值之间的误差,通常我们用平方误差来表明误差,这个我们记为代价函数 J J J
代价函数是所有样本误差的平均。
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h ( x i ) − y i ) 2 J(\theta_0,\theta_1)=\cfrac{1}{2m}\sum_{i=1}^m(h(x^i)-y^i)^2 J(θ0​,θ1​)=2m1​i=1∑m​(h(xi)−yi)2
综上,我们要找到一对系数 θ 0 , θ 1 \theta_0,\theta_1 θ0​,θ1​来使得代价函数 J J J最小

梯度下降(Bath梯度下降)

  1. 给定 θ 0 , θ 1 \theta_0,\theta_1 θ0​,θ1​初始值,一般都直接设为0
  2. 更改 θ 0 , θ 1 \theta_0,\theta_1 θ0​,θ1​以减小 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0​,θ1​)

(注意:梯度下降可能会使得代价函数位于局部最低值,而不是最小值)
更改系数的方法是利用偏导数来进行。

重复直至收敛{ θ j = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) \theta_j=\theta_j-\alpha\cfrac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) θj​=θj​−α∂θj​∂​J(θ0​,θ1​)}
其中 θ j \theta_j θj​为各个系数,这个问题中的 j = 0 , 1 j=0,1 j=0,1, α \alpha α为学习率,控制梯度下降的速度,如果 α \alpha α过小,会导致迭代速度慢, α \alpha α过大会导致无法收敛,因为学习率太大,每次都会越过最低点。

如上图,横坐标相当是系数 θ 0 , θ 1 \theta_0,\theta_1 θ0​,θ1​的综合效应,纵坐标为代价函数 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0​,θ1​)。当前为A点,原本应该会被下降到B点,可是由于学习率过大导致越过了B点到达了C点。
学习率适当不是说取0.5(刚开始时我选择了0.5)正常情况下为0.1,0.03,0.01,0.003,0.001…

数据拟合

我们先将老师提供的数据画出来

clear;
clc;
data=load('ex1data1.txt');
size=data(:,1)';
price=data(:,2)';
figure(1);
plot(size,price,'o');
title('训练集');
xlabel('房子大小');
ylabel('房价')


通过拟合获取函数

clear;
clc;
%%
%画出原始图像
data=load('ex1data1.txt');
size=data(:,1)';
price=data(:,2)';
figure(1);
plot(size,price,'o');
title('训练集');
xlabel('房子大小');
ylabel('房价')
%%
%拟合函数
syms h J k0 k1 f0 f1;%定义变量
h=k0+k1*size;%定义假设函数h
J=sum((h-price).^2)/(2*length(size));%定义代价函数J
f0=diff(J,k0);%求得代价函数对k0的偏导
f1=diff(J,k1);%求得代价函数对k1的偏导
%初始化k0,k1
k0=0;
k1=0;
nowJ=subs(J);%记录当前代价
lastJ=2*nowJ;%记录之前代价
a=0.01;%学习率
while (lastJ-nowJ)/lastJ>=0.00001%当代价变动不大时即为收敛,退出循环%获取新的k0,k1值temp0=vpa(subs(k0-a*f0));temp1=vpa(subs(k1-a*f1));k0=temp0;k1=temp1;lastJ=nowJ;nowJ=subs(J);%计算新的代价函数
end
disp([k0,k1])
x=(5:0.1:25);
y=k0+k1*x;
hold on;
plot(x,y,'-');


其中需要注意的是 θ 0 , θ 1 \theta_0,\theta_1 θ0​,θ1​要同时改变,所以先用temp变量记录变换后的值,等到计算结束之后一起更改系数。

特征缩放

在多变量线性回归中,由于不同特征之间的数量级差别可能很大(比如说房子的大小和房间数)会导致代价函数h收敛较慢,所以需要对特征进行处理后使用

  1. 方法一 除以最大值
    所有特征都除以他的最大值,这个方法在特征数据都是同号的时候能够将所有数据都缩放到[0,1]之间,方便收敛。
  2. 方法二 均值归一化
    对于特征向量 x i x_i xi​,由于有 θ 0 \theta_0 θ0​的原因, x 0 x_0 x0​要永远为1,而对于其他特征:
    x i = x i − μ i s i x_i=\frac{x_i-\mu_i}{s_i} xi​=si​xi​−μi​​
    其中, μ i \mu_i μi​是特征向量 x i x_i xi​的平均值, s i s_i si​是 x i x_i xi​的范围, s i = m a x ( x i ) − m i n ( x i ) s_i=max(x_i)-min(x_i) si​=max(xi​)−min(xi​)

学习率的选择与代价函数收敛的判断

学习率的选择

虽然学习率可以选择0.01,0.003,0.001…但是他们之间的差距任然很大,就上述数据而言,我选择的学习率为0.012,通过观察代价函数值与迭代次数的关系,我们可以选择学习率。

clear;
clc;
%%
data=load('ex1data1.txt');
size=data(:,1)';
price=data(:,2)';
%%
%拟合函数
syms h J k0 k1 f0 f1;%定义变量
h=k0+k1*size;%定义假设函数h
J=sum((h-price).^2)/(2*length(size));%定义代价函数J
f0=diff(J,k0);%求得代价函数对k0的偏导
f1=diff(J,k1);%求得代价函数对k1的偏导
%初始化k0,k1
k0=0;
k1=0;
nowJ=subs(J);%记录当前代价
lastJ=2*nowJ;%记录之前代价
a=0.012;%学习率
number=0;
J_va=zeros(1,1500);
while number~=1500%当代价变动不大时即为收敛,退出循环%获取新的k0,k1值temp0=vpa(subs(k0-a*f0));temp1=vpa(subs(k1-a*f1));k0=temp0;k1=temp1;lastJ=nowJ;nowJ=subs(J);%计算新的代价函数 number=number+1;J_va(number)=nowJ;
end
figure(2);
plot(1:number,J_va);
xlabel('迭代次数')
ylabel('代价')
title('代价随迭代次数而减小')


可以看出曲线非常平滑,这是一个比较好的学习率的结果,如果我们选择一个稍微小一点的,比如0.01

这个曲线很畸形,所以这个学习率并不是太好

代价函数收敛判断

方法一 代价函数变化率小

我们可以记录前一次代价函数的值,然后当前代价进行比较,当变化率小于某个值时退出循环

nowJ=subs(J);
lastJ=2*nowJ+1;
while (lastJ-nowJ)/lastJ>=0.0001%当变化率小于0.0001时退出循环temp0=subs(k0-a*f0);temp1=subs(k1-a*f1);k0=temp0;k1=temp1;%更改记录的代价函数值lastJ=nowJ;nowJ=subs(J);
end

这种方法容易实现,但是却不一定准确。收到学习率的影响,变化率可能会一直大于某个数,这个阙值很难找到。

方法二

在上述我们确定学习率的时候,我们得到了学习率和迭代次数的关系图:

我们可以从这个图中可以得到代价函数在迭代多少次之后趋于收敛。如上图我们可以得知,当迭代次数大于约1200次时,函数趋于收敛。我们可以事先确定好迭代次数来进行数据分析。

吴恩达机器学习,监督学习线性回归与梯度下降(MATLAB实现)相关推荐

  1. 吴恩达机器学习(五)梯度下降

    文章目录 1.梯度下降 2.只有一个参数的最小化函数 1.梯度下降 梯度下降是很常用的算法,它不仅被用在线性回归上,还被广泛应用于机器学习的众多领域.我们将使用梯度下降法最小化其他函数,而不仅仅是最小 ...

  2. 吴恩达-机器学习-一元线性回归模型实现

    吴恩达<机器学习>2022版 第一周 一元线性回归 房价预测简单实现 import numpy as np import math, copy#输入数据 x_train = np.arra ...

  3. 吴恩达机器学习 -- 多变量线性回归

    5.1 多维特征 前一周所讲是单变量线性回归,即 ,是只有一个变量 的假设函数,现在对房价预测模型有了更多的参考特征,比如楼层数,卧室的数量,还有房子的使用年限.根据这些特征来预测房价.此时的变量有多 ...

  4. 吴恩达-机器学习-多元线性回归模型代码

    吴恩达<机器学习>2022版 第一节第二周 多元线性回归 房价预测简单实现         以下以下共两个实验,都是通过调用sklearn函数,分别实现了 一元线性回归和多元线性回归的房价 ...

  5. 吴恩达深度学习 —— 2.4 梯度下降

    在上一节中学习了逻辑回归模型,也知道了损失函数,损失函数是衡量单一训练样例的效果,还知道了成本函数,成本函数用于衡量参数w和b的效果,在全部训练集上来衡量,下面我们讨论如何使用梯度下降法来训练或学习训 ...

  6. 【学习笔记】吴恩达机器学习 WEEK2 线性回归 Octave教程

    Multivariate Linear Regression Multiple Features Xj(i)X_j^{(i)}Xj(i)​ 其中j表示迭代次数,i表示矩阵索引 转换 原来:hθ(x)= ...

  7. 吴恩达机器学习1——单变量线性回归、梯度下降

    目录 吴恩达机器学习第一周 一.什么是机器学习? 二.机器学习的分类 1. 监督学习 2. 非监督学习 3. 监督学习和非监督学习的举例 三.单变量线性回归(**Linear Regression w ...

  8. 吴恩达机器学习2——单变量线性回归

    吴恩达机器学习2--单变量线性回归 监督学习工作模式 训练集中同时给出了输入输出,即人为标注的"正确结果"喂给学习算法,得到一个函数h,h 可以根据输入的x得到一个y,因此h是x到 ...

  9. 吴恩达机器学习之逻辑回归:逻辑回归的假说表示、判定边界、代价函数、简化的成本函数和梯度下降、高级悠哈、多类别分类之一对多(详细笔记,建议收藏,已有专栏)

    吴恩达机器学习栏目清单 专栏直达:https://blog.csdn.net/qq_35456045/category_9762715.html 文章目录 6.逻辑回归(Logistic Regres ...

  10. 吴恩达机器学习笔记-梯度下降

    通过前面的文章我们现在已经有了假设函数$h_\theta(x)$并知道如何度量这个函数与数据的符合程度,即代价函数$J(\theta_0,\theta_1)$取得最小值.那么现在要做的,就是如何去预估 ...

最新文章

  1. 微软研究院和清华大学联合发布 “开放学术图谱(OAG)2.0版本”
  2. iOS 15.2计划上线“数字遗产”!网友:管的真远,身后事都替我操心?
  3. Linux下各文件夹的含义和用途
  4. RocketMQ消息支持的模式-消息异步发送
  5. linux调用v4l2获取视频,嵌入式Linux:V4L2视频采集操作流程和接口说明
  6. drf 解析器的配置和使用
  7. 在windows下安装webpy
  8. 功能至上!国内外最实用的协作类软件盘点
  9. 记一次mysql中文字符乱码的问题排查
  10. 微软发布 .Net Core 3.0 版重大更新,对开发者来说意味着什么?
  11. UNIX高级环境编程 第3章 文件IO
  12. Innodb 与自增长auto_increment
  13. 给IT人的15点建议:苦逼程序员的辛酸反省与总结
  14. 红米pro android o刷机,红米Pro如何刷机?你可以通过这两种方法获取root权限!
  15. N33-Week 1-向日葵
  16. 蓝桥杯 带分数 By Assassin
  17. Kali linux 学习笔记(三十一)无线渗透——密钥交换(PTK)2020.3.11
  18. 使用 Gitbook 打造你的电子书
  19. 全球与中国马铃薯面粉市场深度研究分析报告
  20. 15.内置函数,匿名函数

热门文章

  1. 训练猫狗数据集(及图像增强后训练)
  2. Java_Day4带参方法,数组
  3. 新鲜出炉 | 临床基因组学数据分析实战将于2021年11月12-14开课!!!
  4. 手机拍照翻译如何把中文翻译为英文
  5. @Validated注解详解,分组校验,嵌套校验,@Valid和@Validated 区别,Spring Boot @Validated
  6. validated 验证数组_@Validated和@Valid区别
  7. 资金互助社学习园地(二) 存贷挂钩---金融机构实现存贷两旺的利器
  8. 小米一元流量magisk_【magisk】【MIUI10】亲测解决MIUI一元流量root后无法使用问题...
  9. 简单分析RLP编码原理
  10. Hybrid App开发总结