当前位置: 首页 > news >正文

【机器学习】正规方程与梯度下降API及案例预测

正规方程与梯度下降API及案例预测

文章目录

  • 正规方程与梯度下降API及案例预测
    • 1. 正规方程与梯度下降
      • 正规方程(Normal Equation)
      • 梯度下降(Gradient Descent)
    • 2. API
    • 3. 波士顿房价预测

1. 正规方程与梯度下降

回归模型是机器学习中用于预测连续数值(实数)的模型,通常用于解决回归问题。两种常见的回归模型求解方法是正规方程和梯度下降。

正规方程(Normal Equation)

正规方程是一种封闭解法,用于直接计算线性回归模型的权重(系数)。

原理
给定一个线性回归模型的数据集,我们的目标是找到最佳的权重(系数)w,使得模型的预测值尽可能接近实际值。正规方程的原理是通过最小化损失函数来找到最佳权重。对于线性回归问题,损失函数通常是均方误差(Mean Squared Error):
J ( w ) = 1 2 m ∑ i = 1 m ( h w ( x ( i ) ) − y ( i ) ) 2 J(w) = \frac{1}{2m} \sum_{i=1}^{m} (h_w(x^{(i)}) - y^{(i)})^2 J(w)=2m1i=1m(hw(x(i))y(i))2

其中,m 是训练样本数量,
h w ( x ( i ) ) h_w(x^{(i)}) hw(x(i))
是模型的预测值,
y ( i ) y^{(i)} y(i)
是实际值。

正规方程的目标是找到权重w,使损失函数J(w)最小化。通过求解损失函数的梯度等于零的方程,可以得到权重w的解析解:

∇ J ( w ) = 0 \nabla J(w) = 0 J(w)=0

这个方程的解即为最佳权重w,从而得到线性回归模型。

优点

  • 正规方程提供了封闭解,不需要手动选择学习率或迭代次数。
  • 适用于小型数据集,通常在特征数量较少时表现良好。

缺点

  • 对于大型数据集,计算复杂度高,需要计算特征矩阵的逆,时间复杂度较高。
  • 不适用于非线性模型。

梯度下降(Gradient Descent)

梯度下降是一种迭代优化算法,用于调整模型的参数,使损失函数最小化。

原理
梯度下降的核心思想是通过迭代来更新模型参数,使损失函数逐渐减小。对于线性回归,梯度下降的损失函数是均方误差(Mean Squared Error),目标是最小化这个损失函数。

梯度下降的迭代过程如下:

  1. 初始化权重w。
  2. 计算损失函数J(w)关于权重 w w w的梯度
    ∇ J ( w ) \nabla J(w) J(w)
  3. 更新权重w,通常按照以下规则更新:
    w = w − α ∇ J ( w ) w = w - \alpha \nabla J(w) w=wαJ(w)
    ,其中α是学习率,控制每次更新的步长。
  4. 重复步骤2和3,直到满足停止条件(例如,达到最大迭代次数或损失函数收敛)。

梯度下降的关键是学习率α的选择,过大的学习率可能导致算法不收敛,过小的学习率可能导致收敛速度慢。

优点

  • 适用于大型数据集和高维特征,计算复杂度较低。
  • 可以用于各种不同类型的模型和损失函数,包括非线性模型。

缺点

  • 需要手动选择学习率和迭代次数,选择不当可能导致收敛问题或性能下降。
  • 对特征缩放和初始化敏感。

2. API

sklearn.linear_model.LinearRegression(fit_intercept=True)

  • 通过正规方程优化
  • fit_intercept:是否计算偏置
  • LinearRegression.coef_:回归系数
  • LinearRegression.intercept_:偏执

sklearn.linear_model.SGDRegressor(loss=“squared_loss”,fit_intercept=True,learning_rate=“invscaling”,eta0=0.01)

  • SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型
  • loss:损失类型
    • loss=“squared_loss”:普通最小二乘法
  • fit_intercept:是否计算偏置
  • learning_rate:string,optional
    • 学习率填充
    • “constant”:eta=eta0
    • “optimal”:eta=1.0/(alpha*(t+t0))[default]
    • “invscaling”:eta=eta0/pow(t,power_t),power_t存在父类之中
    • 对于一个常数值的学习率来说,可以使用learning_rate=“constant”,并使用eta0来指定学习率
  • SGDRegressor.coef_:回归系数
  • SGDRegressor.intercept_:偏置

3. 波士顿房价预测

  • 实例数量:506,属性数量:13数值型或类别墅,帮助预测的属性
  • 属性信息:
    • CRIM城镇人均犯罪率
    • ZN占地面积超过2.5万平方英尺的住宅用地比例
    • INDUS城镇非零售业务地区的比例
    • CHAS查尔斯河虚拟变量(=1,如果土地在河边;否则是0)
    • NOX一氧化氮浓度(每1000万份)
    • RM平均每居民房数
    • AGE在1940年之前建成的所有者占用单位的比例
    • DIS与五个波士顿就业中心的加权距离
    • RAD辐射状公路的可达性指数
    • TAX每10000美元的全额物业税率
    • PTRATIO城镇师生比例
    • B 1000(Bk-0.63)^2其中Bk是城镇中的黑人比例
    • LSTAT人口中地位较低人群的百分数
    • MEDV以1000美元计算的自由住房的中位数
  • 缺失属性值:无

流程:

  • 获取数据集
  • 划分数据集
  • 特征工程:无量纲化处理–标准化
  • 预估器流程,fit()–>模型:coef_,intercept_
  • 模型评估
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegressiondef linear_demo():"""正规方程的方法对波士顿房价进行预测:return:"""# 1. 获取数据boston = load_boston()# 2. 划分数据集x_train, x_test, y_train,y_test = train_test_split(boston.data, boston.target, random_state= 22)# 3. 标准化transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4. 预估器estimator = LinearRegression()estimator.fit(x_train, y_train)# 5. 得出模型print("权重系数为:\n", estimator.coef_)print("偏置为:\n", estimator.intercept_)# 6. 模型评估y_predict = estimator.predict(x_test)print("y_predict:\n", y_predict)print("直接对比真实值和预测值:\n", y_test == y_predict)score = estimator.score(x_test, y_test)print("准确率为:\n", score)
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import SGDRegressordef linear_demo():"""梯度下降的方法对波士顿房价进行预测:return:"""# 1. 获取数据boston = load_boston()# 2. 划分数据集x_train, x_test, y_train,y_test = train_test_split(boston.data, boston.target, random_state= 22)# 3. 标准化transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4. 预估器estimator = SGDRegressor()estimator.fit(x_train, y_train)# 5. 得出模型print("权重系数为:\n", estimator.coef_)print("偏置为:\n", estimator.intercept_)# 6. 模型评估y_predict = estimator.predict(x_test)print("y_predict:\n", y_predict)print("直接对比真实值和预测值:\n", y_test == y_predict)score = estimator.score(x_test, y_test)print("准确率为:\n", score)

相关文章:

【机器学习】正规方程与梯度下降API及案例预测

正规方程与梯度下降API及案例预测 文章目录 正规方程与梯度下降API及案例预测1. 正规方程与梯度下降正规方程(Normal Equation)梯度下降(Gradient Descent) 2. API3. 波士顿房价预测 1. 正规方程与梯度下降 回归模型是机器学习中…...

【SOC基础】单片机学习案例汇总 Part2:蜂鸣器、数码管显示

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

顶层模块【FPGA】

1顶层模块: 不能像C语言的h文件那样,把io的定义放在其他文件。 在Verilog中,顶层模块是整个设计的最高层次,它包含了所有其他模块和子模块。 顶层模块定义了整个设计的输入和输出端口,以及各个子模块之间的连接方式。…...

IT行业就业分析

1. IT技术发展背景及历程介绍 2. IT行业的就业方向有哪些? IT技术发展背景及历程介绍: IT技术的发展背景和历程可以追溯到上世纪40年代,以下是IT技术的主要发展阶段: 1.计算机的发展:二战期间,计算机作…...

读取用户剪贴板内容

读取用户剪贴板内容 在Web开发中&#xff0c;要读取用户剪贴板的内容&#xff0c;可以使用Clipboard API。这个API提供了一组方法和事件&#xff0c;用于访问和操作用户的剪贴板数据。 HTML <body><button onclick"readClipboard()">读取剪切板内容&l…...

“深入理解Nginx的负载均衡与动静分离“

目录 引言一、Nginx简介1. Nginx的基本概念2. Nginx的特点3. Nginx的安装配置 二、Nginx搭载负载均衡三、前端项目打包四、Nginx部署前后端分离项目&#xff0c;同时实现负载均衡和动静分离总结 引言 在现代互联网应用中&#xff0c;高性能和可扩展性是至关重要的。Nginx作为一…...

JVM 内存和 GC 算法

文章目录 内存布局直接内存执行引擎解释器JIT 即时编译器JIT 分类AOT 静态提前编译器&#xff08;Ahead Of Time Compiler&#xff09; GC什么是垃圾为什么要GC垃圾回收行为Java GC 主要关注的区域对象的 finalization 机制GC 相关算法引用计数算法&#xff08;Reference Count…...

memtest86 prosite v10.6

passmark官方的memtest86 v10开始支持颗粒级别的坏内存芯片定位了&#xff0c;对于特定的若干种CPU和芯片组的组合&#xff0c;支持这项功能。 当然支持颗粒定位的site版本售价4800美金&#xff0c;是比较贵的。所以网络上出现了破解版的&#xff0c;人才真是。但是鼓励大家支…...

Springboot JSP项目如何以war、jar方式运行

文章目录 一&#xff0c;序二&#xff0c;样例代码1&#xff0c;代码结构2&#xff0c;完整代码备份 三&#xff0c;准备工作1. pom.xml 引入组件2. application.yml 指定jsp配置 四&#xff0c;war方式运行1. 修改pom.xml文件2. mvn执行打包 五&#xff0c;jar方式运行1. 修改…...

系统架构设计师(第二版)学习笔记----层次式架构设计理论与实践

【原文链接】系统架构设计师&#xff08;第二版&#xff09;学习笔记----层次式架构设计理论与实践 文章目录 一、层次式体系结构概述1.1 软件体系结构的作用1.2 常用的层次式架构图1.3 层次式体系可能存在的问题点 二、表现层框架设计2.1 MVC模式2.1.1 MVC三层模式2.1.2 MVC设…...

Python之字符串详解

目录 一、字符串1、转义字符与原始字符串2、使用%运算符进行格式化 一、字符串 在Python中&#xff0c;字符串属于不可变、有序序列&#xff0c;使用单引号、双引号、三单引号或三双引号作为定界符&#xff0c;并且不同的定界符之间可以互相嵌套。 ‘abc’、‘123’、‘中国’…...

《视觉SLAM十四讲》-- 概述与预备知识

文章目录 01 概述与预备知识1.1 SLAM 是什么1.1.1 基本概念1.1.2 视觉 SLAM 框架1.1.3 SLAM 问题的数学表述 1.2 实践&#xff1a;编程基基础1.3 课后习题 01 概述与预备知识 1.1 SLAM 是什么 1.1.1 基本概念 &#xff08;1&#xff09;SLAM 是 Simultaneous Localization a…...

Java8 Stream API全面解析——高效流式编程的秘诀

文章目录 什么是 Stream Api?快速入门流的操作创建流中间操作filter 过滤map 数据转换flatMap 合并流distinct 去重sorted 排序limit 限流skip 跳过peek 操作 终结操作forEach 遍历forEachOrdered 有序遍历count 统计数量min 最小值max 最大值reduce 聚合collect 收集anyMatch…...

分享一下微信小程序里怎么开店

如何在微信小程序中成功开店&#xff1a;从选品到运营的全方位指南 一、引言 随着微信小程序的日益普及&#xff0c;越来越多的人开始尝试在微信小程序中开设自己的店铺。微信小程序具有便捷、易用、即用即走等特点&#xff0c;使得开店门槛大大降低。本文将详细介绍如何在微…...

uniapp小程序刮刮乐抽奖

使用canvas画布画出刮刮乐要被刮的图片&#xff0c;使用移动清除画布。 当前代码封装为刮刮乐的组件&#xff1b; vue代码&#xff1a; <template><view class"page" v-if"merchantInfo.cdn_static"><image class"bg" :src&q…...

Qt 窗口无法移出屏幕

1 使用场景 设计一个缩进/展开widget的效果&#xff0c;抽屉效果。 看到实现的方法有定时器里move窗口&#xff0c;或是使用QPropertyAnimation。 setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint |Qt::X11BypassWindowManagerHint&#xff09;&#xff1b; 记得在移…...

java毕业设计基于springboot+vue线上教学辅助系统

项目介绍 本论文主要论述了如何使用JAVA语言开发一个线上教学辅助系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述线上教学辅助系统的当前背景以及系统开…...

开源 Wiki 软件 wiki.js

wiki.js简介 最强大、 可扩展的开源Wiki 软件。使用 Wiki.js 美观直观的界面让编写文档成为一种乐趣&#xff01;根据 AGPL-v3 许可证发布。 官方网站&#xff1a;https://js.wiki/ 项目地址&#xff1a;https://github.com/requarks/wiki 主要特性&#xff1a; 随处安装&a…...

STM32基本定时器中断

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、STM32定时器的结构&#xff1f;1. 51定时器的结构1.1如何实现定时1s的功能&#xff1f; 2. stm32定时器的结构2.1 通用定时器 二、使用步骤1.开启时钟2.初始…...

学习历程_基础_精通部分_达到手搓的程度

1. 计算机网络(更新版) 1.1 计算机网络-43题 1.2 2. 操作系统(更新版) 3. ACM算法(更新版) 4. 数据库&#xff08;更新版&#xff09; 5. 业务开发算法&#xff08;更新版&#xff09; 6. 分布式类&#xff08;更新版&#xff09; 7. 设计模式&#xff08;更新版&#xff…...

Redis中的List类型

目录 List类型的命令 lpush lpushx rpush lrange lpop rpop lindex linsert llen lrem ltrim lset 阻塞命令 阻塞命令的使用场景 1.针对一个非空的列表进行操作 2.针对一个空的列表进行操作 3.针对多个key进行操作. 内部编码 lisi类型的应用场景 存储(班级…...

3D模型格式转换工具HOOPS Exchange:如何将3D PDF转换为STEP格式?

3D CAD数据在制造、工程和设计等各个领域都扮演着重要的角色。为了促进不同软件应用程序之间的协作和互操作性&#xff0c;它通常以不同的格式进行交换。 HOOPS Exchange是一个强大的软件开发工具包&#xff0c;提供了处理和将3D CAD数据从一种格式转换为另一种格式的解决方案…...

DB-GPT介绍

DB-GPT介绍 引言DB-GPT项目简介DB-GPT架构关键特性私域问答&数据处理多数据源&可视化自动化微调Multi-Agents&Plugins多模型支持与管理隐私安全支持数据源 子模块DB-GPT-Hub微调参考文献 引言 随着数据量的不断增长和数据分析的需求日益增多&#xff0c;将自然语言…...

Java,面向对象,内部类

内部类的定义&#xff1a; 将一个类A定义在另一个类B里面&#xff0c;里面的那个类A就称为内部类&#xff08;InnerClass&#xff09;&#xff0c;类B则称为外部类&#xff08;OuterClass&#xff09;。 内部类的使用场景: 类A只在类B中使用&#xff0c;便可以使用内部类的方法…...

唯一ID如何生成,介绍一下目前技术领域最常使用的几种方法

纵使十面大山&#xff0c;又如何&#xff0c;无妨… 概述 唯一ID&#xff08;Unique Identifier&#xff09;是在计算机科学和信息技术领域中用于标识某个实体或数据的唯一标识符。生成唯一ID的方法可以根据具体需求和应用场景的不同而有所不同。以下是一些目前技术领域中常用…...

【翻译】XL-Sum: Large-Scale Multilingual Abstractive Summarization for 44 Languages

摘要 当代的关于抽象文本摘要的研究主要集中在高资源语言&#xff0c;比如英语&#xff0c;这主要是因为低/中资源语言的数据集有限。在这项工作中&#xff0c;我们提出了XL-Sum&#xff0c;这是一个包含100万篇专业注释的文章摘要对的综合多样数据集&#xff0c;从BBC中提取&…...

配置OpenCV

Open CV中包含很多图像处理的算法&#xff0c;因此学会正确使用Open CV也是人脸识别研究的一项重要工作。在 VS2017中应用Open CV&#xff0c;需要进行手动配置&#xff0c;下面给出在VS2017中配置Open CV的详细步骤。 1.下载并安装OpenCV3.4.1与VS2017的软件。 2.配置Open CV环…...

1-时间复杂度和空间复杂度

为了找到最适合当前问题而估量“算法”的评价s 时间复杂度空间复杂度执行效率&#xff1a;根据算法编写出的程序&#xff0c;执行时间越短&#xff0c;效率就越高占用的内存空间&#xff1a;不同算法编写出的程序&#xff0c;执行时占用的内存空间也不相同。如果实际场景中仅能…...

EtherCAT主站SOEM -- 3 -- SOEM之ethercatconfig.h/c文件解析

EtherCAT主站SOEM -- 3 -- SOEM之ethercatconfig.h/c文件解析 一 ethercatconfig.h/c文件功能预览&#xff1a;二 ethercatconfig.h/c 中主要函数的作用&#xff1a;2.1.1 ec_config_init(uint8 usetable) 和 ecx_config_init(ecx_contextt *context, uint8 usetable)&#xff…...

洗地机哪个品牌好?家用洗地机选购攻略

随着家用洗地机的普及和市场的广泛认可&#xff0c;进入洗地机行业的制造商也越来越多。在面对众多洗地机品牌时&#xff0c;消费者常常感到困惑&#xff0c;不知道如何选择。面对众多选择&#xff0c;选择有良好保障的知名洗地机品牌是明智之举。知名品牌在质量、售后服务等方…...