线性回归中的梯度下降法代码

机器学习线性回归(linear regression)/梯度下降法(gradient descent)/最大似然函数/--附python代码 线性回归是一个比较简单的算法,这里主要借线性回归,讲一下梯度下降法和最大似然函数,后面逻辑回归也会用到。 阅读详情

1、基本理论

代价函数(线性回归的优化目标)

在这里插入图片描述

线性回归梯度下降步骤:

!所有参数集体更新后再开始下一轮迭代

2、代码展示

#X表示训练的属性集矩阵;
#Y表示监督训练中的标签值矩阵;
#theta表示参数矩阵,各参数均保存于此;
#alpha表示学习率;
#times表示梯度下降的执行次数,
#在代码中是通过设置times来达到让theta参数收敛的目的;
import numpy as np
def costfun(X,Y,theta): #定义代价值,表示此时曲线与各点的“代价”
    cost = np.sum(np.multiply((X*theta.T - Y),(X*theta.T - Y)))/(2*len(X))
    return cost
 #######################################
cost = np.zeros(1000) #保存每次更新的代价值
def gradient_descent(X,Y,theta,alpha,times):
temp = np.matrix(np.zeros(theta.shape[1])) #temp矩阵用于临时保存上一次theta矩阵
for i in range(times):
    D_value = (X*theta.T - Y).T #这里转置提前了,没啥特殊含义,本质都是为了算后面的term
    for j in range(theta.shape[1]):
        term = D_value*X[:,j]
        temp[0,j] = theta[0,j] - (alpha/len(X))*np.sum(term)
        #之所以使用np.sum()(其作用是计算矩阵中各元素的和),如果直接带入
        #term,numpy会将term视为矩阵,无法参数和theta[0,j]的相减运算,会报错
    theta = temp #更新theta矩阵
    cost[i] = costfun(X,Y,theta) 

3、 拓展

X矩阵的处理

在运行上述代码时,为了让X与theta矩阵对齐,需要在X矩阵的第一列添加一列1,具体可以去看吴老师的课程,另外西瓜书上也是类似的思想,方便矩阵操作和运算。

归一化

如果各个特征之间的值差距过大,比如属性X1的范围为[1000,2000],而属性X2的范围为[0.01,0.02],这样的情况不利于梯度下降的算法,为了加快梯度下降,一般对各个特征进行归一化,具体方法如下:

X = (X - X.mean())/X.std()

Andrew Wu 建议让属性的值保持在[-3,3]即可。

多项式回归

有时候线性的模型并不能保证能够拟合训练集,如下图:
在这里插入图片描述
处理方式十分简单:
在这里插入图片描述
例如上图,如果需要拟合三次多项式,可以进行以上操作,但这样的操作可能导致属性的值差距过大,可能会需要归一化的操作。

斯坦福大学机器学习笔记——单变量的线性回归以及损失函数和梯度下降法(包含代码) 回归问题: 所谓的回归问题就是给定的数据集,且每个数据集中的每个样例都有其正确的答案,通过给定的数据集进行拟合,找到一条能够最好代表该数据集的曲线,然后对于给定的一个样本,能够预测出该样本的答案(对于回归问题来说,最终的输出结果是一个连续的数值)。比如,房价预测问题,最终的输出房价是一个连续的数值。回归问题是监督学习的一种。 分类问题: 与回归问题一样,分类问题同属于监督学习, 阅读详情

相关推荐

斯坦福大学机器学习笔记——多变量的线性回归以及梯度下降法注意事项(内有代码)

在前面博客中介绍了单变量线性回归的实现过程,本文将介绍多变量线性回归算法。 两者的对比如下: 1.数据方面的差异: 单变量线性回归数据: 多变量线性回归数据: 对于单变量线性回归来说,只有一个特征(房子的大小),而对于多变量线性特征回归特征的数量为多个(房子的大小、卧室的数量等) 2.模型构成上的差异: 单变量模型: 多变量模型: 首先介绍多维特征用矩阵形式的表示:

wyl1813240346的博客 2870

代码实现线性回归中的梯度下降法

在线性回归模型中使用梯度下降法 定义数据集 import numpy as np import matplotlib.pyplot as plt np.random.seed(666) # 添加随机种子 x = 2 * np.random.random(size=100) # 自己定义数据集 y = x * 3. + 4. + np.random.normal(size=100) X = x.reshape(-1,1) # 将 x 转换为 100 行 1 列的形式 plt.scatter(

Thumb_的博客 575

使用广播星历进行 GPS 卫星位置的计算

目录1.计算卫星运动的平均角速度 n2.计算观测瞬间卫星的近地点角3.计算偏近点角4.计算真近点角 f5.计算升交角距 6.计算摄动改正项7.进行摄动改正 8.计算卫星在轨道面坐标系中的位置9.计算观测瞬间升交点的经度 L10.计算卫星在瞬时地球坐标系中的位置11.计算卫星在协议地球坐标系中的位置使用广播星历进行GPS卫星位置的计算的详细步骤如下:关于在广播星历中各参数的分布情况可以参考下图:首先根据广播星历中给出的参数 计算参考时刻(TOE) 的平均角速度 式中,GM为万有引力常数 G 与地球总质量

qq_43381998的博客 5564

线性回归 梯度下降算法大全与基于Python的底层代码实现

梯度下降是一种常用的优化算法,它通过不断迭代来最小化一个损失函数。根据不同的损失函数和迭代方式,梯度下降可以被分为批量梯度下降(Batch Gradient Descent,BGD)、随机梯度下降(Stochastic Gradient Descent,SGD)、小批量梯度下降(Mini-batch Gradient Descent)、共轭梯度法(Conjugate Gradient,CG)等。

Hello Word 1264

基于Unity引擎利用OpenCV和MediaPipe的面部表情和人体运动捕捉系统

增加了模型的绑定,利用Mediapipe这个强大的库可以实现识别面部表情的捕捉和人体结构运动的捕捉,基于以上的特性加入到Unity的人物模型中,实现实时的面部表情和人体运行的捕捉

BIgbossyii的博客 1万+

R语言实战:GEO单细胞数据下载与自动化整理全流程(附代码)

本文详细介绍了使用R语言从GEO数据库下载scRNA-seq数据并实现自动化整理的完整流程。通过GEOquery和Seurat等工具包,读者可以高效获取单细胞RNA测序数据,完成从原始数据下载到预处理的全过程,最终生成可直接用于分析的Seurat对象。文章包含完整代码示例,特别适合生物信息学研究者处理单细胞数据。

weixin_29061821的博客 425

机器学习 - 线性回归算法原理

线性回归算法原理的梳理过程 概念 1.有监督 2.线性 3.模型 函数 import numpy as np import matplotlib.pyplot as plt 数据预处理的过程 x = np.array([4, 3, 3, 4, 2, 2, 0, 1, 2, 5, 1, 2, 5, 1, 3]) y = np.array([8, 6, 6, 7, 4, 4, 2, 4, 5, 9, 3, 4, 8, 3, 6]) m = len(x)#获取样本的数量 #x增加一列1 x = np.c_

weixin_43673156的博客 931

【一键搞定】ThinkPHP6.0.2+PHPStudy+Composer极速安装指南——附完整下载包与避坑技巧

本文提供了一份ThinkPHP6.0.2的完整下载包,并详细介绍了如何配合PHPStudy和Composer进行极速安装与配置。指南涵盖了环境准备、Composer国内镜像加速、项目部署及常见避坑技巧,旨在帮助开发者,尤其是内网或网络不佳的用户,快速搭建可运行的TP6开发环境,绕过依赖下载的繁琐步骤。

assembly8low的博客 1005

线性回归-梯度下降法代码实现

#梯度下降枚举法举例 import numpy as np import matplotlib.pyplot as plt #求 y = x^2+2x+5 的最小值 #画函数图像 x = np.linspace(-6,4,100) y = x**2+2*x+5 plt.plot(x,y) #初始化x,a和迭代次数 x = 3 #在真正实现的时候,x一定是随机触发,用random函数来随机生成 #在这里为了方便统一,这里取x=3 alaph = 0.8 iteraterNum

weixin_52692793的博客 522

手把手教你用光耦搭建安全隔离电路:从洗衣机控制板到PLC输入模块实战

本文通过洗衣机控制板驱动高压电机和PLC输入模块采集现场信号两个实战场景,手把手教你使用光耦搭建安全隔离电路。文章详细解析了电路架构、关键器件选型、参数计算、仿真验证及PCB布局避坑技巧,并对比了光耦与数字隔离器的适用场景,帮助电子工程师掌握这门保障系统稳定与安全的必备技能。

h6j7k8l9p0的博客 462

Weka学习笔记01:初探Weka世界

下载、安装和启动Weka、Weka数据格式

howard2005的专栏 1468

随机梯度下降原理及在线性回归算法中的应用python代码实现

本文讲解了随机梯度下降的原理,并通过自编随机梯度下降代码并应用到线性回归求解中,让读者深入了解随机梯度的原理。最后与Sklearn自带的批量梯度下降和随机梯度下降进行对比,随机梯度下降尽可能的保证了计算精度的同时,能够有效的减少计算量。

weixin_71894495的博客 753

Loki 分布式日志中心服务

分布式日志中心 Loki + Promtail + Grafana

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2351

线性回归——梯度下降法(公式推导和自定义代码实现)

接上一篇文章 线性回归——最小二乘法(公式推导和非调包实现) 前言: 不知不觉已经做了几期的线性回归的算法博文了,写博文就是这样虽说自己经理解了,但是讲出来别人却不一定能够听懂,因为自己写博文肯定是跟着自己的习惯和思路走的,对于读者来说就并不那么好懂.如果你看过博主往期的算法讲解应该会发现博主在证明原理讲解时内容都普遍啰嗦,本来可以一笔带过的地方,可还是会花篇幅去讲解.可能是有强迫症吧,我觉得既然...

尼克不可的博客 1万+

软件测试面试题之易错题

(1)白盒测试:又称功能功能 测试、数据驱动测试和行为测试,是一种从用户观点出发的测试,被测程序为黑盒子, 通过测试来检测每个功能是否能够正常使用。(2)黑盒测试:又称结构测试和逻辑驱动 测试,是知道产品内部工作过程,通过测试来检测产品内部动作是否按照规格说明书 的规定去正常运行。(1)、测试需求分析;(2)动态白盒测试:需要对各个模块功能、模块间的接口、局部数据结构、主要执行路径、 错误处理等方面的测试。(2) 集成测试所测试的对象是模块间的接口,其目的是在找出在模块接口上面,包括整体体系结构上的问题;

m0_37449634的博客 678

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

梯度下降法在线性回归中的应用及python代码实现

通过线性回归方程推导出损失函数,并对损失函数求参数向量中每个元素的偏导,参数向量中每个元素的偏导组成的向量即为梯度,根据这个向量的方向进行迭代更新参数,最终找到损失函数的极值。获得线性回归函数的损失函数和损失函数的偏导后,就可以根据梯度下降法对参数向量求解,其主要思想是:通过求损失函数的梯度,根据梯度指引的方向不断更新参数向量,让损失函数不断减小,最终减小到无法再减小位置。是一个m行n+1列的矩阵,这个矩阵内的数据即为样本数据(其中第一列是全为1的列向量)向量中的每个元素进行求偏导,得到的这个新向量。

weixin_71894495的博客 821

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python梯度下降法实现线性回归_梯度下降法的python代码实现(多元线性回归)

梯度下降法的python代码实现(多元线性回归最小化损失函数)1、梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向进行搜索最小值)和随机梯度下降法(主要随机梯度下降,通过迭代运算,收敛到最小值)(1)批量梯度下降法(2)随机梯度下降法(学习率eta随着训练次数的增大而不断减小,采用了模拟退火的原理,不再是定值)2、...

weixin_39750731的博客 969

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

梯度下降法求线性回归公式,代码及动画

在线性回归中,我们通常使用最小二乘法来拟合数据。对于给定的数据集,我们的目标是找到一条直线,使得所有数据点到这条直线的距离之和最小。在梯度下降法中,我们通过不断调整参数和来最小化损失函数。损失函数:loss = 1/2.0*np.sum((w*x-y)*x)求导数(梯度):w_gra = np.mean((w*x-y)*x)更新导数(梯度):w = w-lr*w_gra。epoches = 10(迭代次数)lr = 15 (学习率)模型:f(x) = wx。w = 5 (初值)

2301_79465634的博客 287

线性回归之梯度下降法(附代码)

写本文的目的主要是面向刚刚接触机器学习的初学者,或者对梯度下降感兴趣但不理解的人。 假如现在有以下数据,time表示所花的时间,score表示相应的分数。 time score 9 39 15 56 25 93 14 61 10 50 18 75 现在我要你根据上面的数据预测假

但行好事,莫问前程 5299

第二章.线性回归以及非线性回归—一元线性回归

第二章.线性回归以及非线性回归—一元线性回归

weixin_45116749的博客 810

02_有监督学习--简单线性回归模型(梯度下降法代码实现)

有监督学习--简单线性回归模型(梯度下降法代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.定义模型的超参数4.定义核心梯度下降模型函数5.测试:运行梯度下降算法,计算最优的 w 和 b6.画出拟合曲线7.附录-测试数据 有监督学习--简单线性回归模型(梯度下降法代码实现) 0.引入依赖 importnumpyasnpimportmatplo...

aodawu2891的博客 201

基于梯度下降法的线性回归拟合以及绘制图形(Python代码)

Tips:采用梯度下降法实现线性回归,同时可批量绘制散点图和拟合曲线以及损失图。 样例数据: 拟合曲线图: 损失曲线: Python代码: #!/usr/bin/env python # -*- coding: utf-8 -*- """ Created on Fri Jan 22 15:05:16 2021 E-mail: 1321378489@qq.com @author: xiao_gf """ import math import numpy as np import pandas a

x2434417239的博客 1536

python梯度下降法实现线性回归_Python编程实现线性回归和批量梯度下降法代码实例...

通过学习斯坦福公开课的线性规划和梯度下降,参考他人代码自己做了测试,写了个类以后有时间再去扩展,代码注释以后再加,作业好多:import numpy as npimport matplotlib.pyplot as pltimport randomclass dataMinning:datasets = []labelsets = []addressD = '' #Data folderaddre...

weixin_39866963的博客 209

深度学习之梯度,梯度下降法以及使用梯度下降法实现线性回归代码实例(完整代码)

我们看百科给的解释:很抽象,这也是数学的东西。百科这里,如果你对梯度理解了的话,这里就不抽象了。梯度下降法计算过程就是:沿着梯度下降的方向求解极小值,我们知道梯度是有方向的(对于多元函数来说),它是一个由偏导数组成的向量,这就相当于我们沿着该方向的逆方向移动。(常用于损失函数上)举个例子,倘若一个多元函数,有个参数x,其在该位置的梯度也就是偏导数为grad_X,我们设置的步长为Ir=0.01,那么这个过程就是。

woweibiancheng的博客 1715

AI基础:线性回归及其最小二乘法和梯度下降法详细推导与代码示例

线性回归:Liner Regression 主要是回忆一下最小二乘和梯度下降 文章目录什么是线性回归线性回归能做什么线性回归一般表达式如何计算(学习)参数w,b求解损失函数最小化L时w和b值的方法:最小二乘法代码实现求解损失函数最小化L时w和b值的方法:梯度下降法代码实现多项式的回归代码实现过拟合、欠拟合、正则化 什么是线性回归 线性:两个变量之间的关系是一次函数关系的图象是直线,叫做线性。 非线性:两个变量之间的关系不是一次函数关系的图象不是直线,叫做非线性。 回归:人们在测量事物的时候因为客观条件.

maoyuanming0806的博客 1836
上一篇: 王道机试指南——日期处理
mAN_DOm
博客等级 码龄8年 13粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值