一、线性回归简介

1.什么是线性回归

线性回归(Linear    regression)是利⽤回归⽅程(函数)对⼀个或多个⾃变量(特征值)和因变量(⽬标值)之间关系进⾏建模的⼀种分析⽅式。

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

 

 线性回归⽤矩阵表示举例:

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

线性回归当中主要有两种模型,⼀种是线性关系,另⼀种是⾮线性关系。

二、线性回归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=0.25:存在⽗类当中对于⼀个常数值的学习率来说,可以使⽤learning_rate=’constant’    ,并使⽤eta0来指定学习率。
属性:
SGDRegressor.coef_:回归系数
SGDRegressor.intercept_:偏置

三、线性回归的损失和优化

1.损失函数

总损失定义为:

y 为第i个训练样本的真实值
h(x )为第i个训练样本特征值组合预测函数
⼜称最⼩⼆乘法

2.优化算法

如何去求模型当中的W,使得损失最⼩?(⽬的是找到最⼩损失对应的W值)
线性回归经常使⽤的两种优化算法:1.正规⽅程  2.梯度下降法

(1) 正规⽅程的推导

把该损失函数转换成矩阵写法:

其中y是真实值矩阵,X是特征值矩阵,w是权重矩阵
对其求解关于w的最⼩值,起⽌y,X    均已知⼆次函数直接求导,导数为零的位置,即为最⼩值。
求导:

 

注:式(1)到式(2)推导过程中,    X是⼀个m⾏n列的矩阵,并不能保证其有逆矩阵,但是右乘X 把其变成⼀个⽅阵,保证其有逆矩阵。
式(5)到式(6)推导过程中,和上类似。 

四、项目案列

1.问题背景

糖尿病是一种常见的慢性疾病,其病情发展与多种因素相关(如年龄、体重指数、血压等)。本案例将通过线性回归模型,探索这些因素与糖尿病病情进展的量化关系,实现对病情的预测。

2 数据介绍

输入特征(10 个):age(年龄)、sex(性别)、bmi(体重指数)、bp(平均血压)、s1-s6(6 项血清指标)

目标变量:target(一年后糖尿病病情进展的量化值)

数据已做标准化处理,可直接用于模型训练。

3.完整流程实现:

1. 导入必要的库

import pandas as pd  # 用于数据读取和处理
from sklearn.linear_model import LinearRegression  # 导入线性回归模型

2. 读取数据

data = pd.read_csv('糖尿病数据.csv', encoding='gbk')

用pd.read_csv读取 CSV 格式的糖尿病数据

 encoding='gbk'指定编码格式,确保中文正常显示(Windows 系统常见需求)

3. 计算相关性

corr = data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6','target']].corr()

选取数据中的 10 个特征和 1 个目标变量target

用corr()计算这些变量之间的相关系数,用于分析变量间的相关性强度

4. 定义特征和目标变量

x = data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6']]  # 特征变量
y = data[['target']]  # 目标变量(一年后糖尿病病情进展)

x包含 10 个输入特征:年龄、性别、体重指数、血压及 6 项血清指标
y是需要预测的目标变量:糖尿病病情进展的量化值

5. 构建并训练线性回归模型

lr_model = LinearRegression()  # 初始化线性回归模型
lr_model.fit(x, y)  # 用特征x和目标变量y训练模型

LinearRegression()创建线性回归模型实例
fit(x, y)通过最小二乘法拟合数据,求解最优回归系数

6. 评估模型性能

score = lr_model.score(x, y)  # 计算决定系数R²
print(f"模型决定系数(R²):{score}")

score(x, y)计算模型的决定系数 R²,衡量模型对数据的拟合程度
R² 取值范围为 [0,1],越接近 1 表示模型拟合效果越好

7. 准备预测数据并进行预测

# 构建带特征名的预测数据(解决特征名匹配问题)
predict_data = pd.DataFrame([[0.00538306037424807, -0.044641636506989, -0.0363846922044735,0.0218723549949558, 0.00393485161259318, 0.0155961395104161,0.0081420836051921, -0.00259226199818282, -0.0319914449413559,-0.0466408735636482]],columns=['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
)
print("预测结果:", lr_model.predict(predict_data))  # 输出预测值

将新样本数据转换为 DataFrame 并指定与训练数据相同的特征名
predict(predict_data)使用训练好的模型对新样本进行预测,输出糖尿病病情进展的预测值

8. 提取模型参数并构建回归方程

coefficients = lr_model.coef_[0]  # 提取特征系数(权重),转换为一维数组
intercept = lr_model.intercept_[0]  # 提取截距项,转换为标量# 构建线性回归方程表达式
features = ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
model_expression = "y = "
for i in range(len(coefficients)):model_expression += f"{coefficients[i]:.2f}x{i+1} + "  # 拼接系数和特征编号
model_expression += f"{intercept:.2f}"  # 拼接截距项print(f'线性回归模型为:{model_expression}')  # 输出完整的回归方程
  • coef_[0]获取 10 个特征对应的系数(权重),表示各特征对目标变量的影响程度
  • intercept_[0]获取回归方程的截距项
  • 通过循环构建完整的线性回归方程表达式,直观展示各特征与目标变量的量化关系

完整代码如下:

import pandas as pd
from sklearn.linear_model import LinearRegression
data=pd.read_csv('糖尿病数据.csv',encoding='gbk')
corr=data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6','target']].corr()
x=data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6']]
y=data[['target']]
lr_model=LinearRegression()
lr_model.fit(x,y)
score=lr_model.score(x,y)
print(f"模型决定系数(R²):{score}")
predict_data = pd.DataFrame([[0.00538306037424807, -0.044641636506989, -0.0363846922044735,0.0218723549949558, 0.00393485161259318, 0.0155961395104161,0.0081420836051921, -0.00259226199818282, -0.0319914449413559,-0.0466408735636482]],columns=['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6'])
print("预测结果:", lr_model.predict(predict_data))
coefficients = lr_model.coef_[0]
intercept = lr_model.intercept_[0]
features = ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
model_expression = "y = "
for i in range(len(coefficients)):model_expression += f"{coefficients[i]:.2f}x{i+1} + "
model_expression += f"{intercept:.2f}"
print(f'线性回归模型为:{model_expression}')

 代码整体作用

通过线性回归模型分析糖尿病数据中各医学特征与病情进展的关系,构建可解释的数学模型,并利用该模型对新患者的病情进展进行预测。代码同时解决了特征名不匹配警告和系数格式化错误等常见问题,确保模型正常运行并输出直观的结果。

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

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

相关文章

.NET 10 中的新增功能系列文章1——运行时中的新增功能

引言 随着 .NET 10 预览版6的发布,微软在运行时层面带来了一系列重要的性能改进和新功能。这些改进主要集中在JIT编译器优化、硬件指令集支持、内存管理等方面,旨在进一步提升应用程序的执行效率和资源利用率。本文将详细解析这些运行时增强功能&#x…

安宝特方案丨AI算法能力开放平台:适用于人工装配质检、点检、实操培训

当前工业AI图形识别算法的应用存在投入成本高、维护更新难、依赖固定相机、应用范围窄、与实际作业脱节等问题。 针对以上情况,安宝特提出了“AI算法能力开放平台”,目的是让AI图形识别算法可以与现场实际的人工点检作业、装配作业、质检作业、培训作业…

水下目标识别准确率↑89%!陌讯多模态融合算法在智慧水务的落地实践

一、行业痛点:智慧水务的检测困境据《2024城市水务智能化白皮书》统计,传统水务检测面临三大挑战:​​水体干扰​​:浑浊度>100NTU时,目标漏检率高达65%​​动态环境​​:水流扰动导致目标形变&#xff…

手动开发一个串口调试工具(三):基于 Qt Widgets 搭建串口调试界面

在上一篇中,我们通过 QCoreApplication 构建了一个基础的串口收发控制台程序,并实现了周期发送、十六进制转换和数据读取等核心功能。本篇将基于此逻辑,进一步将其封装为一个图形化界面程序,借助 Qt Widgets 提供的控件搭建完整的…

量子计算革命:重新定义计算的边界与未来

引言:我们正站在计算革命的新起点 当IBM在2019年宣布实现"量子霸权"时,很多人认为这只是实验室里的科学突破。然而,短短几年后,量子计算已经从理论走向实践,从实验室走向产业应用。我们正站在一个全新的计算…

Python 数据可视化之 Matplotlib 库

在当今数据驱动的时代,数据可视化(Data Visualization)已成为数据科学、机器学习、金融分析、工程建模等多个领域中不可或缺的一环。数据可视化不仅帮助我们更直观地理解数据的分布和趋势,还能辅助决策、展示研究成果以及增强数据…

Makefile 快速入门指南

Makefile 快速入门指南 什么是Makefile? Makefile 是一个自动化构建工具的配置文件,用于管理代码编译、测试和清理等任务。它通过定义规则(rules)来指定文件之间的依赖关系,当源文件改变时,只重新编译受影响的部分&…

Linux学习--C语言(指针4、结构体)

1.二维数组的传参int a[2][3] {1, 2, 3, 4, 5, 6};fun(a,2); int fun(int (*p)[3], int len);2.指针数组的传参char *pastr[5] {NULL};int fun(char **pstr,int len);例子&#xff1a;#include <stdio.h> #include <string.h>int InputArray(char (*p)[32], int …

【STM32】FreeRTOS 消息队列(五)

在 FreeRTOS 中&#xff0c;任务消息队列&#xff08;Message Queue&#xff09; 是一种非常关键的通信机制&#xff0c;用于在任务之间 传递数据、同步事件。 它是实现任务 解耦、异步通信 的核心工具之一&#xff0c;FreeRTOS 的消息队列是任务之间通信的桥梁。 简单点说&am…

【笔记】加速 uv 安装:系统环境变量配置国内镜像源

使用 Conda 工具链创建 UV 本地虚拟环境全记录——基于《Python 多版本与开发环境治理架构设计》-CSDN博客 命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践-CSDN博客 加速 uv 包安装&#xff1a;Windows 系统环境变量配置国内…

Three.js 渲染优化处理

基于项目经验和最佳实践&#xff0c;以下是渲染优化的具体处理方法&#xff1a; 1. 几何体与材质优化 使用 BufferGeometry // 推荐&#xff1a;使用 BufferGeometry 替代 Geometry const geometry new THREE.BufferGeometry();合并几何体 // 将多个几何体合并为一个以减少绘制…

Kafka——Kafka控制器

引言在Kafka集群中&#xff0c;有一个组件堪称"隐形的指挥官"——它默默协调着Broker的加入与退出&#xff0c;管理着主题的创建与删除&#xff0c;掌控着分区领导者的选举&#xff0c;它就是控制器&#xff08;Controller&#xff09;。想象一个拥有100台Broker的大…

编程与数学 03-002 计算机网络 11_域名系统(DNS)

编程与数学 03-002 计算机网络 11_域名系统&#xff08;DNS&#xff09;一、DNS的作用与功能&#xff08;一&#xff09;域名与IP地址的映射关系&#xff08;二&#xff09;DNS的层次结构二、DNS查询过程&#xff08;一&#xff09;递归查询与迭代查询&#xff08;二&#xff0…

影翎Antigravity将发布全球首款全景无人机,8月开启公测招募

7月28日&#xff0c;消费级无人机品牌「影翎Antigravity」及品牌标识官宣亮相&#xff0c;计划推出全新品类——全球首款「全景无人机」。这一消息引发行业震动&#xff0c;消费级航拍无人机市场或将迎来颠覆性飞行体验。影翎Antigravity官方介绍&#xff0c;引力不仅是束缚双脚…

SpringBoot集成Quzrtz实现定时任务

一 定时任务介绍 自律是很多人都想拥有的一种能力&#xff0c;或者说素质&#xff0c;但是理想往往很美好&#xff0c;现实却是无比残酷的。在现实生活中&#xff0c;我们很难做到自律&#xff0c;或者说做到持续自律。例如&#xff0c;我们经常会做各种学习计划、储蓄计划或减…

Java中的异常判断以及文件中的常用方法及功能

目录 异常 作用 异常的处理方式 JVM&#xff08;虚拟机&#xff09;默认的处理方式 自己处理&#xff08;捕获异常&#xff09; 抛出异常&#xff08;也就是交给调用者处理&#xff09; 自定义异常 file File中常见成员方法 判断和获取 创建和删除 获取并遍历 异常…

【C++算法】74.优先级队列_最后一块石头的重量

文章目录题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;题目链接&#xff1a; 1046. 最后一块石头的重量 题目描述&#xff1a; 解法 每次取出最重的两块石头进行碰撞&#xff0c;将剩余的石头重新放入堆中。 C 算法代码&#xff1a; class Solution …

中兴云电脑W101D2-晶晨S905L3A-2G+8G-安卓9-线刷固件包

中兴云电脑W101D2-晶晨S905L3A-2G8G-WIFI-蓝牙5.0-3个USB2.0-线刷包线刷方法&#xff1a;1、准备好一根双公头USB线刷刷机线&#xff0c;长度30-50CM长度最佳&#xff0c;同时准备一台电脑&#xff1b;2、电脑上安装好刷机工具Amlogic USB Burning Tool 软件 →打开软件 →文件…

Android OkHttp 底层原理和实战完全教程(责任链模式详解)

目录 1. OkHttp 入门:从一个请求开始 1.1 基本 GET 请求:三步走 1.2 同步 vs 异步:选择你的风格 1.3 为什么选 OkHttp? 2. 配置 OkHttpClient:打造你的专属网络引擎 2.1 超时设置:别让请求卡死 2.2 添加拦截器:窥探请求全过程 2.3 缓存:让请求更快更省流量 3. …

【RK3588部署yolo】算法篇

简历描述收集并制作军事伪装目标数据集&#xff0c;包含真实与伪装各种类型军事目标共计60余类。其中&#xff0c;包含最新战场充气伪装军事装备30余类&#xff0c;并为每一张图片制作了详细的标注。针对军事伪装目标的特点&#xff0c;在YOLOv8的Backbone与Neck部分分别加…