梯度下降的线性回归用python_学习笔记:使用python 实现线性回归里的梯度下降...
梯度下降是机器学习里的一个重要的方法,用来寻找最优解
在线性回归里, 梯度下降用于找出一条曲线里的最优切线,也就是求 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 实现线性回归里的梯度下降...相关推荐
- 拉一塔准则python_学习笔记之Python实现纵横向拉开档次法-研究方法概述
不同省份科技转化能力测度是基于面板数据的动态综合测度问题,对于此类问题,目前学术界往往是通过将动态问题简化成静态问题来处理,但这种处理方式往往会造成评价结果失真.因此,本文引入逐层纵横向拉开档次法,其 ...
- 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码
吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...
- 吴恩达《机器学习》学习笔记二——单变量线性回归
吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...
- python编程语言继承_python应用:学习笔记(Python继承)
学习笔记(Python继承)Python是一种解释型脚本语言,可以应用于以下领域: web 和 Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 后端开发 网络爬虫 有几种叫法(父类 ...
- python3.4学习笔记(九) Python GUI桌面应用开发工具选择
python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者 http://www.admin10000.com/document/9 ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...
- python爬取b站视频封面_学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面...
学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面 import os import requests import re import json from bs4 import B ...
- 学习笔记之——Python中类和对象的理解
学习笔记之--Python中类和对象的理解 面向对象的含义和特性 类 Python中类的定义.结构.创建 Python类的定义 Python类的结构 类的创建 类的属性 类的方法 对象 对象的创建 参 ...
- ros学习笔记12——python实现发布和接收ros topic
ros学习笔记12--python实现发布和接收ros topic 一.简单demo 1.工作空间是存放工程开发的相关文件的文件夹 2.创作工作空间指令 3 .创建功能包 4. 创建Topic的订阅发 ...
- 《流畅的python》学习笔记之python是什么类型的语言?
讨论类型时,最好考虑两条不同的坐标线! 强类型和弱类型 如果一门语言很少隐式转换类型,说明它是强类型语言.如果经常这么做,说明它是弱类型语言.其中,java,c++和python是强类型语言,php, ...
最新文章
- Linux查看实时带宽流量情况
- win7+php5.3.10下安装memcache (转)
- 请在请求中携带deviceid参数_日常工作中最容易犯的几个并发错误,你中了几个?...
- java中程序执行顺序
- MyBatis-Plus_Condition作用
- Kruskal算法 最小生成树
- ckeditor:基本使用方法
- iOS 中 常用的第三方库
- 计算机二级知识汇总手抄报,计算机二级vb_全国计算机二级vb真题
- Docker 安装教程
- 蚂蚁分类信息使用心得
- Admob的PIN码接收教程
- 牛客练习赛73 遥远的记忆(理解)
- 第4章 手机平板要兼顾,探究碎片
- (六)jmeter接口自动化难点系列---jmeter使用base64解密
- Fresher的完美文本
- 根据身高体重计算BMI指数
- Linux之USB无线网卡开发(二)
- C++开发短信验证码通知短信
- mysql之通过cmd连接远程数据库