机器学习与深度学习——利用随机梯度下降算法SGD对波士顿房价数据进行线性回归

机器学习与深度学习——利用随机梯度下降算法SGD对波士顿房价数据进行线性回归

我们这次使用随机梯度下降(SGD)算法对波士顿房价数据进行线性回归的训练,给出每次迭代的权重、损失和梯度,并且绘制损失loss随着epoch变化的曲线图。

步骤

1、导入必要的库和模块:numpy,pandas,matplotlib,load_boston和StandardScaler。其中,load_boston用于加载波士顿房价数据集,StandardScaler用于对数据进行标准化处理。
2、加载数据集并对数据进行标准化处理。同时,为数据添加一列1作为截距项,并将y转换为列向量。
3、定义SGD函数来进行训练。在每个epoch中,我们会随机地从样本中抽取一个batch的数据来计算梯度和损失,并更新权重。
4、使用SGD训练模型,并输出每次迭代的结果:权重w,损失loss和梯度grad。同时,将每个epoch的平均损失存储到列表losses中,并返回最终的权重和损失。
5、绘制随机梯度下降训练过程中,损失函数值随着epoch变化的曲线图

程序代码

1.使用随机梯度下降(SGD)算法对波士顿房价数据进行线性回归的训练,给出每次迭代的权重、损失和梯度,并且绘制了损失loss随着epoch变化的曲线图。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
#加载数据集并对数据进行标准化处理。同时,为数据添加一列1作为截距项,并将y转换为列向量。
# 加载数据
boston = load_boston()
X, y = boston.data, boston.target# 标准化数据
scaler = StandardScaler()
X = scaler.fit_transform(X)# 在数据中添加一列1
X = np.hstack((np.ones((X.shape[0], 1)), X))# 将y转换为列向量
y = y.reshape(-1, 1)
# 3、定义SGD函数来进行训练。在每个epoch中,我们会随机地从样本中抽取一个batch的数据来计算梯度和损失,并更新权重。
def sgd(X, y, lr=0.01, epochs=100, batch_size=32):n_samples, n_features = X.shapew = np.zeros((n_features, 1))losses = []for epoch in range(epochs):epoch_loss = 0# 随机排列样本permutation = np.random.permutation(n_samples)for i in range(0, n_samples, batch_size):# 获取一个batch的样本indices = permutation[i:i+batch_size]X_batch = X[indices]y_batch = y[indices]# 计算梯度和损失grad = X_batch.T.dot(X_batch.dot(w) - y_batch) / batch_sizeloss = np.mean((X_batch.dot(w) - y_batch) ** 2)epoch_loss += loss# 更新权重w -= lr * gradlosses.append(epoch_loss / (n_samples // batch_size))return w, losses
# 使用SGD训练模型,并输出每次迭代的结果:权重w,损失loss和梯度grad。同时,将每个epoch的平均损失存储到列表losses中,并返回最终的权重和损失。
w, losses = sgd(X, y, lr=0.01, epochs=100, batch_size=32)def sgd(X, y, lr=0.01, epochs=100, batch_size=32):n_samples, n_features = X.shapew = np.zeros((n_features, 1))losses = []for epoch in range(epochs):epoch_loss = 0# 随机排列样本permutation = np.random.permutation(n_samples)for i in range(0, n_samples, batch_size):# 获取一个batch的样本indices = permutation[i:i+batch_size]X_batch = X[indices]y_batch = y[indices]# 计算梯度和损失grad = X_batch.T.dot(X_batch.dot(w) - y_batch) / batch_sizeloss = np.mean((X_batch.dot(w) - y_batch) ** 2)epoch_loss += loss# 更新权重w -= lr * grad# 输出w值和grad值和loss值print('w:', w.flatten())print('grad:', grad.flatten())print('loss:', loss)losses.append(epoch_loss / (n_samples // batch_size))return w, lossesw, losses = sgd(X, y, lr=0.01, epochs=100, batch_size=32)#绘制随机梯度下降训练过程中,损失函数值随着epoch变化的曲线图
plt.plot(losses)
plt.xlabel('Epoch')
plt.ylabel('Cost')
plt.show()

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
随机梯度下降(SGD)是一种简单但非常有效的方法,多用用于支持向量机、逻辑回归(LR)等凸损失函数下的线性分类器的学习。并且SGD已成功应用于文本分类和自然语言处理中经常遇到的大规模和稀疏机器学习问题。SGD既可以用于分类计算,也可以用于回归计算。

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

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

相关文章

20230712-----阻塞IO驱动按键控制LED灯的亮灭

驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/device.h> #include <linux/cdev.h> #include <linux/slab.h> #include <linux/uaccess.h> #include <linux/of.h> #in…

Tomcat之配置文件详解

Tomcat 目录 安装好 Tomcat 后&#xff0c;打开它的文件夹&#xff0c;可以看到以下目录 bin:存放各种启动、关闭和其它程序的脚本 conf:配置文件及相关数据文件存放的目录 lib:Tomcat 使用的库文件存放的目录&#xff0c;如存放 Servlet 规范的 API logs:默认日志文件存放…

消息中间件选型RabbitMQ基础入门

1. 消息中间件(MQ) 1.1 概述 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构 目前使用较多的消息队列有ActiveMQ&#xff…

【PDFBox】PDFBox操作PDF文档之创建PDF文档、加载PDF文档、添加空白页面、删除页面、获取总页数、添加文本内容、PDFBox坐标系

这篇文章&#xff0c;主要介绍PDFBox操作PDF文档之创建PDF文档、加载PDF文档、添加空白页面、删除页面、获取总页数、添加文本内容、PDFBox坐标系。 目录 一、PDFBox组件 1.1、什么是PDFBox 1.2、创建PDF文档 1.3、加载PDF文档 1.4、添加空白页面 1.5、删除某个页面 1.6…

树莓派使用Nginx 搭建轻量级网站远程访问

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 转载自cpolar极点云文章&#xff1a;树莓派使用Nginx 搭建轻量级网站远程访问 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#…

【力扣算法07】之 2.两数相加 python

文章目录 问题描述示例1示例2示例 3提示 思路分析代码分析完整代码详细分析 完结 问题描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同…

机器学习 day25(softmax在神经网络模型上的应用,提高数据精度的方法)

输出层采用softmax 在识别手写数字的模型中&#xff0c;预测y只有两个结果&#xff0c;所以输出层采用sigmoid激活函数且只有一个神经元。若预测y有10个结果&#xff08;0-9&#xff09;&#xff0c;该模型的前向传播计算方式与识别数字的模型完全相同&#xff0c;即隐藏层的…

第4集丨JavaScript 使用原型(prototype)实现继承——最佳实战2

目录 一、临时构造器方式1.1 代码实现1.2 代码分析 二. 增加uber属性&#xff0c;用于子对象访问父对象2.1 实现分析2.2 代码实现 三. 将继承封装成extend()函数3.1 代码实现3.1.1 临时构造器实现extend()3.1.2 原型复制实现extend2() 3.2 代码测试3.2.1 测试extend()函数3.2.1…

【实战项目】c++实现基于reactor的高并发服务器

基于Reactor的高并发服务器&#xff0c;分为反应堆模型&#xff0c;多线程&#xff0c;I/O模型&#xff0c;服务器&#xff0c;Http请求和响应五部分 全局 反应堆模型 Channel 描述了文件描述符以及读写事件&#xff0c;以及对应的读写销毁回调函数&#xff0c;对应存储arg读…

优化SQL查询实现高效数据检索(二)

大家好&#xff0c;本文将接着上文&#xff0c;继续介绍SQL查询优化的重要性以及如何优化SQL查询以实现更快的数据检索。 适当使用通配符 适当使用通配符对于优化SQL查询尤为重要&#xff0c;特别是在匹配字符串和模式方面。通配符是用于SQL查询中查找特定模式的特殊字符&…

K8s(kubernetes)集群搭建及dashboard安装、基础应用部署

基础介绍 概念 本质是一组服务器集群&#xff0c;在集群每个节点上运行特定的程序&#xff0c;来对节点中的容器进行管理。实现资源管理的自动化。 功能 自我修复弹性伸缩服务发现负载均衡版本回退存储编排 组件 控制节点(master)-控制平面 APIserver&#xff1a;资源操作…

Linux ❀ Openssh 8.9p1源码升级教程

文章目录 升级操作注意事项&#xff1a;1. 安装依赖2. 执行升级2.1 上传压缩包并保存配置2.2 开始升级 升级操作注意事项&#xff1a; 编译过程需要依赖&#xff0c;必须安装完成!!!SSH服务升级过程可能会导致无法远程连接服务器!!!若必须远程登录必须确认telnet服务可用!!!升…