机器学习中的线性回归

news2025/2/28 11:31:50

线性回归

概念

利用 回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。

分类     

一元线性回归:y = wx +b 目标值只与一个因变量有关系

多元线性回归: y= w_1x_1+ w_2x_2 + w_3x_3 + …  + b 目标值只与多个因变量有关系

线性回归的API

# 创建线性回归对象
estimator = LinearRegression()
# 使用数据训练线性回归模型
estimator.fit(x,y)
# 利用训练好的模型 做预测
estimator.predict([[176]]) # 利用训练好的线性方程, 把特征值带进去, 计算目标值

训练好的线性回归模型对象有两个重要的属性

estimator.intercept_  # 截距  x = 0 y 的取值
estimator.coef_ # 回归系数 (线性方程的斜率)

线性回归求解的基本思路

线性回归 最终的目的是为了得到一个线性方程, 要来表示特征和目标之间的关系, 这一类模型目的是为了得到一个数学公式, 这种问题的解决有固定的套路

        确定假设函数 如果线性回归 y = KX +b 认为特征和目标之间满足线性关系

        确定损失函数 如果是回归问题一般使用均方误差

      对损失函数求解, 找到损失函数的极小值, 所对应的系数, 数学关系就确定下来, 模型也就搞定了

      对于线性回归来说, 就是要找到是损失最小的那一组 K 和 b        

      求解损失函数的极小值 就是优化方法

损失函数最小化方式

正规方程

线性回归最小而成损失函数            

J(w) =  ‖Xw−y‖_2^2 取值最小     

其解为: w = (X^TX)^−1 X^Ty

梯度下降

顾名思义:沿着梯度下降的方向求解极小值

举个例子:坡度最陡下山法,梯度下降过程就和下山场景类似 可微分的损失函数,代表着一座山 寻找的函数的最小值,也就是山底

公式: 循环迭代求当前点的梯度,更新当前的权重参数\

α: 学习率(步长)  不能太大, 也不能太小. 机器学习中:0.001 ~ 0.01

梯度是上升最快的方向, 我们需要是下降最快的方向, 所以需要加负号

梯度下降几种算法

全梯度下降

  • 使用全部样本进行计算, 当样本量较大的时候, 计算的速度可能比较慢

  • 想优化计算的速度, 可以考虑使用下面几种梯度下降算法

随机梯度下降

        每一轮随机挑选一个样本

小批量梯度下降

        每一轮随机挑选一小批样本

随机平均梯度下降

        每一轮随机挑选一个样本 , 会把这个样本记录下来

        下一轮再挑选一个样本, 计算两个样本梯度的平均值

线性回归模型评估

均方误差 Mean Squared Error MSE

平均绝对误差 Mean Absolute Error MAE

均方根误差 Root Mean Squared Error (RMSE)

指标使用

        MSE 均方误差, 是模型误差的平方, 不能反应真是的误差情况

        MAE / RMSE 基本可以反应真实的平均误差

        MAE / RMSE

                 一般情况下 对同一个模型, 同一份测试数据计算上面两个指标, RMSE > MAE

                RMSE 会对预测误差较大的点比较敏感

                可以综合两个指标来看最终模型的结果

波斯顿房价预测案例

加载数据

import pandas as pd
boston = pd.read_csv('/root/code/波士顿房价xy.csv')
y = boston['target']
x = boston.drop('target',axis=1) # 从数据中去掉 target这一列, 剩下的都是特征值 axis = 1 删除的数据指定的是列名

正规方程

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression # 正规方程
from sklearn.metrics import mean_squared_error # 均方误差
from sklearn.metrics import mean_absolute_error # 绝对平均误差
# 训练集测试集划分  test_size 默认值 0.25
X_train, X_test, y_train, y_test = train_test_split(x,y,random_state=22)
# 特征工程 标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 模型训练  正规方程
estimator = LinearRegression()
estimator.fit(X_train_scaled,y_train)
y_train_pred = estimator.predict(X_train_scaled)
y_test_pred = estimator.predict(X_test_scaled)
# 模型评估
print('训练集,mse',mean_squared_error(y_train_pred, y_train))
print('测试集,mse',mean_squared_error(y_test_pred, y_test))

print('训练集,mae',mean_absolute_error(y_train_pred, y_train))
print('测试集,mae',mean_absolute_error(y_test_pred, y_test))

梯度下降

from sklearn.linear_model import SGDRegressor #随机梯度下降
# 训练集测试集划分
X_train, X_test, y_train, y_test = train_test_split(x,y,random_state=22)
# 特征工程 标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 模型训练  随机梯度下降
estimator = SGDRegressor()
estimator.fit(X_train_scaled,y_train)
y_train_pred = estimator.predict(X_train_scaled)
y_test_pred = estimator.predict(X_test_scaled)
# 模型评估
print('训练集,mse',mean_squared_error(y_train_pred, y_train))
print('测试集,mse',mean_squared_error(y_test_pred, y_test))

print('训练集,mae',mean_absolute_error(y_train_pred, y_train))
print('测试集,mae',mean_absolute_error(y_test_pred, y_test))

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

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

相关文章

Linux Ubuntu搭建我的世界Minecraft服务器实现好友远程联机MC游戏

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 前言 Li…

SpringSecurity6 | 登录失败后的跳转

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringSecurity6 ✨特色专栏: MySQL学习 🥭本文内容: SpringSecurity6 | 失败后的跳转 📚个人知识库: Leo知识库,欢迎大家…

Qt/QML编程学习之心得:使用camera摄像头(35)

汽车应用中,camera起到了越来越多的作用,数字化的作用,这点无可争议,而作为GUI设计工具,如何让Camera类的应用能更好的发挥作用呢? You can use Camera to capture images and movies from a camera, and manipulate the capture and processing settings that get appl…

C#MQTT编程03--连接报文

1、报文回顾 MQTT协议中一共有14个报文,如下图 从上图看,我们要特别要注意以下3个点: (1)值,14个报文的排列,不是随意的,每个报文都有自己的值,而值在报文中是要用到的。后面例子会介绍到。 …

【含完整代码】Java定时任务之xxl-job[超详细]

前言 个人博客:www.wdcdbd.com 在Java中使用定时任务是一件很常见的事情,比如使用定时任务在什么时间,什么时候,去发布一些信息,或者去查询一些日志等相关的代码。这时,我们就要开发定时任务这中功能来实现…

理解TCP/IP协议

一、协议 在计算机网络与信息通讯领域里,人们经常提及 “协议” 一词。互联网中常用的协议有HTTP、TCP、IP等。 协议的必要性 简单来说,协议就是计算机与计算机之间通过网络通信时,事先达成的一种 “约定”。这种“约定”使不同厂商的设备…

精通业务:资深程序员的核心优势

在IT行业,我们常常听到关于技术实力、项目经验、团队协作等方面的讨论,但有一个重要因素常常被忽视,那就是对业务的了解。 对于资深程序员来说,懂业务和不懂业务之间的区别,犹如一道深邃的鸿沟,决定着他们…

【MySQL】:探秘主流关系型数据库管理系统及SQL语言

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. MySQL概述1.1 数据库相关概念1.2 主流数据库1.3 数据模型1.3.1 关系型数据库…

QT DAY5作业

1.QT基于TCP服务器端 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QMessageBox> //消息对话框类 #include <QTcpSocket> //客户端类 #include <QList> //链表容器类namespace …

unity C#什么时候用“可空类型”

文章目录 例子1. **声明一个可空类型变量&#xff1a;**2. **给可空类型变量赋值&#xff1a;**3. **检查可空类型变量是否有值&#xff1a;**4. **转换与比较&#xff1a;**5. **使用null合并运算符&#xff1a;** 可空类型的重要意义1. **表示缺失或未知的值&#xff1a;**2.…

基于51单片机的智能热水器设计

需要全部文件请私信关注我&#xff01;&#xff01;&#xff01; 基于51单片机的智能热水器设计 摘要一、绪论1.1 选题背景及意义1.2 完成目标与功能设计 二、硬件系统设计2.1 硬件完成要求2.2 方案选择2.3 电源电路设计2.4 键盘电路2.5 蜂鸣器报警电路2.6 温度检测电路2.7 红…

LeetCode刷题--- 删除并获得点数

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

AAAI 2024|ETH轻量化Transformer最新研究,浅层MLP完全替换注意力模块提升性能

论文题目&#xff1a; Rethinking Attention: Exploring Shallow Feed-Forward Neural Networks as an Alternative to Attention Layers in Transformers 论文链接&#xff1a; https://arxiv.org/abs/2311.10642 代码仓库&#xff1a; GitHub - vulus98/Rethinking-attention…

【Redis】非关系型数据库之Redis的增删改查

目录 一、Redis的数据类型分类 二、Redis的字符串类型string 三、Redis的列表list 四、Redis的哈希hash 五、Redis的无序集合set 六、Redis的有序集合zset 七、Redis的通用命令 一、Redis的数据类型分类 通常Redis的数据类型有五大基础类型 String&#xff08;字符串&am…

解决Unexpected record signature 0X9maven 资源过滤

解决Unexpected record signature: 0X9|maven 资源过滤 记录问题&#xff1a;我们有个需求是根据excel模版导出一个excel表。我们的项目是SpringBoot&#xff0c;所以理所当然的把这个模版文件放到了&#xff0c;resources文件夹中。但是在导出文件的时候却遇到了invalid code …

关于tex中的表格设置

文章目录 控制表格列宽和行高控制表格列宽的同时实现居中tex中多表格排列单元格的合并与分割对单个单元格进行操作 控制表格列宽和行高 将下面的代码放在table环境内&#xff0c;放在tabular环境外 调整表格宽度和高度&#xff1a; \resizebox{\textwidth}{2cm}{%第一个{}是表…

Linux之静态库和动态库

目录 一、前言 二、对于库的理解 三、静态库 四、动态库 五、动静态库的加载 一、前言 在之前&#xff0c;我们讲了静态库和动态库&#xff0c;详情请跳转&#xff1a;静态库和动态库 下面我们将从工程师的角度&#xff0c;去了解静态库和动态库的形成过程&#xff0c;以…

EndNote快速上手

前言&#xff1a;用EndNote主要就是为了方便管理文章引用的文献&#xff0c;所以本篇就是针对EndNote在文章中引用文献需要的技巧&#xff0c;然后本文用的是EndNoteX9。 EndNote快速上手 创建文献资料库创建文献分组导入文献手动输入文件导入在线搜索 修改文献信息去重文献删除…

火出圈的ChatGPT,在地学、地球科学领域的强大应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

一篇文章带你了解Redis的发展史

Redis 是一个开源的内存数据存储和处理系统&#xff0c;它在过去的几十年中经历了重大的发展和演进。以下是 Redis 的发展历程概述&#xff1a; 早期阶段&#xff08;2000年代初至中期&#xff09;&#xff1a;在这个时期&#xff0c;网站的访问量通常较低&#xff0c;单个数据…