当前位置: 首页 > news >正文

机器学习之线性回归——小白教学

一、线性回归简介

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.dtcms.com/a/305119.html

相关文章:

  • 关于为什么写分配法搭配写回法?非写分配法搭配全写法?
  • python基础:request请求查询参数的基本使用、携带请求参数的两种方法、 json串和python中数据类型转化、 post模拟登录
  • 全方位Python学习方法论:从入门到精通的系统指南
  • GB/T 4706.1-2024 家用和类似用途电器的安全 第1部分:通用要求 与2005版差异(21)
  • 【Spring】日志级别的分类和使用
  • 计算机视觉-局部图像描述子
  • 代理IP轮换机制:突破反爬虫的关键策略
  • AI驱动的知识管理新时代:释放组织潜力的关键武器
  • win10 环境删除文件提示文件被使用无法删除怎么办?
  • MPLS 专线网络
  • 字符集学习
  • 实现多路标注截图
  • GESP2025年6月认证C++七级( 第三部分编程题(1)线图)
  • Spring Boot中的this::语法糖详解
  • Spring与数学的完美碰撞
  • 偏二甲肼气体浓度报警控制系统
  • 自适应双门限的能量检测算法
  • Python算法实战:从排序到B+树全解析
  • TDengine:用AI改变数据消费范式
  • linux命令ps的实际应用
  • 学习Python中Selenium模块的基本用法(3:下载浏览器驱动续)
  • 微服务快速入门
  • BehaviorTree.Ros2 编译教程
  • JavaWeb 入门:JavaScript 基础与实战详解(Java 开发者视角)
  • 飞算科技:以原创之力,开启Java开发新纪元与行业数智变革
  • 技术QA | GNSS模拟器如何赋能自动驾驶?聚焦HIL、多实例与精准轨迹仿真的技术优势
  • Ignite(Apache Ignite)中计算与数据共置的核心概念和编程实践
  • 小程序视频播放,与父视图一致等样式设置
  • Electron将视频文件单独打包成asar并调用
  • 如何在Linux系统下进行C语言程序的编写和debug测试