梯度下降与线性回归

对于代价函数:
loss=∑i(y^−yi)2loss=\sum_i{(\hat{y}-y_i)}^2loss=i(y^yi)2

loss=∑i(w∗xi+b−yi)2loss=\sum_i{(w*x_i+b-y_i)}^2loss=i(wxi+byi)2

最常见的代价函数:均方差代价函数(Mean-Square Error,MSE):
loss=12N∑iN(w∗xi+b−yi)2loss=\frac{1}{2N}\sum_i^N{(w*x_i+b-y_i)}^2loss=2N1iN(wxi+byi)2

一 梯度下降(Gradient Descent)

在学习梯度下降原理之前首先我们需要知道这几个数学概念:导数、偏导数、方向导数和梯度。关于梯度下面直接说结论:

  1. 梯度是一个矢量,既有大小又有方向
  2. 梯度的方向是最大的方向导数
  3. 梯度的值是方向导数的最大值

梯度下降算法基本原理:
既然在变量空间的某一点处,函数沿着梯度方向具有最大的变化率,那么在优化代价函数的时候,就可以沿着负梯度方向去减小代价函数的值。

梯度下降数学原理:

w′=w−lr∗∂loss∂ww\prime=w-lr*\frac{\partial loss}{\partial w}w=wlrwloss

b′=b−lr∗∂loss∂bb\prime=b-lr*\frac{\partial loss}{\partial b}b=blrbloss

其中lr表示的是学习率:LearningRate

""""
用一元线性回归解决回归问题: y = wx + b
"""
import numpy as np
import matplotlib.pyplot as plt
# 画图正常显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号def compute_error(b, w, points):totalError = 0for i in range(0, len(points)):x = points[i, 0]y = points[i, 1]# computer mean-squared-errortotalError += (y - (w * x + b)) ** 2# average loss for each pointreturn totalError / float(len(points))def step_gradient(b_current, w_current, points, learningRate):b_gradient = 0w_gradient = 0N = float(len(points))for i in range(0, len(points)):x = points[i, 0]y = points[i, 1]# 计算梯度 grad_b = 2(wx+b-y) grad_w = 2(wx+b-y)*xb_gradient += (2 / N) * ((w_current * x + b_current) - y)w_gradient += (2 / N) * x * ((w_current * x + b_current) - y)# update w'new_b = b_current - (learningRate * b_gradient)new_w = w_current - (learningRate * w_gradient)return [new_b, new_w]def gradient_descent_runner(points, starting_b, starting_w, learning_rate, num_iterations):b = starting_bw = starting_w# update for several timesfor i in range(num_iterations):b, w = step_gradient(b, w, np.array(points), learning_rate)return [b, w]def plot_scatter(data):x_data = data[:, 0]y_data = data[:, 1]plt.scatter(x_data, y_data)plt.title("训练数据集散点分布")plt.xlabel("自变量:x")plt.ylabel("因变量:y")plt.savefig("scatter.png")# plt.show()def plot_result(data, w, b):x_data = data[:, 0]y_data = data[:, 1]plt.scatter(x_data, y_data, c='b')plt.plot(x_data, w * x_data + b, 'r')plt.title("训练拟合结果")plt.xlabel("自变量:x")plt.ylabel("因变量:y")plt.savefig("result.png")# plt.show()def run():# numpy读取CSV文件points = np.genfromtxt("data.csv", delimiter=",")# 绘制数据散点图plot_scatter(points)# 设置学习率learning_rate = 0.0001# 权值初始化initial_b = 0initial_w = 0# 迭代次数num_iterations = 1000print("Starting b = {0}, w = {1}, error = {2}".format(initial_b, initial_w,compute_error(initial_b, initial_w, points)))print("Running...")[b, w] = gradient_descent_runner(points, initial_b, initial_w, learning_rate, num_iterations)print("After {0} iterations b = {1}, w = {2}, error = {3}".format(num_iterations, b, w, compute_error(b, w, points)))plot_result(points, w, b)if __name__ == '__main__':run()

运行结果:
Starting b = 0, w = 0, error = 5565.107834483211
Running…
After 1000 iterations b = 0.08893651993741346, w = 1.4777440851894448, error = 112.61481011613473
数据集:
在这里插入图片描述

训练拟合结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fastreport字体自适应_FastReport 自动换行与行高自适应及自动增加空行

设定后即可自动换行及行高自适应。版本号5.6.21、masterData:属性值:stretched 为True2、Memo设定wordwrap为True ,stretchMode:smMaxHeightFastReport自动增加空行1、在masterdata下增加child;2、在code编写如下代码varPageLine: integer;//…

.NET Core开发实战(第21课:中间件:掌控请求处理过程的关键)--学习笔记(下)...

21 | 中间件:掌控请求处理过程的关键如果在 Map 的时候逻辑复杂一点,不仅仅判断它的 URL 地址,而且要做特殊的判断的话,可以这么做把判断逻辑变成一个委托我们要判断当我们的请求地址包含 abc 的时候,输出 new abcapp.…

英伟达3060Ti安装GPU版本TensorFlow2.X和Pytorch

查看Python与TensorFlow对应版本 安装GPU版本的TensorFlow的时候,我们需要考虑的一个问题是Python版本与TensorFlow版本的对应关系,可以参考下面这个链接: Python对应TensorFlow CPU版本 GPU版本 查看显卡驱动对应的CUDA版本并且下载安装 …

石子合并-区间dp

设有N堆石子排成一排,其编号为1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量…

cesium米转换经纬度_cesium 笛卡尔坐标(单位:米) 与 经纬度(单位:弧度/度) 之间的转换。...

this.model.readyPromise.then(function (tileset) {//记录模型原始的中心点var boundingSphere tileset.boundingSphere;that.boundingSphere boundingSphere;//模型原始的中心点。此处是笛卡尔坐标,单位:米。var position boundingSphere.center;//…

200行代码,7个对象——让你了解ASP.NET Core框架的本质[3.x版]

2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为《ASP.NET Core框架揭秘》的分享。在此次分享中,我按照ASP.NET Core自身的运行原理和设计思想创建了一个 “迷你版” 的ASP.NET Core框架&…

逻辑回归(二)

逻辑回归 在学习逻辑回归之前我们先回顾一下线性回归。线性回归解决的是回归问题,简单来说就是,我们需要找到一个函数,这个函数需要尽可能的拟合所有训练集的样本点。 逻辑回归解决的是分类问题,它的目标是找到一个函数&#x…

ios 顶部tab滑动实现_iOS开发之多表视图滑动切换示例(仿头条客户端)

好长时间没为大家带来iOS开发干货的东西了,今天给大家分享一个头条新闻客户端各个类别进行切换的一个示例。在Demo中对所需的组件进行的简单封装,在封装的组件中使用的是纯代码的形式,如果想要在项目中进行使用,稍微进行修改即可。…

上元节的灯会(灭)-区间dp

题目背景 上元节的庙会上,牛宝靠自己的聪明才智成功破解了花灯阵,点亮了在场所有花灯,但他没料到的是这个游戏包含AB两个项目,A项目就是点亮所有花灯,而B项目则是熄灭所有花灯。不过点亮的是花灯阵,熄灭的…

Asp.Net Core 中IdentityServer4 授权中心之应用实战

一、前言查阅了大多数相关资料,搜索到的IdentityServer4 的应用文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应用分析中会以一个电商系统架构升级过程中普遍会遇到的场景进行实战性讲述分析,…

交通标志识别项目教程

项目结构图 下载好项目压缩包后解压,得到以上的文件,首先将画红圈的文件删除(如果有) 安装软件 安装Anaconda 安装Pycharm 安装格式工厂 在上图中这个位置输入cmd回车,即可打开命令终端。用这样的方式打开命令终端…

内存超频trfc_这只是开始?四款DDR4内存超频效果对比

原标题:这只是开始?四款DDR4内存超频效果对比之前有人说DDR4内存的频率极限是5000MHz,但在最近结束的台湾电脑展上,有些内存的默认频率已经达到了4400MHz,看样子5000MHz的频率极限很快要实现了,由此也说明5…

素数-试除法和埃式筛选法模板

试除法&#xff1a; bool is_prime(int n) {if (n < 1) return false;for (int i 2;i<sqrt(n);i)//这样写更好!if (n % i0) return false;return true; }埃式筛选法&#xff1a; const int N 1e7; int prime[N 1]; bool vis[N 1];int n_prime(int n) {int k 0;mem…

C# 视频监控系统

去过工厂或者仓库的都知道&#xff0c;在工厂或仓库里面&#xff0c;会有很多不同的流水线&#xff0c;大部分的工厂或仓库&#xff0c;都会在不同流水线的不同工位旁边安装一台电脑&#xff0c;一方面便于工位上的师傅把产品的重要信息录入系统&#xff0c;便于公司系统数据采…

sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比

机器学习xueyifeiyun1989zx&#xff0c;公众号&#xff1a;围着围巾的小黑机器学习之监督学习实战前文我们提到机器学习中的监督学习&#xff0c;其中有一个模型是我们提到的但是没有训练测试的&#xff0c;叫做支持向量机(简称SVM)。支持向量机也是监督学习里面一个非常容易理…

7的序列-数论

题目背景 墨家机关城即将被攻陷&#xff0c;墨家家主无意间发现了一道逃生密道&#xff0c;但这道密道需要密码&#xff0c;机智的你决定参与密码的破译。 题目描述 密码门上有两行数字序列&#xff0c;数字均为非负整数&#xff0c;根据门上的古语&#xff0c;你需要求出满足…

程序员过关斩将--从每秒6000写请求谈起

点击上方“蓝字”关注我们菜菜哥&#xff0c;紧急求助呀怎么回事&#xff1f;产品经理砍你了&#xff1f;没有&#xff0c;只是写了个新项目&#xff0c;上线就被压垮了什么功能&#xff0c;这么强悍&#xff1f;一个记录用户观看视频进度信息的功能那如果用户基数大&#xff0…

批量将PPM格式图片转化为JPG格式

将PPM格式图片转化为JPG格式 做图像识别的时候数据集常常是ppm格式的&#xff0c;虽然不影响建模训练&#xff0c;但是我们电脑往往不支持ppm格式的图像展示。 比如到做交通标志识别的时候用到的BelgiumTS交通数据集或者德国GTSRB数据集 下载后得到都是ppm格式的图像。 格式转…

python数据收集整理教案_数据收集整理教案讲解学习

一、数据收集整理第一课时教学目标初步体验数据收集、整理、描述的过程&#xff0c;会用分类数数的方法将数据整理成简单的统计表&#xff0c;初步认识统计表&#xff0c;能正确填写统计表&#xff0c;能从中获得简单统计的结果。通过对学生身边有趣事例的调查活动&#xff0c;…

hdu1873 看病要排队-优先队列

Problem Description 看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察&#xff0c;他发现了医院里排队还是有讲究的。0068所去的医院有三个医生&#xff08;汗&#xff0c;这么少&#xff09;同时看病。而看病的人病情有轻重&#xff0c;所以不能根据简单的先来…