线性回归学习

一、线性回归简介核心思想:线性回归是一种通过属性的线性组合来做预测的模型。它的目标很明确,就是找到一条合适的直线、平面或者更高维度的超平面,让预测出来的值和实际真实值之间的差距尽可能小。比如在预测房屋价格时,就可以根据房屋大小这个属性,拟合出一条能预测价格的直线。一般形式:对于一个有多个属性描述的样本,线性回归会把这些属性分别乘以对应的权重,再加上一个偏置项,得到预测结果。用向量的形式可以更简洁地表示这种组合关系。二、模型求解:最小二乘法基本原理:最小二乘法是基于 “欧氏距离” 来寻找最优模型的方法。它的核心是找到一条线,让所有样本点到这条线的欧氏距离加起来最小,也就是让预测值和真实值之间的误差总和最小。参数估计:这个过程就是找到最合适的权重和偏置项,使得误差函数的值最小。这里的误差函数反映的是所有样本预测误差的平方和。求解过程:通过对误差函数分别关于权重和偏置项求导,然后让导数等于 0,就能计算出权重和偏置项的最优值。三、线性回归的评估指标误差平方和 / 残差平方和(SSE/RSS):它是把每个样本的预测值和真实值之间的差值平方后加起来的结果,能反映出预测值和真实值之间的总误差大小。平方损失 / 均方误差(MSE):是误差平方和的平均值,它消除了样本数量对误差结果的影响,方便不同数据集之间进行误差比较。R 方(\(R^2\)):这个指标用来衡量模型对数据的拟合效果。它的值越接近 1,说明模型对真实数据的解释能力越强,拟合效果也就越好。简单来说,就是看预测值能解释真实值变化的程度。四、多元线性回归模型形式:当样本有多个属性时,多元线性回归会把每个属性都考虑进来,每个属性都有对应的权重,再加上一个偏置项,共同组成预测公式。矩阵表示:对于多元线性回归,可以用矩阵的形式来表示模型和相关计算,这样在处理大规模数据时会更方便高效。五、实践应用:sklearn 中的线性回归相关函数:在 Python 的 sklearn 库中,linear_model.LinearRegression()函数可以直接实现线性回归算法。主要参数:fit_intercept:用于设置模型是否包含偏置项,如果设置为 False,那么拟合的直线会经过原点,默认是包含偏置项的。normalize:设置是否对数据进行归一化处理,默认是不进行归一化。应用示例:比如用这个函数可以实现对波士顿房价的预测,通过输入房屋的各种属性,得到预测的房价。通过本次学习,我对线性回归的基本概念、求解方法、评估方式和实际应用有了全面的了解。线性回归作为一种简单实用的模型,在很多预测场景中都发挥着重要作用。

代码参考

# 导入必要的库
import pandas as pd          # 用于数据处理和分析的工具库
import numpy as np           # 用于数值计算的基础库
import matplotlib.pyplot as plt  # 用于数据可视化的库
from sklearn.datasets import load_diabetes  # 从sklearn加载糖尿病数据集
from sklearn.model_selection import train_test_split  # 用于划分训练集和测试集
from sklearn.linear_model import LinearRegression  # 线性回归模型
from sklearn.metrics import mean_squared_error, r2_score  # 模型评估指标

# 1. 加载糖尿病数据集
# 该数据集包含442名糖尿病患者的10项生理特征和1年后的病情发展指标
diabetes = load_diabetes()

# 2. 数据处理与格式化
# 将特征数据转换为DataFrame格式,便于查看和处理
# diabetes.data包含特征数据,diabetes.feature_names是特征名称列表
X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)

# 将目标值(标签)转换为Series格式,目标值表示患者1年后的病情发展情况
y = pd.Series(diabetes.target, name='DiseaseProgression')

# 3. 数据探索:查看数据集基本信息
print("数据集基本信息:")
print(f"特征数量:{X.shape[1]}")  # X.shape[1]表示列数,即特征数量
print(f"样本数量:{X.shape[0]}")  # X.shape[0]表示行数,即样本数量
print("\n特征名称:", diabetes.feature_names)  # 打印所有特征的名称
print("\n数据统计描述:")
# 打印数据的统计信息(均值、标准差、最小值、最大值等)
print(X.describe())

# 4. 划分训练集和测试集
# train_test_split函数用于将数据集随机划分为训练集和测试集
# test_size=0.3表示测试集占总数据的30%,训练集占70%
# random_state=42设置随机种子,确保每次运行划分结果一致,保证实验可复现
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)

# 5. 构建线性回归模型并训练
# 创建线性回归模型实例,fit_intercept=True表示模型会计算偏置项(截距)
model = LinearRegression(fit_intercept=True)

# 使用训练集数据训练模型,即通过最小二乘法找到最优的权重和偏置
# 模型会学习特征(X_train)与目标值(y_train)之间的线性关系
model.fit(X_train, y_train)

# 6. 输出模型参数(权重和偏置)
print("\n模型参数:")
# 遍历每个特征及其对应的系数(权重)
# 系数的大小和符号表示该特征对预测结果的影响程度和方向
for feature, coef in zip(diabetes.feature_names, model.coef_):
print(f"{feature}: {coef:.4f}")  # 保留4位小数输出

# 输出偏置项(intercept),即线性方程中的常数项
print(f"偏置(intercept): {model.intercept_:.4f}")

# 7. 使用训练好的模型进行预测
# 用测试集的特征数据进行预测,得到模型的预测结果y_pred
y_pred = model.predict(X_test)

# 8. 模型评估:计算评估指标
# 计算均方误差(MSE):预测值与真实值差值的平方的平均值
mse = mean_squared_error(y_test, y_pred)

# 计算均方根误差(RMSE):MSE的平方根,与目标值单位一致,更易解释
rmse = np.sqrt(mse)

# 计算R方(R²):表示模型解释的方差比例,范围0-1,越接近1说明拟合效果越好
r2 = r2_score(y_test, y_pred)

# 打印评估指标结果
print("\n模型评估指标:")
print(f"均方误差(MSE):{mse:.4f}")
print(f"均方根误差(RMSE):{rmse:.4f}")
print(f"R方(R^2):{r2:.4f}")

# 9. 结果可视化:真实值与预测值对比
# 创建画布,设置大小为10x6英寸
plt.figure(figsize=(10, 6))

# 绘制散点图:x轴为真实值,y轴为预测值,alpha设置点的透明度
plt.scatter(y_test, y_pred, alpha=0.5, label='预测值 vs 真实值')

# 绘制参考线:y=x的虚线,表示理想情况下预测值等于真实值
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--', label='理想预测线')

# 设置坐标轴标签和图表标题
plt.xlabel('真实病情发展指标')
plt.ylabel('预测病情发展指标')
plt.title('糖尿病病情预测:真实值 vs 预测值')

# 添加图例和网格线
plt.legend()
plt.grid(alpha=0.3)  # alpha设置网格线透明度

# 显示图表
plt.show()

# 10. 特征重要性可视化
# 计算各特征系数的绝对值,用于表示特征重要性(绝对值越大影响越大)
coef_abs = np.abs(model.coef_)

# 创建画布,设置大小为10x6英寸
plt.figure(figsize=(10, 6))

# 绘制柱状图展示各特征的重要性
plt.bar(diabetes.feature_names, coef_abs)

# 设置图表标题和坐标轴标签
plt.title('特征重要性(基于系数绝对值)')
plt.xlabel('特征名称')
plt.ylabel('系数绝对值')

# 添加y轴网格线,便于查看数值
plt.grid(axis='y', alpha=0.3)

# 显示图表
plt.show()

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

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

相关文章

如何使用 DeepSeek 助力工作:全面指南​

一、引言​1.1 DeepSeek 简介​DeepSeek 的定位与目标概述​核心技术亮点(大语言模型、多模态能力、AI Agent 框架)​1.2 工作场景中应用 AI 的趋势​AI 对职场效率提升的重要性​DeepSeek 在众多 AI 工具中的独特地位​二、DeepSeek 基础功能介绍​2.1 …

车载诊断架构 --- EOL引起关于DTC检测开始条件的思考

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

JCTools Spmc 单生产者-多消费者的无锁并发有界队列

SpmcArrayQueue 是 JCTools 中为 单生产者-多消费者(Single-Producer-Multi-Consumer) 场景设计的有界队列。与 SPSC 模型相比,SPMC 的复杂性主要体现在消费者侧,因为多个消费者线程需要以线程安全的方式竞争消费同一个队列中的元…

SpringAI1.0.1实战教程:避坑指南25年8月最新版

Spring AI 1.0.1 使用教程 项目简介 作为一个Java的开发者 听到Java也有ai框架了 很高兴~~~ 本来想学一下SpringAI但是网上卖课的一大堆,并且大部分课程都是五月的,到2025年的8月份,SpringAI的版本做了很多更新,所以我本人参考…

Maven架构的依赖管理和项目构建

​​​​​​什么是依赖管理对第三方依赖包的管理,可以连接互联网下载项目所需第三方jar包。对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。Maven的依赖管理方式和传统方式有什么区别传统方式:从官网手动下载jar包…

微信小程序开发(一):使用开发者工具创建天气预报项目

Hi,我是前端人类学(之前叫布兰妮甜)! 从今天开始,我将开启一个全新的微信小程序开发系列教程,通过实际项目带大家系统学习小程序开发。作为系列的第一篇文章,我们将从最基础的环境搭建开始&…

【链表 - LeetCode】24. 两两交换链表中的节点

24. 两两交换链表中的节点 - 力扣(LeetCode) 题解: - 迭代 首先是直接遍历的做法,这里注意调整指针指向的顺序。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* List…

爬虫基础学习-链接协议分析,熟悉相关函数

1、urlparse:(python标准库中的一个模块,解析和操作url)标准的url链接格式:scheme://netloc/path;params?query#fragmentscheme(协议) http or https netloc(网络位置) …

kkfileview预览Excel文件去掉左上角的跳转HTML预览、打印按钮

上篇说了使用nginx代理kkfile预览文件,但是又发现个新问题,预览其他文件时都正常,但是预览.xlsx格式的时候,在左上角会有【跳转HTML预览】【打印】两个按钮,如下所示:这篇就来说一下如何去掉。首先这个跟kk…

阿里开源新AI code工具:qoder功能介绍

下载地址: https://qoder.com/ 文档地址: https://docs.qoder.com/ 文章目录1. AI 编码发展趋势2. 真实世界软件开发的挑战3. 我们的方法3.1. 透明度3.1.1. 知识可见性3.1.2. 执行透明度3.2. 增强上下文工程3.3. 规范驱动与任务委托3.3.1. 聊天模式&…

什么是短视频矩阵系统企业立项功能源码开发,支持OEM

短视频矩阵系统企业立项功能源码开发解析在短视频行业蓬勃发展的当下,企业纷纷布局短视频矩阵,以实现多平台、多账号的协同运营。而企业立项作为短视频矩阵项目启动的关键环节,其高效、规范的管理直接影响项目的推进效率与成果。为此&#xf…

当GitHub宕机时,我们如何协作?

问题背景与影响 GitHub作为主流代码托管平台的依赖现状宕机对分布式团队、CI/CD流水线、紧急修复的影响案例其他类似平台(GitLab、Bitbucket)的潜在连带风险 本地与离线协作方案 利用Git分布式特性:本地仓库继续提交,恢复后同步搭…

【会议跟踪】Model-Based Systems Engineering (MBSE) in Practice 2025

会议主旨与议题 会议宣传链接:https://www.sei.cmu.edu/events/mbse-in-practice/ 本次会议将于2025年8月21日位美国弗吉尼亚州阿灵顿(五角大楼所在地)举行。本次会议主旨为 MBSE in Practice: Bridging the Gap Between Theory and Success(2025)。随着软件定义系统日趋…

浏览器的渲染流程:从 HTML 到屏幕显示

在我们日常使用浏览器浏览网页时,往往忽略了浏览器背后复杂的渲染过程。从输入 URL 到页面最终显示在屏幕上,浏览器需要经过一系列精心设计的步骤。 浏览器渲染的整体流程浏览器的渲染流程可以大致分为两个主要部分:网络 和 渲染。当用户在地…

FastMCP 客户端服务器通信示例:从入门到实战(STDIO 传输)

引言 在现代分布式系统和AI应用中,模型上下文协议(MCP)扮演着重要角色,它负责协调客户端与服务器之间的通信,尤其是在需要频繁交互的场景中。本文将介绍如何使用FastMCP库快速实现客户端与服务器之间的通信&#xff0c…

宝可梦肉鸽 PC/手机双端 多种存档 全闪光 无限金币 全宝可梦解锁 免安装中文版

网盘链接: 宝可梦肉鸽 免安装中文版 名称:宝可梦肉鸽 PC/手机双端 多种存档 全闪光 无限金币 全宝可梦解锁 免安装中文版 描述:宝可梦肉鸽修改版是一款非常受欢迎的口袋妖怪系列,游戏拥有许多独特的妖怪和玩法。在游戏中&#…

Linux 下的网络编程

1、目的实现不同主机上进程间的通信。2、问题主机与主机之间在物理层面必须互联互通。进程与进程在软件层面必须互联互通。IP地址:计算机的软件地址,用来标识计算机设备。MAC地址:计算机的硬件地址(固定)。网络的端口号…

Go语言在边缘计算中的网络编程实践:从入门到精通

一、引言 在数字化浪潮席卷全球的今天,边缘计算如同一股清流,正在重新定义我们对网络架构的理解。想象一下,当你在自动驾驶汽车中需要毫秒级响应,或者在偏远工厂中需要实时处理传感器数据时,传统的云计算模式就像是&qu…

ASPICE过程能力确定——度量框架

🚗【汽车人必看】ASPICE能力评估核心:度量框架全解析|90%工程师都搞不懂的评分规则!🔍 为什么你的ASPICE评估总卡在L2?——揭秘6大能力等级背后的评分逻辑,附提升秘籍!🔥…

机器学习在量化中的应用

一、核心应用场景在因子研究中,scikit-learn 主要解决以下几类问题:因子预处理与标准化:StandardScaler, RobustScaler因子有效性分析:LinearRegression (IC分析)降维与因子合成:PCA, FactorAnalysis机器学习预测模型&…