梯度下降是机器学习里的一个重要的方法,用来寻找最优解

在线性回归里, 梯度下降用于找出一条曲线里的最优切线,也就是求 y =m * X +b 里的M及b

X是自变量,y是应变量。 m 是要计算的斜率,b 是 intercept,也就是截距。 在这样的一元线性函数中,m,b的值要通过求导数的方法获的,求导数也就是求X,Y在连续变化下的切点的变化率。 如果是多元线性函数,叫求偏导(假设其他元的变量不变)

下图中红色的切线就是最后的结果。每个蓝色点(X,y)到这条红线的距离平方的和的平均值(叫均方差)就是这条线的损失函数。红线是所有可能的切线中误差最小的一条。这条红线的起始点假设是0,0,每次增加一个值,增加的量是变化率(导数)乘上学习速率。这个学习率是迭代次数及精确度的平衡点。这个学习速率是通常我们可以人为调整的,在机器学习中也叫超参数。

图片引用自https://raw.githubusercontent.com/mattnedrich/GradientDescentExample/master/gradient_descent_example.gif

假设有这么两组数 X= [1,2,3,4,5] y=[5,7,9,11,13]

可以看出GDP与M2之间存在的一元线性回归关系。符合

y = X * m + b ,也就是 y = x * 2 + 3

m 是要求出的斜率, b 为intercept 截距。梯度下降就是算出这个2,3的过程。

以下可以在jupyter notebook中运行

%matplotlib inline

def gd(X,y):

lr=0.003 #学习速率,也就是超参数。

m_curr=0.0 #开始的m值,通常是0

b_curr=0.0 #开始的b值,通常是0

n = len(X) #样本的大小

iteration = 10000 #迭代的次数

result = pd.DataFrame(data=np.zeros((iteration,4)),columns=[['slope','bias','cost','iternation']])

#将结果放入一个叫result的pandas的dataframe.

for i in range(iteration+1):

##预测一个y值

yhat = m_curr * X + b_curr ## 计算预测的y

cost = (1/n) * sum([val**2 for val in (y-yhat)]) ##计算成本(误差),也就是MSE的值

dm = -(2/n)*sum(X*(y-yhat)) ##求导,也就是求切线在X,Y变化时的变化率,是个函数。

db = -(2/n)*sum(y-yhat) ##求导,也就是求切线在X,Y变化时的变化率,是个函数。

m_curr = m_curr - lr * dm ##调整当前这个迭代的斜率

b_curr = b_curr - lr * db ##调整当前这个迭代的intercept 截距

##写入每次结果

result.iloc[i-1]['slope']=m_curr

result.iloc[i-1]['bias']=b_curr

result.iloc[i-1]['cost']=cost

result.iloc[i-1]['iternation']=i-1

#print ("m {}, b {}, cost {} iteration {}".format(m_curr,b_curr,cost, i))

return result

import pandas as pd

import numpy as np

X=pd.Series([1,2,3,4,5])

y=pd.Series([5,7,9,11,13])

result = gd(X,y)

result.plot(x=['bias'], y=['slope'],kind='scatter');

result.plot(x=['bias'], y=['cost'],kind='scatter');

result[:]

梯度下降的线性回归用python_学习笔记:使用python 实现线性回归里的梯度下降...相关推荐

  1. 拉一塔准则python_学习笔记之Python实现纵横向拉开档次法-研究方法概述

    不同省份科技转化能力测度是基于面板数据的动态综合测度问题,对于此类问题,目前学术界往往是通过将动态问题简化成静态问题来处理,但这种处理方式往往会造成评价结果失真.因此,本文引入逐层纵横向拉开档次法,其 ...

  2. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

  3. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

  4. python编程语言继承_python应用:学习笔记(Python继承)

    学习笔记(Python继承)Python是一种解释型脚本语言,可以应用于以下领域: web 和 Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 后端开发 网络爬虫 有几种叫法(父类 ...

  5. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者 http://www.admin10000.com/document/9 ...

  6. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  7. python爬取b站视频封面_学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面...

    学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面 import os import requests import re import json from bs4 import B ...

  8. 学习笔记之——Python中类和对象的理解

    学习笔记之--Python中类和对象的理解 面向对象的含义和特性 类 Python中类的定义.结构.创建 Python类的定义 Python类的结构 类的创建 类的属性 类的方法 对象 对象的创建 参 ...

  9. ros学习笔记12——python实现发布和接收ros topic

    ros学习笔记12--python实现发布和接收ros topic 一.简单demo 1.工作空间是存放工程开发的相关文件的文件夹 2.创作工作空间指令 3 .创建功能包 4. 创建Topic的订阅发 ...

  10. 《流畅的python》学习笔记之python是什么类型的语言?

    讨论类型时,最好考虑两条不同的坐标线! 强类型和弱类型 如果一门语言很少隐式转换类型,说明它是强类型语言.如果经常这么做,说明它是弱类型语言.其中,java,c++和python是强类型语言,php, ...

最新文章

  1. Linux查看实时带宽流量情况
  2. win7+php5.3.10下安装memcache (转)
  3. 请在请求中携带deviceid参数_日常工作中最容易犯的几个并发错误,你中了几个?...
  4. java中程序执行顺序
  5. MyBatis-Plus_Condition作用
  6. Kruskal算法 最小生成树
  7. ckeditor:基本使用方法
  8. iOS 中 常用的第三方库
  9. 计算机二级知识汇总手抄报,计算机二级vb_全国计算机二级vb真题
  10. Docker 安装教程
  11. 蚂蚁分类信息使用心得
  12. Admob的PIN码接收教程
  13. 牛客练习赛73 遥远的记忆(理解)
  14. 第4章 手机平板要兼顾,探究碎片
  15. (六)jmeter接口自动化难点系列---jmeter使用base64解密
  16. Fresher的完美文本
  17. 根据身高体重计算BMI指数
  18. Linux之USB无线网卡开发(二)
  19. C++开发短信验证码通知短信
  20. mysql之通过cmd连接远程数据库

热门文章

  1. 接口”安全机制”的设计
  2. 打开struts-config.xml 报错 解决方法Could not open the editor
  3. angularJs模版注入的两种方式
  4. linux:nohup 不生成 nohup.out的方法
  5. IBatisNet初步体验
  6. Redis高可用方案:sentinel(哨兵模式)以及springboot整合sentinel模式
  7. 字节码指令之对象的创建与访问指令
  8. 今日头条正式发布小程序
  9. 深入理解JVM一JVM内存模型
  10. Linux日志终极指南