文章目录

  • 一、简单线性回归(即一元线性回归)
  • 二、代价函数
    • 数学表达式:
    • 代码实现:
    • 实例说明
  • 三、梯度下降
    • 数学表达式:
    • 具体方法
    • 代码实现:
    • 代价随迭代次数的变化

一、简单线性回归(即一元线性回归)

线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个线性函数,然后测试这个函数训练的好不好(即此函数是否足够拟合训练集数据),挑选出最好的函数(cost function最小)即可。
注意:
1.因为是线性回归,所以学习到的函数为线性函数,即直线函数;
2.因为是单变量,因此只有一个x;

线性回归模型

二、代价函数

看过了简单线性回归,我们肯定有一个疑问,怎么样能够看出线性函数拟合的好不好呢?

我们需要使用到Cost Function(代价函数),代价函数越小,说明线性回归地越好(和训练集拟合地越好),当然最小就是0,即完全拟合;

虽然我们现在还不知道Cost Function内部到底是什么样的,但是我们的目标是:给定输入向量x,输出向量y,theta向量,输出Cost值;

数学表达式:

代码实现:

# 计算代价函数
def computerCost(X,y,theta):m = len(y)J = 0J = (np.transpose(X*theta-y))*(X*theta-y)/(2*m) #计算代价Jreturn J

肯能对代价函数还是比较懵逼,那就看看具体的东西。

实例说明

比如给定数据集(1,1)、(2,2)、(3,3)则x = [1;2;3],y = [1;2;3] (此处的语法为Octave语言的语法,表示3*1的矩阵)

  • 如果我们预测theta0 = 0,theta1 = 1,则h(x) = x,则cost function:
    J(0,1) = 1/(2*3) * [(h(1)-1)2+(h(2)-2)2+(h(3)-3)^2] = 0;

  • 如果我们预测theta0 = 0,theta1 = 0.5,则h(x) = 0.5x,则cost function:
    J(0,0.5) = 1/(2*3) * [(h(1)-1)2+(h(2)-2)2+(h(3)-3)^2] = 0.58;

theta0,theta1分别代表数学表达式中的θ0\theta_{0}θ0​和θ1\theta_{1}θ1​

如果theta0 一直为 0, 则theta1与J的函数为:

如果有theta0与theta1都不固定,则theta0、theta1、J 的函数为:

当然我们也能够用二维的图来表示,即等高线图:

注意:如果是线性回归,则costfunctionJ与的函数一定是碗状的,即只有一个最小点。

三、梯度下降

在知道了如何看出线性函数拟合好不与好后,又生出了一个问题,我们如何调整函数的参数使拟合程度达到最佳呢?

人工手动调试是肯定不行的太耗时间,而且结果不一定让我们满意。这时就需要引入梯度下降的概念找出cost function函数的最小值。

梯度下降原理:将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快。

数学表达式:

  • 其中α\alphaα为学习速率,控制梯度下降的速度,一般取0.01,0.03,0.1,0.3…
  • m为Y的长度,即训练集中元素的个数
  • θj\theta_{j}θj​为代价函数

具体方法

(1)先确定向下一步的步伐大小,我们称为Learning rate(即α\alphaα)。
(2)任意给定一个初始值。
(3)确定一个向下的方向,并向下走预先规定的步伐,并更新。
(4)当下降的高度小于某个定义的值,则停止下降。

初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值。

代码实现:

# 梯度下降算法
def gradientDescent(X,y,theta,alpha,num_iters):m = len(y)      n = len(theta)temp = np.matrix(np.zeros((n,num_iters)))   # 暂存每次迭代计算的theta,转化为矩阵形式J_history = np.zeros((num_iters,1)) #记录每次迭代计算的代价值for i in range(num_iters):  # 遍历迭代次数    h = np.dot(X,theta)     # 计算内积,matrix可以直接乘temp[:,i] = theta - ((alpha/m)*(np.dot(np.transpose(X),h-y)))   #梯度的计算theta = temp[:,i]J_history[i] = computerCost(X,y,theta)      #调用计算代价函数print(".")return theta,J_history

刚开始不宜研究过深,后期再对线性回归内容进行补充。

代价随迭代次数的变化

在梯度下降的过程中代价会随迭代次数的增加而减少,但并不是迭代次数越多越好,当迭代次数达到一定值后,代价值几乎不会有变化。

参考文章:机器学习入门:线性回归及梯度下降,我精减了他这篇博客的内容,并加入python的代码实现。

机器学习第4天:线性回归及梯度下降相关推荐

  1. 机器学习01-定义、线性回归、梯度下降

    目录 一.定义 What is Machine Learning 二.建模 Model Representation 三.一元线性回归 Linear Regression with One Varia ...

  2. 用懊悔法学习吴恩达机器学习【2】-----线性回归的梯度下降

    以下英文文档皆出自课程配套笔记 课9 代价函数二 这一课时考虑使用两个参数来描述代价函数.此时等价函数是一个碗形,碗底点为最小值,将碗形用等高线表示,等高线中心就是代价函数的最小值.所以距离等高线中心 ...

  3. 吴恩达机器学习(六)线性回归的梯度下降

    文章目录 1.先导知识 2.线性回归的梯度下降 1.先导知识 之前学习的内容: 2.线性回归的梯度下降 我们要做的是将梯度下降法应用到最小化平方差代价函数, 我们解决过的梯度下降问题之一就是它容易陷入 ...

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

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

  5. 机器学习:单变量线性回归及梯度下降

    ***************************************** 注:本系列博客是博主学习Stanford大学 Andrew Ng 教授的<机器学习>课程笔记.博主深感学 ...

  6. 【机器学习基础】线性回归和梯度下降的初学者教程

    作者 | Lily Chen 编译 | VK 来源 | Towards Data Science 假设我们有一个虚拟的数据集,一对变量,一个母亲和她女儿的身高: 考虑到另一位母亲的身高为63,我们如何 ...

  7. 为什么回归直线过平均值点_线性回归和梯度下降的初学者教程

    假设有一个虚拟的数据集包含多对变量,即每位母亲和她女儿的身高: 通过这个数据集,我们如何预测另一位身高为63的母亲的女儿的身高? 方法是用线性回归. 首先找到最佳拟合线,然后用这条直线做预测. 线性回 ...

  8. 线性回归随机梯度下降_线性回归的批次梯度与随机梯度下降

    线性回归随机梯度下降 In this article, we will introduce about batch gradient and stochastic gradient descent m ...

  9. 线性回归实现——梯度下降

    文章目录 线性回归实现 实验数据: 实现结果: 算法流程: 代码实现: 线性回归实现 y=ax+by = ax + by=ax+b x,y 是向量,a,b是标量 梯度下降法: a=a−α∂cost∂a ...

最新文章

  1. 洛谷 P2415 集合求和【数学公式/模拟】
  2. 傅立叶变换—FFT(cuda实现)
  3. C#中对泛型List进行分组输出元素
  4. oracle使用sqlplus查询sql格式
  5. [Java基础]Map集合基础
  6. 名创优品向港交所提交上市申请书
  7. linux cent os7,Cent OS 7系统目录结构
  8. 中国水龙头市场趋势报告、技术动态创新及市场预测
  9. 掌控安全Web安全微专业笔记
  10. 超声波传感器测距实验430
  11. 【win10系统重装】
  12. 听说CDN高防和高防IP是服务器安全的“翘楚”,那么你知道这二者的区别吗?
  13. vue2.0中的路由传值
  14. 基于python的个人博客系统的设计开题报告_基于JavaSSM框架的个人博客系统设计与实现开题报告...
  15. 诺顿ghost使用教程
  16. Win10电脑创建本地网站
  17. 虚拟机命令里面的光标不动了怎么办_Linux 11个炫酷的终端命令!你知道几个?
  18. 公众号seo排名优化技术,公众号名称优化排名
  19. IT人的微信自媒体--- 杰天空, 走在寻找创意的路上
  20. 基于Springboot+Vue+小程序学生课程考勤系统设计

热门文章

  1. Golang gorouting 并发控制 sync.WaitGroup 介绍与使用
  2. Golang 计算MD5值示例
  3. python中返回上一步操作的代码_Pycharm代码跳转后退回操作详解
  4. android 圆滑曲线,如何使用贝塞尔曲线在一组点上绘制平滑线?
  5. 机械师怎么打开计算机管理,机械师创物者-R笔记本智能控制中心使用教程
  6. mysql自动异地备份脚本_MYSQL数据库自动本地/异地双备份/MYSQL增量备份
  7. 请求模式解决共享资源冲突
  8. C++继承中父类和子类之间的同名覆盖
  9. 蛇形矩阵c 语言怎么写,蛇形矩阵输出是要怎么写代码,感觉没有眉目啊,大佬能说一下思想吗...
  10. java使用getinputstream_java解析数据接口获取json对象