1 线性回归简介

1 线性回归应用场景

        线性回归是一种用于分析自变量与连续型因变量之间线性关系的模型,其核心是通过拟合线性方程(y = w_1x_1 + w_2x_2 + ... + w_nx_n + b)来预测因变量或解释自变量的影响。由于其简单、可解释性强的特点,线性回归在多个领域有广泛应用。预测类场景(核心应用)包括房价预测、销售额 / 销量预测能源消耗预测等。影响因素分析(解释性应用)上包括经济指标分析、医学健康分析等都可以使用线性回归算法进行预测。

 2.线性回归的定义与公式

        线性回归 (Linear regression) 是利用回归方程 (函数) 对一个或多个自变量 (特征值) 和因变量 (目标值) 之间关系进行建模的一种分析方式。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。(这反过来又应当由多个相关的因变量预测的多元线性回归区别,而不是一个单一的标量变量。)在线性回归中,数据使用线性预测函数来建模,并且未知的模型参数也是通过数据来估计。这些模型被叫做线性模型。最常用的线性回归建模是给定X值的y的条件均值是X的仿射函数。不太一般的情况,线性回归模型可以是一个中位数或一些其他的给定X的条件下y的条件分布的分位数作为X的线性函数表示。像所有形式的回归分析一样,线性回归也把焦点放在给定X值的y的条件概率分布,而不是X和y的联合概率分布(多元分析领域)。

  • 特点:只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归

 那么怎么理解呢?我们来看几个例子

  • 期末成绩:0.7× 考试成绩 + 0.3× 平时成绩
  • 房子价格 = 0.02× 中心区域的距离 + 0.04× 城市一氧化氮浓度 + (-0.12× 自住房平均房价) + 0.254× 城镇犯罪率

上面两个例子,我们看到特征值与目标值之间建立了一个关系,这个关系可以理解为线性模型。

3.线性回归的特征与⽬标的关系分析 

        线性回归当中主要有两种模型,⼀种是线性关系,另⼀种是⾮线性关系。在这⾥我们只能画⼀个平⾯更好去理解,所以都⽤单个特征或两个特征举例⼦。
        线性关系
单变量线性关系:(一元线性回归)

 y=mx+b

        中学时,我们经常使用上面的方程来解一些数学问题,方程描述了变量 y 随着变量 x 而变化。方程从图形上来看,是一条直线。如果建立好这样的数学模型,已知 x 我们就可以得到预测的\hat{y}值了。统计学家给变量带上了一个小帽子,表示这是预测值,以区别于真实观测到的数据。方程只有一个自变量 x,且不含平方立方等非一次项,因此被称为一元线性方程。 

        在对收入数据集进行建模时,我们可以对参数 m 和 b 取不同值来构建不同的直线,这样就形成了一个参数家族。参数家族中有一个最佳组合,可以在统计上以最优的方式描述数据集。那么监督学习的过程就可以被定义为:给定 N 个数据对 (x, y),寻找最佳参数 m*和 b*,使模型可以更好地拟合这些数据。 

        上图给出了不同的参数,到底哪条直线是最佳的呢?如何衡量模型是否以最优的方式拟合数据呢?机器学习用损失函数(loss function)来衡量这个问题。损失函数又被称为代价函数(cost function),它计算了模型预测值\hat{y}和真实值 y 之间的差异程度。从名字也可以看出,这个函数计算的是模型犯错的损失或代价,损失函数越大,模型越差,越不能拟合数据。统计学家通常使用\(L(\hat{y}, y)\)来表示损失函数。 

        对于线性回归,一个简单实用的损失函数为预测值与真实值误差的平方。上图展示了收入数据集上预测值与真实值之间的误差。

多变量线性关系 (多元线性回归)

        现在我们把 x 扩展为多元的情况,即多种因素共同影响变量 y。现实问题也往往是这种情况,比如,要预测房价,需要考虑包括是否学区、房间数量、周边是否繁华、交通方便性等。共有 D 种维度的影响因素,机器学习领域将这 D 种影响因素称为特征(feature)。每个样本有一个需要预测的 y 和一组 D 维向量 \mathbf{X}。原来的参数 m 变成了 D 维的向量 \mathbf{w}。这样,某个 y_i可以表示成 b + \sum_{d=1}^{D} w_d x_{i,d},其中x_{i,d}表示第 i 个样本向量 \mathbf{x}_i中第 d 维特征值。

y_i = b + \sum_{d=1}^{D} w_d x_{i,d} \qquad b = w_{D+1}\)\(y_i = \sum_{d=1}^{D+1} w_d x_{i,d} 

        比一元线性回归更为复杂的是,多元线性回归组成的不是直线,是一个多维空间中的超平面,数据点散落在超平面的两侧。

        ⾮线性关系 

为什么会这样的关系呢?原因是什么? 如果是⾮线性关系,那么回归⽅程可以理解为

 

 4.最小二乘法

        线性回归模型经常用最小二乘逼近来拟合,但他们也可能用别的方法来拟合,比如用最小化“拟合缺陷”在一些其他规范里(比如最小绝对误差回归),或者在桥回归中最小化最小二乘损失函数的惩罚.相反,最小二乘逼近可以用来拟合那些非线性的模型.因此,尽管“最小二乘法”和“线性模型”是紧密相连的,但他们是不能划等号的。

        要使损失函数最小,可以将损失函数当作多元函数来处理,采用多元函数求偏导的方法来计算函数的极小值。

对于上面提到的:预测值与真实值之间的误差

 2.线性回归项目案例

1.简单线性回归分析广告投入与销售额关系

导入必要的库

import pandas as pd
import matplotlib.pyplot as plt  
from sklearn.linear_model import LinearRegression

加载数据

data = pd.read_csv("data(1).csv")
广告投入销售额
2977
2862
3493
3184
2559
2964
3280
3175
2458
3391
2551
3173
2665
3084

 数据预处理与可视化 

plt.scatter(data['广告投入'], data['销售额'])
plt.xlabel('广告投入')
plt.ylabel('销售额')
plt.show()

准备训练数据

x = data[["广告投入"]]  # 特征矩阵(自变量),需使用二维数组格式
y = data[['销售额']]   # 目标向量(因变量)
  • x:选取广告投入列作为特征
  • y:选取销售额列作为目标变量

创建并训练模型 

estimator = LinearRegression(fit_intercept=True)  # 创建线性回归模型,包含截距项
estimator.fit(x, y)  # 训练模型
  • fit_intercept=True:指定模型包含截距项(即公式中的 b)
  • fit()方法通过最小二乘法计算最佳拟合参数

输出模型参数 

print(estimator.coef_)        # 输出斜率(权重)
print(estimator.intercept_)   # 输出截距
print("线性回归模型为: y = {}x + {}".format(estimator.coef_[0][0], estimator.intercept_[0]))
  • coef_:模型的斜率(即广告投入对销售额的影响系数)
  • intercept_:模型的截距
  • 模型公式:销售额 = 系数 × 广告投入 + 截距

评估模型 

score = estimator.score(x, y)  # 计算R²得分
print(score)
  • score()方法返回模型的 R²(决定系数)
  • R² 表示模型对数据的拟合程度,取值范围 [0,1],越接近 1 表示拟合效果越好

运行结果

[[3.73788546]]
[-36.36123348]
线性回归模型为: y = [[3.73788546]]x+[-36.36123348]
0.8225092881166945

完整代码 

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegressiondata=pd.read_csv("data(1).csv")plt.scatter(data['广告投入'], data['销售额'])
plt.xlabel('广告投入')
plt.ylabel('销售额')
plt.show()x=data[["广告投入"]]
y=data[['销售额']]estimator=LinearRegression(fit_intercept=True)estimator.fit(x,y)
print(estimator.coef_)
print(estimator.intercept_)
print("线性回归模型为: y = {}x+{}".format(estimator.coef_,estimator.intercept_))
score=estimator.score(x,y)
print(score)

2.多元线性回归分析体重、年龄与收缩压关系

导入必要的库导入数据 

import pandas as pd
from sklearn.linear_model import LinearRegression
data = pd.read_csv("多元线性回归.csv", encoding='gbk', engine='python')

计算相关系数矩阵

corr = data[["体重", "年龄", "血压收缩"]].corr()

  • 相关系数矩阵可帮助判断变量间的线性相关程度,绝对值越接近1表示越相关

 准备训练数据

x = data[['体重', '年龄']]  # 特征矩阵(自变量)
y = data[['血压收缩']]     # 目标向量(因变量)
  • x:选取体重年龄作为特征
  • y:选取血压收缩作为目标变量

创建并训练模型 

lr_model = LinearRegression()
lr_model.fit(x, y)  # 训练模型
  • 创建线性回归模型实例
  • fit()方法通过最小二乘法计算最佳拟合参数

模型评估 

score = lr_model.score(x, y)  # 计算R²得分
  • score()方法返回模型的 R²(决定系数)
  • R² 表示模型对数据的拟合程度,取值范围 [0,1]

预测新数据 

print(lr_model.predict([[80, 60]]))  # 预测体重80kg、年龄60岁的收缩压
print(lr_model.predict([[70, 30], [70, 20]]))  # 批量预测
  • predict()方法根据训练好的模型进行预测
  • 输入需为二维数组,每行代表一个样本

输出模型参数

a = lr_model.coef_       # 获取系数
b = lr_model.intercept_  # 获取截距
print("线性回归模型为: y = {:.2f}x1 + {:.2f}x2 + {:.2f}.".format(a[0][0], a[0][1], b[0]))

运行结果

[[131.97426124]]
[[98.60219521][94.60003367]]
线性回归模型为: y = 2.14x1 + 0.40x2 + -62.96.

完整代码

import pandas as pd
from sklearn.linear_model import LinearRegression# 导入数据
data = pd.read_csv("多元线性回归.csv", encoding='gbk', engine='python')# 打印相关系数矩阵
corr = data[["体重", "年龄", "血压收缩"]].corr()# 第二步,估计模型参数,建立回归模型
lr_model = LinearRegression()
x = data[['体重', '年龄']]
y = data[['血压收缩']]lr_model.fit(x, y)  # 训练模型# 第四步,对回归模型进行检验
score = lr_model.score(x, y)  # sklearn statsmodes(数理统计这个专业)# 第五步,利用回归模型进行预测
print(lr_model.predict([[80, 60]]))
print(lr_model.predict([[70, 30], [70, 20]]))"""
a:自变量系数
b:截距
"""
a = lr_model.coef_
b = lr_model.intercept_
print("线性回归模型为: y = {:.2f}x1 + {:.2f}x2 + {:.2f}.".format(a[0][0], a[0][1], b[0]))
# 线性回归模型为: y = 2.14x1 + 0.40x2 + -62.96.

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

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

相关文章

【时时三省】(C语言基础)指向指针数据的指针变量

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省在了解了指针数组的基础上,需要了解指向指针数据的指针变量,简称为指向指针的指针。怎样定义一个指向指针数据的指针变量呢?下面定义一个指向指针数据的指针变量&#…

前端css 的固定布局,流式布局,弹性布局,自适应布局,响应式布局

1. 固定布局容器的宽高是固定的,单位一般是px,不会随着屏幕大小变化2.流式布局(百分比布局/vw)vw: 视图宽度的百分比,1vw代表视窗宽度的1% vh: 视图高度的百分比,1vh代表视窗高度的1%特点: 宽度随屏幕大小变化单位用%或vw 高度通常…

python学习DAY26打卡

DAY 26 函数专题1:函数定义与参数 内容: 函数的定义 变量作用域:局部变量和全局变量 函数的参数类型:位置参数、默认参数、不定参数 传递参数的手段:关键词参数 传递参数的顺序:同时出现三种参数类型时…

echarts图表点击legend报错问题(折线图)

原因是&#xff1a;echats 实例&#xff0c;不能够用响应式变量去接收。<template><div class"attendance-chart"><div v-if"loading" class"loading">加载中...</div><div v-else-if"error" class"e…

Django模型开发:模型字段、元数据与继承全方位讲解

文章目录一、模型字段类型详解Django 与 MySQL 字段类型映射整数类型深度对比二、常用字段选项null 与 blank 的区别注释与帮助文本默认值设置日期时间特殊选项选项列表&#xff08;choices&#xff09;三、模型元数据与方法模型 Meta 类模型管理器&#xff08;Manager&#xf…

墨者:SQL注入实战-MySQL

1. 墨者学院&#xff1a;SQL注入实战-MySQL&#x1f680; 2. 实训重点目标✨ 目标一&#xff1a; 了解sqlmap的使用及其tamper插件的使用&#xff1b; 目标二&#xff1a; 了解base64编码及解码。 3. 解题方向&#x1f50d; 目标网站的id参数通过Base64编码传输&#xff0c;…

Milvus 实战全流程

&#x1f4da; 学习路径总览1. Milvus 基础知识什么是向量数据库&#xff1f;Milvus 的核心概念&#xff08;collection、field、index、partition、segment&#xff09;Milvus 和 Faiss、Annoy、HNSW 的区别2. 安装与部署Docker 快速部署 Milvus&#xff08;推荐&#xff09;本…

Mysql数据库基础(入门)

目录 一.认识Sql 1.什么是Sql 2.Sql的作用 3.Sql通用语法 4.Sql分类 二.数据库的操作&#xff08;DDL&#xff09; 1.创建数据库 2.显示/使用数据库 3.修改数据库 4.删除数据库 三.常用数据类型 1.数值类型 2.字符串类型 3.日期类型 4.详细的数据类型 四.表的操…

MySQL 锁机制 15 连问 · 面试速答版

一、脑图&#xff1a;锁全景&#xff08;先记结构&#xff0c;再填细节&#xff09; 锁层级 ├─ 表锁 │ ├─ 意向锁 IS / IX │ └─ 表锁 READ / WRITE └─ 行锁├─ 记录锁 Record├─ 间隙锁 Gap└─ 临键锁 Next-Key二、15 问 15 答&#xff08;面试官一问一…

【Linux】发展历程

很高兴为您详细介绍Linux操作系统的详细发展历程。Linux是一个自由和开放源代码的操作系统内核&#xff0c;由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;于1991年首次发布。以下是Linux操作系统的主要发展里程碑&#xff1a;1. Linux 0.01 (1991)发布日期&#xff1a…

LNMP架构+wordpress实现动静分离

WordPress简称WP&#xff0c;最初是一款博客系统&#xff0c;后逐步演化成一款免费的CMS&#xff08;内容管理系统/建站系统&#xff09;。 WordPress网站的适用场景&#xff1a; 博客 企业官网 作品集网站 电商平台 线上教育系统 论坛和社群网站 甚至会员系统、订阅内容…

智慧灯杆:不止于照明,塔能科技的城市感知网络野心

当夜幕悄然降临&#xff0c;城市里的路灯便依次亮了起来&#xff0c;它们可不单单照亮了行人前行的路以及车辆行驶的道路&#xff0c;实际上还在悄无声息地经历着一场变革。现如今的路灯&#xff0c;早已不再仅仅充当单纯的照明工具这么一个角色了&#xff0c;而是逐渐转变成了…

【Linux内核模块】调试技巧

内核模块开发最让人头疼的不是写代码&#xff0c;而是调试 —— 代码编译通过了&#xff0c;加载后却要么没反应&#xff0c;要么直接让系统崩溃。这就像在黑屋子里修机器&#xff0c;看不见摸不着。其实内核调试有一套成熟的工具箱&#xff0c;掌握这些工具和技巧&#xff0c;…

RK3568笔记九十一:QT环境搭建

若该文为原创文章,转载请注明原文出处。 记录按照正点原子给的手册搭建QT环境 参考《09【正点原子】ATK-DLRK3568_Qt开发环境搭建V1.2.pdf》 一、安装 1、下载 https://mirrors.sau.edu.cn/qt/archive/online_installers/4.6/qt-unified-linux-x64-4.6.0-online.run 2、赋…

面试实战,问题十六,Java面试,消息队列,如何避免消息重复消费,怎么回答

在Java面试中&#xff0c;关于消息队列如何防止消息被重复消费的问题&#xff0c;可以从以下几个方面进行回答&#xff0c;结合系统架构设计、消息队列机制和业务逻辑处理&#xff0c;确保在不同场景下实现消息的幂等性。 1. 消息队列重复消费的根本原因 消息重复消费的根本原因…

PDF转图片实用指南:如何批量高效转换?

将PDF转换为图片后&#xff0c;可以更方便地在演示文稿、网页或电子相册中使用这些资料&#xff0c;以便更好地展示信息。它 是一款支持多文件批量转换的工具&#xff0c;可将多个 PDF 文档一键转换为图片格式。虽然界面为英文&#xff0c;但操作简单&#xff0c;不影响使用。你…

走入Linux的世界:编辑器Vim

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…

PyTorch中神经网络的模型构建

要构建自定义模型&#xff0c;需完成两个核心步骤&#xff1a;继承 nn.Module 类&#xff1b;重载 __init__ 方法&#xff08;初始化&#xff09;和 forward 方法&#xff08;前向计算&#xff09; 神经网络的构造 初始化方法&#xff08;__init__&#xff09; def __init__…

QML QtCharts坐标轴系统

QtCharts是Qt框架中强大的数据可视化模块&#xff0c;它提供了丰富的图表类型和灵活的坐标轴系统&#xff0c;能够满足各种数据展示需求。本文将全面介绍QML中QtCharts的坐标轴系统&#xff0c;包括数值坐标轴(ValueAxis)、对数坐标轴(LogValueAxis)、分类坐标轴(CategoryAxis)…

TI 2025全国电赛猜题

本科组可能的题目方向本科组器材更侧重高频信号处理、复杂控制系统、精密测量及多设备协同&#xff0c;可能涉及以下题目&#xff1a;四旋翼飞行器相关任务题目示例&#xff1a;设计 “基于四旋翼的 UV 光控自主导航系统”任务要求&#xff1a;利用四旋翼飞行器&#xff08;最大…