一、线性回归简介

1. 核心定义

线性回归是一种通过属性的线性组合进行预测的线性模型,核心目标是找到一条直线(二维)、一个平面(三维)或更高维的超平面,使模型的预测值与真实值之间的误差最小化。

2. 适用场景

适用于回归任务(预测连续型输出,如房价、销售额、温度等),例如通过“房屋大小”预测“房屋价格”,通过“房间数量”“面积”等多特征预测“波士顿房价”。

3. 模型数学形式

(1)单特征线性回归(简单线性回归)

仅含1个输入特征(如房屋大小),模型形式为:
f(x) = w_0 + w_1x
x:输入特征(如房屋大小);

        w_0:截距(直线与y轴交点,也可写作b);

        w_1:特征权重(直线斜率,反映特征对预测结果的影响程度);

        f(x):模型预测值(如预测房价)。

(2)多特征线性回归(多元线性回归)

含d个输入特征(如房间数、面积、楼层等),模型的一般形式为:
f(x) = w_1x_1 + w_2x_2 + ... + w_dx_d + b
x_1, x_2, ..., x_d:d个输入特征的取值;

        w_1, w_2, ..., w_d:对应特征的权重;

        b:截距;

        向量形式(简化表达):f(x) = \boldsymbol{w}^T\boldsymbol{x} + b(\boldsymbol{w}为权重向量,\boldsymbol{x}为特征向量,\boldsymbol{w}^T表示\boldsymbol{w}的转置)。

二、模型求解:最小二乘法

1. 核心思想

线性回归通过最小二乘法求解最优参数(w和b),其本质是最小化“均方误差”——均方误差对应“欧氏距离”,即找到一条直线/超平面,使所有样本到该直线/超平面的欧氏距离之和最小。

2. 误差函数(损失函数)

需最小化的误差函数(均方误差对应的总损失)为:
E(w,b) = \sum_{i=1}^{m} (y_i - f(x_i))^2 = \sum_{i=1}^{m} (y_i - (wx_i + b))^2
m:样本数量;

        y_i:第i个样本的真实值;

        f(x_i) = wx_i + b:第i个样本的预测值;

        E(w,b):所有样本的“残差平方和”(预测值与真实值差值的平方和)。

3. 参数求解过程

求解w和b的过程称为“参数估计”,步骤如下:

    1.    求导:对E(w,b)分别关于w和b求偏导数,得到误差随参数变化的趋势;

    2.    令导数为0:偏导数为0时,误差函数E(w,b)取得最小值,据此解出最优参数:

        最优权重w:w = \frac{\sum_{i=1}^{m} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{m} (x_i - \bar{x})^2}(\bar{x}为特征x的均值,\bar{y}为真实值y的均值);

        最优截距b:b = \bar{y} - w\bar{x}。

三、线性回归的评估指标

1. 残差平方和(SSE/RSS)

        定义:所有样本预测值与真实值差值的平方和,反映模型预测的总误差。

        公式:SSE = \sum_{i=1}^{m} (y_i - \hat{y}_i)^2(\hat{y}_i为第i个样本的预测值);

        特点:值越小,模型拟合效果越好;但受样本数量影响(样本越多,SSE可能越大),无法直接横向对比不同数据集的模型。

2. 均方误差(MSE)

        定义:SSE的平均值,消除了样本数量的影响,更适合对比不同模型。

        公式:MSE = \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i)^2;

        特点:值越小,模型拟合效果越好;单位是“真实值单位的平方”(如房价预测中,单位为“元²”),不够直观。

3. 决定系数(R^2)

        定义:衡量模型对数据的解释能力,反映“模型能解释的变异占总变异的比例”,是最常用的评估指标。

        公式:
R^2 = 1 - \frac{SSE}{SST} = 1 - \frac{\sum_{i=1}^{m} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{m} (y_i - \bar{y})^2}
SST:总平方和(真实值与真实值均值的差值平方和,反映数据本身的总变异);

        简化形式:R^2 = 1 - \frac{MSE}{Var(y)}(Var(y)为真实值y的方差)。

        特点:

        取值范围:(-\infty, 1];

        越接近1:模型拟合效果越好(模型能解释大部分数据变异);

        等于1:模型完全拟合所有样本;

        小于0:模型效果差于“直接用真实值均值预测”(此时模型无意义)。

四、线性回归代码实现(Python sklearn)

1. 核心类

sklearn.linear_model.LinearRegression():用于构建线性回归模型(支持单特征和多特征)。

2. 关键参数
参数 含义与取值 
fit_intercept 是否计算模型截距():- True(默认):模型包含截距;- False:模型不包含截距(直线过原点),需确保数据已中心化。 
normalize 是否在训练前对数据进行归一化:- False(默认):不归一化;- True:对特征进行归一化(均值为0、标准差为1),仅当fit_intercept=True时生效。 

3. 课堂练习:波士顿房价预测

核心步骤(示例思路):

    1.    加载数据:导入波士顿房价数据集(或类似房价数据集,含特征如房间数、距离市中心距离等,目标为房价);

    2.    数据预处理:处理缺失值、标准化特征(可选,若特征量纲差异大);

    3.    划分数据集:将数据分为训练集(用于训练模型)和测试集(用于评估模型);

    4.    训练模型:用LinearRegression()拟合训练数据;

    5.    模型评估:计算测试集的MSE、R^2等指标,判断模型效果。

示例代码框架:
from sklearn import linear_model
from sklearn.datasets import load_boston  # 加载波士顿房价数据集(注意:部分版本需手动安装)
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

1. 加载数据
boston = load_boston()
X = boston.data  # 特征(如房间数、面积等)
y = boston.target  # 目标(房价)

2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

 3. 初始化并训练模型
model = linear_model.LinearRegression(fit_intercept=True, normalize=False)
model.fit(X_train, y_train)

4. 预测与评估
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)  # 计算MSE
r2 = r2_score(y_test, y_pred)  # 计算R²

print(f"均方误差(MSE):{mse:.2f}")
print(f"决定系数(R²):{r2:.2f}")
print(f"模型截距(b):{model.intercept_:.2f}")
print(f"特征权重(w):{model.coef_}")

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

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

相关文章

Kotlin 中适用集合数据的高阶函数(forEach、map、filter、groupBy、fold、sortedBy)

在 Kotlin 中,高级函数(Higher-Order Functions)是一个非常强大的特性。高级函数是指可以将函数作为参数传递,或者将函数作为返回值返回的函数。这种特性使得代码更加灵活和可复用。 使用高级函数可以方便地对集合进行操作,如 map、filter、reduce 等。 在事件驱动的编程中…

Redis 哈希表的核心——`dictEntry` 结构体

接上一篇 Redis 哈希表的本质:数组里存的是什么 Redis 哈希表的核心——dictEntry 结构体,是真正承载我们存储的键值对数据的那个结构。 它的定义非常简洁,但设计得很巧妙。以下是其 C 语言代码(在 Redis 源码 src/dict.h 中&a…

Jsqlparser + Freemarker + Vue3 数据透视报表设计方案

1. 目标与前置条件目标:基于 JSQLParser FreeMarker Vue3 构建一套“可配置的数据透视报表”能力,实现从任意基础 SQL/视图出发,按维度/指标灵活聚合、筛选、排序、分页、导出,并支持钻取、联动、TopN、同比环比等常见分析操作。…

SpringBoot3 Ruoyi芋道管理后台vben5.0

新技术栈(Vue3、Vite6、TypeScript、SpringBoot3/SpringCloud基于Vben5.0最新版本,全面采用Vue3 Vite6 Ant Design Vue TypeScript技术栈,并同时支持SpringBoot3单体架构与SpringCloud微服务架构前端技术栈:Vue3 Vite6 TS A…

K8S - NetworkPolicy的使用

1 前置条件2 控制范围3 隔离类型4 如何识别5 主要字段6 案例演示 前置条件 网络策略通过网络插件来实现。 要使用网络策略,你必须使用支持 NetworkPolicy 的网络解决方案。 创建一个 NetworkPolicy 资源对象而没有控制器来使它生效的话,是没有任何作用的…

Linux:TCP协议

TCP是一个面向连接的、可靠的、基于字节流的传输层协议。文次我们会通过介绍TCP的报头并通过分析各字段的用途来进一步解释其核心特性:可靠传输: 有确认应答、超时重传、确保有序。流量控制和拥塞控制: 动态调节发送速率,防止丢包与拥塞。面向…

uniapp使用map打包app后自定义气泡不显示解决方法customCallout

前言:使用uniapp开发后在小程序可以正常显示,但是运行打包成App后就不显示了,其实这一块对于uniapp框架开发来说,是有系统性的bug,如果你再开发时使用的是vue文件进行,就会出现这个问题。解决方法&#xff…

【typenum】 22 类型级别二进制对数运算(Logarithm2)

一、源码 这段代码实现了一个类型级别的二进制对数运算系统 定义(type_operators.rs) /// A **type operator** for taking the integer binary logarithm of Self. /// /// The integer binary logarighm of n is the largest integer m such /// that …

golang 非error错误分类

1.应用级别,可recover这些 panic 一般是 逻辑或使用不当导致的运行时错误,Go 程序可以用 recover 捕获并继续运行:类型示例描述类型不一致atomic.Value 存不同类型 v.Store(100); v.Store("abc")panic: store of inconsistently ty…

【Ansible】变量与敏感数据管理:Vault加密与Facts采集详解

1. 变量Ansible利用变量存储可重复使用的值,可以简化项目的创建和维护,减少错误数量。1.1 变量名称由字符串组成,必须以字母开头,并且只能含有字母、数字和下划线,和其它编程语言很类似。1.2 常见变量要创建的用户要安…

ROS2下YOLO+Moveit+PCL机械臂自主避障抓取方案

整体运行架构 1.运行相机取像节点 . ./install/setup.bash ros2 launch orbbec_camera gemini_330_series.launch.py depth_registration:true 2.运行根据图像x,y获取z的service 基本操作记录: 创建python包,在src目录下 ros2 pkg create test_python_topic --bu…

快速入门Vue3——初体验

目录 前言 一、搭建环境 1.1、安装Node.js 1.2、安装Vite 二、项目创建 三、运行项目 四、集成Pinia 4.1、Pinia介绍 4.2、Pinia安装 五、集成VueUse 5.1、vueuse简介 5.2、vueuse安装 六、集成Vant 6.1、Vant简介 6.2、Vant安装 前言 本专栏主要介绍如何使用…

深入理解Kubernetes核心:标签与标签选择器实战解析

在管理 Kubernetes 集群时,随着 Pods、Services 等资源数量的增长,如何有效地组织和筛选它们,成为了一个核心问题。Kubernetes 为此提供了一个简单却极其强大的机制:标签(Labels)和标签选择器(L…

哈希和字符串哈希

哈希(Hash) Hash 表 Hash 表又称为散列表,一般由 Hash 函数(散列函数)与链表结构共同实现。与离散化思想类似,当我们要对若干复杂信息进行统计时,可以用 Hash 函数把这些复杂信息映射到一个容…

【Docker基础】Docker-Compose核心配置文件深度解析:从YAML语法到高级配置

目录 前言 1 YAML基础语法解析 1.1 YAML格式简介 1.2 Docker-compose中的YAML语法规则 1.3 YAML数据类型在Compose中的应用 2 docker-compose.yml文件结构剖析 2.1 基本文件结构 2.2 版本声明详解 3 services配置深度解析 3.1 服务定义基础 3.2 镜像与构建配置 3.3…

如何判断是否应该为了一个小功能而引入一个大体积的库

在软件开发中,判断是否应该为了一个看似微小的功能,而引入一个大体积的第三方库,是一项极其重要的、需要进行审慎的“投入产出比”分析的技术决策。这个决策,绝不能,仅仅基于“实现功能的便利性”,而必须&a…

相机定屏问题分析五:【跳帧异常】照片模式1x以上的焦段拍照之后定屏

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 相机定屏问题分析五:【跳帧异常】照片模式1x以上的焦段拍照之后定屏9573412 目录 一、问题背景 二…

Non-stationary Diffusion For Probabilistic Time Series Forecasting论文阅读笔记

Non-stationary Diffusion For Probabilistic Time Series Forecasting 摘要 时间序列数据受到潜在的物理动力学和外部影响,其不确定性通常随时间而变化。现有的去噪扩散概率模型(DDPMs)受到加性噪声模型(ANM)的恒定方…

解决Docker 无法连接到官方镜像仓库

这个错误: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)表示 Docker 无法连接到官方镜像仓库 registry-1.docker…

解决RAGFlow启动时Elasticsearch容器权限错误的技术指南

文章目录 问题现象 根本原因分析 解决方案步骤 1. 定位宿主机数据目录 2. 修复目录权限 3. 验证权限状态 4. 重启服务 5. 检查启动状态 永久解决方案:优化Docker Compose配置 高级故障排除 技术原理 问题现象 在启动RAGFlow项目时,执行 docker logs ragflow-es-01 发现Elast…