机器学习笔记——线性回归、梯度下降

线性回归

什么是线性回归就不说了,直接说线性回归的目标就是首先需要一个损失函数,使得损失函数最小化来训练得出的模型,最常用的损失函数是均方误差
例子
如果要预测房屋平均售价之前需要对数据标准化,用到StandarScalar这个类,可以计算平均值方差,输出标准化后的值

from sklearn.linear_model import LinearRegression# 初始化线性模型
linreg = LinearRegression()
# LinearRegression的方法中已经考虑了线性回归的常数项,所以无须再拼接1
linreg.fit(x_train, y_train)# coef_是训练得到的回归系数,intercept_是常数项
print('回归系数:', linreg.coef_, linreg.intercept_)
y_pred = linreg.predict(x_test)# 计算预测值和真实值之间的RMSE
rmse_loss = np.sqrt(np.square(y_test - y_pred).mean())
print('RMSE:', rmse_loss)

梯度下降 (GD)

梯度也就是寻找函数增加变化最快的方向,反方向就是减小最多的方向,如果损失函数按照梯度的反方向调整,很快就可以减小了。这个呢可能对于凸函数有用,但是非凸的时候,可能就不仅仅只有一个最小值(极小值),就可能出现局部最小的问题。
每次随机选择一个点来梯度下降寻找最小值也叫随机梯度下降(SGD),这样子也快也不复杂,但是可能不稳定,因为单个样本计算出来的可能与所有的不一致,再加上如果不是凸函数,可能下降梯度就发生偏移了,所以可以选择多个点来下降,可以使用小批量梯度下降(MBGD)也就是把样本随机分成批量来计算梯度,那么可以看出随机梯度下降是小批量的特例。MBGD的优点在于可以消除随机性,也比较稳定。

def batch_generator(x,y,batch_size,shuffle=True):batch_count=0if shuffle:idx=np.random.permutation(len(x))x=x[idx]y=y[idx]while True:start=batch_count*batch_sizeend=min(start+batch_size,len(x))if start>=end:breakbatch_count+=1yield x[start:end],y[start:end]
#%%def SGD(num_epoch,learning_rate,batch_size):#返回给定形状和数据类型的新数组X=np.concatenate([x_train,np.ones((len(x_train),1))],axis=-1)#axis=1表示对应行的数组进行拼接X_test=np.concatenate([x_test,np.ones((len(x_test),1))],axis=-1)theta=np.random.normal(size=X.shape[1]) #X大小那么大的 shape[1]是列数train_losses=[]test_losses=[]for i in range(num_epoch):batch_g=batch_generator(X,y_train,batch_size,shuffle=True)train_loss=0for x_batch,y_batch in batch_g:grad=x_batch.T@(x_batch@theta-y_batch)theta=theta-learning_rate*grad/len(x_batch)train_loss+=np.square(x_batch@theta-y_batch).sum()# 计算训练和测试误差train_loss = np.sqrt(train_loss / len(X))train_losses.append(train_loss)test_loss = np.sqrt(np.square(X_test @ theta - y_test).mean())test_losses.append(test_loss)# 输出结果,绘制训练曲线print('回归系数:', theta)return theta, train_losses, test_losses
#%%
# 设置迭代次数,学习率与批量大小
num_epoch = 20
learning_rate = 0.01
batch_size = 32
# 设置随机种子
# 设置随机种子
np.random.seed(0)
_, train_losses, test_losses = SGD(num_epoch, learning_rate, batch_size)
#%%
# 设置迭代次数,学习率与批量大小
num_epoch = 20
learning_rate = 0.01
batch_size = 32
# 设置随机种子
np.random.seed(0)_, train_losses, test_losses = SGD(num_epoch, learning_rate, batch_size)# 将损失函数关于运行次数的关系制图,可以看到损失函数先一直保持下降,之后趋于平稳
plt.plot(np.arange(num_epoch), train_losses, color='blue',label='train loss')
plt.plot(np.arange(num_epoch), test_losses, color='red',ls='--', label='test loss')
# 由于epoch是整数,这里把图中的横坐标也设置为整数
# 该步骤也可以省略
plt.gca().xaxis.set_major_locator(MaxNLocator(integer=True))
plt.xlabel('Epoch')
plt.ylabel('RMSE')
plt.legend()
plt.show()

其实还可以分析不同学习率下的结果,来调整合适的学习率,一般情况下学习率越大速度越快

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

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

相关文章

FastGPT私有化部署+OneAPI配置大模型

介绍 FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景! 官网地址 https://doc.fastai.site/docs/intro/ 部署 FastGPT提供…

frp转发服务

将内网服务转发到外网,我准备了一台阿里云ubuntu22.04服务器,两台内网ubuntu22.04服务器 下载frpc和frps以及配置文件 链接: https://pan.baidu.com/s/1auvcWWnyfpYPYatYhHFYag?pwdqkgh 提取码: qkgh 复制这段内容后打开百度网盘手机App,操作…

如何实现数据的正确拆分?

我们知道在传统的单块架构中,一个系统中只存在一个独立的服务和数据库实例。 上图中的系统架构实现起来比较简单,但是扩展性和伸缩性都比较差。因此,越来越多的系统开始采用了微服务架构。在微服务架构中,一个系统被拆分成多个服务…

6种经典的网页布局设计,你最喜欢哪个?

信息时代,我们每天都会浏览很多网页,但你有没有想过,让你停留在一个新网页的关键因素有哪些?毫无疑问,网页布局一定是关键因素之一。一个优秀的网页布局不仅可以让网站看起来更美观、更专业,还能够抓住用户…

R 语言入门学习笔记:软件安装踩坑记录——删除所有包以及彻底解决库包被安装到 C 盘用户目录下的问题,以及一些其他需要注意的点

文章目录 R 语言入门学习笔记:软件安装踩坑记录——删除所有包以及彻底解决库包被安装到 C 盘用户目录下的问题,以及一些其他需要注意的点软件版本及环境遇到的问题描述问题的分析和探究最终的解决方案折中方案根治方案 其他在安装过程中需要注意的问题 …

高效记录收支明细,预设类别账户,智能统计财务脉络,轻松掌握个人财务!

收支明细管理是每位个人或企业都必须面对的财务任务,财务管理已经成为我们生活中不可或缺的一部分。如何高效记录收支明细,预设类别账户,智能统计财务脉络,轻松掌握个人财务?晨曦记账本为您提供了完美的解决方案&#…

Java 面向对象编程(OOP)

面向对象编程(Object-Oriented Programming,OOP)是Java编程语言的核心思想之一。通过OOP,Java提供了一种结构化的编程方式,使代码更易于维护和扩展。 一、类和对象 1. 类的定义 类是对象的蓝图或模板,定…

File name ‘xxxx‘ differs from already included file name ‘xxxx‘ only in casing.

一、报错信息 VSCode报错如下: File name ‘d:/object/oral-data-management/src/components/VisitLogPopup/Info.vue’ differs from already included file name ‘d:/object/oral-data-management/src/components/VisitLogPopup/INfo.vue’ only in casing. The…

【PostgreSQL17新特性之-事务级别超时参数transaction_timeout】

PostgreSQL数据库里有多个和会话相关的参数,PostgreSQL17-beta1版本新增了一个transaction_timeout参数,来限制事务的持续时间。 当前的一些和会话相关的超时参数如下 -----------------------------------------------------------------------------…

备忘录模式具体的例子(含代码)

学习目标: 了解备忘录模式 学习内容: 备忘录模式在现实生活中的一个具体例子是文字处理软件(如Microsoft Word)中的“撤销”功能。这个功能允许用户在编辑文档时撤销之前的操作,并恢复到之前的状态。让我们更详细地看…

第一讲:单片机STC89C52+RA8889驱动控制彩屏(源码公开)

51单片机驱动控制彩屏系列讲座 第一讲:单片机STC89C52RA8889驱动控制彩屏(源码公开) 单片机通过SPI与RA8889进行通信,由于单片机是5V,RA8889是3.3V,故需要进行电平转换,有现成的模组TXS0108E等可以采用。…

linux开放某一个端口具体步骤

场景:当服务器防火墙不能直接关闭,但是客户端必须要访问服务器某一个端口时。 处理:对服务器端进行处理,只将该端口开放出来让客户端访问 本地使用vm安装了一个centos服务器,ip地址是 192.168.200.130。在这里充当服…

Kafka原生API使用Java代码-生产者-异步发送消息回调

文章目录 1、异步发送消息&回调1.1、pom.xml1.2、KafkaProducer1.java 1、异步发送消息&回调 回调就是接收kafka的响应 1.1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0&q…

Spring的依赖注入DI

直接使用构造器注入: 需要有对应匹配的构造器 不然出现异常No matching constructor Spring构造器注入有三种不同方式 name :按照参数名称 <bean id"stu" class"com.xja.bean.Student"> <constructor-arg name"name" value"rk&…

idea2021版以上开启Dashboard功能

idea2021版以上开启Dashboard功能 1 在.idea/workspace.xml 文件中找2 增加option 1 在.idea/workspace.xml 文件中找 2 增加option ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/22a809700e3643d18e80dc37e5afe014.png)

Android Studio无法改变Button背景颜色解决办法

大家好&#xff0c;我是咕噜铁蛋&#xff01;今天我来和大家探讨一个在Android开发中常见但可能让初学者感到困惑的问题——如何在Android Studio中改变Button的背景颜色。这个问题看似简单&#xff0c;但实际操作中可能会遇到一些意想不到的挑战。接下来&#xff0c;我将从多个…

Facebook:社交世界的接口

在当今数字时代&#xff0c;社交媒体已经成为了人们生活中不可或缺的一部分&#xff0c;而Facebook作为其中的巨头之一&#xff0c;扮演着至关重要的角色。本文将带您深入探索Facebook这张社交世界的画卷&#xff0c;全面了解这个令人着迷的平台。 起源与历程 Facebook的故事始…

AI虚拟试穿革命:I2VEdit技术引领电商视频内容创新

在当今快速迭代的电子商务领域,用户体验与内容创新是企业竞争力的核心要素。随着AI技术的飞速进步,AI虚拟试穿已不再局限于静态图像,而是迈向了动态视频的新纪元。本文将深入解析一项革新性技术——I2VEdit,如何以其独到之处,为电商尤其是服装零售行业带来一场内容创作与产…

2024-05-29 问AI: 在深度学习中,什么是数据集扩增,data augmentation?

文心一言 在深度学习中&#xff0c;数据集扩增&#xff08;Data Augmentation&#xff09;是一种用于增加模型训练数据量的技术&#xff0c;通过对原始数据集进行一系列随机变换来生成新的、人工合成的样本。这些变换通常是针对图像、音频或文本等数据类型设计的&#xff0c;旨…

未来已来:Flutter引领的安卓与跨平台开发奇幻之旅

引言 随着移动开发技术的飞速发展&#xff0c;跨平台开发框架如Flutter正逐渐改变着传统的安卓和iOS开发格局。作为一名资深的安卓开发工程师&#xff0c;我深刻感受到了Flutter带来的变革和机遇。今天&#xff0c;我想与大家分享Flutter在跨平台开发中的奇幻之旅&#xff0c;…