Python实现批量梯度下降法(BGD)拟合曲线
作者:古明地板砖 发布时间:2023-03-31 07:18:03
标签:Python,批量,梯度下降
1. 导入库
import numpy as np #矩阵运算
import matplotlib.pyplot as plt #可视化
import random #产生数据扰动
2. 产生数据
拟合曲线 y = 2 × x2 + x + 1
X_m = np.mat([[i**2, i, 1] for i in range(-10,10)]) #矩阵类型,用于运算
y_m = np.mat([[2*x[0,0]+x[0,1]+1+random.normalvariate(0,1)] for x in X_m]) #矩阵类型,用于运算
X_a = np.asarray(X_m[:,1].T)[0] #array类型,用于可视化
y_a = np.asarray(y_m.T)[0] #array类型,用于可视化
plt.scatter(X_a, y_a) #显示数据
plt.show()
3. BGD
def BGD(X,y,w0,step,e): #批量梯度下降法
n=0
while n<=10000:
w1 = w0-step*X.T.dot(X.dot(w0)-y)/X.shape[0]
dw = w1-w0;
if dw.dot(dw.T)[0,0] <= e**2:
return w1
n += 1
w0 = w1
return w1
4. 计算
w_m = BGD(X_m,y_m,np.mat([[5],[3],[2]]),1e-4,1e-20) #可自行调参
w_a = np.asarray(w_m.T)[0]
print(w_a)
array([1.99458492, 0.91587829, 1.48498921])
5. 评价( R 2)
y_mean = y_a.mean()
y_pre = np.array([w_a[0]*x[0,0]+w_a[1]*x[0,1]+w_a[2] for x in X_m])
SSR = ((y_pre-y_mean)**2).sum()
SST = ((y_a-y_mean)**2).sum()
R2 = SSR/SST
print(R2)
0.9845542903194531
我们可以认为拟合效果不错。如果 R 2 R^{2} R2的值接近0,可能需要重新调参。
6. 结果展示
X = np.linspace(-10,10,50)
y = np.array([w_a[0]*x**2+w_a[1]*x+w_a[2] for x in X])
plt.scatter(X_a,y_a)
plt.plot(X,y)
plt.show()
来源:https://blog.csdn.net/Twilightzsj/article/details/115326848


猜你喜欢
- 问题你想根据一组语法规则解析文本并执行命令,或者构造一个代表输入的抽象语法树。 如果语法非常简单,你可以不去使用一些框架,而是自己写这个解析
- 假设有两个dict x和y,合并成一个新的dict,不改变 x和y的值,例如x = {'a': 1, 'b'
- 等差数列末项计算题目内容:给出一个等差数列的前两项a1,a2,求第n项是多少可以使用以下语句实现非负整数n的输入:n=int(input()
- 一. 背景公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据。而且本次项目是数据统计展示为主要功能,
- 一、概述OpenCV在V4.5.3版本的contrib包中提供了一个barcode::BarcodeDetector类,用于条形码的识别。二
- 题目:给定两个自然数,求这两个数的最大公约数。分析:单看题目的话,非常简单,我们可以循环遍历自然数,如果能够整除两个自然数,就把这个数记下来
- 我就废话不多说了,大家还是直接看代码吧~代码如下type KDRespBody struct { Errcode int `j
- 如下所示:import pandas as pdfrom pandas import DataFrameseries = pd.read_c
- 背景测试的出现是为了避免项目中出现重大事故测试是避免事故的最后一道屏障测试单元测试的覆盖率在一定程度上而言,决定了代码的质量单元测试通过测试
- 彩色图像转换为灰度图像第一种方式通过 imread 读取图像的时候直接设置参数为 0 ,自动转换彩色图像为灰度图像第二种方式,可以通过 sp
- MySQL Workbench - 建模和设计工具1.模型是大多数有效和高性能数据库的核心。MySQL workbench具有允许开发人员和
- 1.首先安装 “Python” 插件2.安装 pylint 语法检查器推荐安装在当前的 Python
- 目录1. 最直观的相加2. 借助 itertools3. 使用 * 解包4. 使用 extend5. 使用列表推导式6. 使用 heapq7
- 利用Python将Market1501的分割图片和原图两张图片进行拼接成一左一右一张图片,并将图片的像素值调整成256*128.所有文件夹:
- 缩略图在很多时候我们都需要将图片按照同比例缩小有利于存储 但是一张张手动去改的话太麻烦了 今天我们就用python实现一个简单的将一个文件夹
- MAC上的PyCharm中默认的python解释器是python2的,windows下的没用过不是很清楚,所以特来记录下设置python3解
- //只能在firefox下运行 var test = { name: "puterjam", __noSuchMetho
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 首先水仙花数是什么?水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital inv
- 本文实例讲述了Python requests库用法。分享给大家供大家参考,具体如下:requests是Python中一个第三方库,基于 ur