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

机器学习 之 线性回归算法

目录

线性回归:理解与应用

什么是线性回归?

一元线性回归

正态分布的重要性

多元线性回归

实例讲解

数据准备

数据分析

构建模型

训练模型

验证模型

应用模型

代码实现


线性回归:理解与应用

线性回归是一种广泛使用的统计方法,用于建模和预测因变量与一个或多个自变量之间的线性关系。它是机器学习中最基础也是最重要的算法之一,适用于多种实际场景,如预测销售额、评估房地产价值、预测股票价格等。本文将介绍线性回归的基本概念,并通过具体的例子来展示其应用。

什么是线性回归?

线性回归是一种监督学习技术,用于预测连续数值型的目标变量。它假设自变量与因变量之间存在线性关系,并试图找到最佳拟合直线来描述这种关系。线性回归的核心在于最小化预测值与实际值之间的差距,即误差平方和(SSE)。

线性回归可以分为两种主要类型:一元线性回归和多元线性回归。

一元线性回归

当只有一个自变量时,我们称之为一元线性回归。一元线性回归的数学模型可以表示为: y=β0+β1x+ε 其中,

  • y 是因变量(也称为响应变量)。
  • x 是自变量(也称为解释变量)。
  • β0 是截距项,当 x=0 时的 y 的值。
  • β1 是斜率,表示自变量 x 每增加一个单位时因变量 y 的变化量。
  • ε 是随机误差项,表示模型未能捕捉到的影响 y 的因素。 
实例:

以下为实验数据:

下列为实例代码:

import pandas as pd  # 导入Pandas库,用于数据处理
from matplotlib import pyplot as plt  # 导入Matplotlib库的pyplot模块,用于绘图
from sklearn.linear_model import LinearRegression  # 导入Scikit-learn库的LinearRegression类,用于线性回归分析data = pd.read_csv('data.csv')  # 读取CSV文件中的数据到Pandas DataFrameplt.scatter(data.广告投入, data.销售额)  # 绘制散点图,其中x轴为'广告投入',y轴为'销售额'
plt.show()  # 显示图表corr = data.corr()  # 计算数据的相关系数矩阵lr = LinearRegression()  # 创建一个线性回归模型对象
x = data[['广告投入']]  # 选择DataFrame中的'广告投入'这一列作为特征变量
y = data[['销售额']]  # 选择DataFrame中的'销售额'这一列作为目标变量lr.fit(x, y)  # 使用fit方法训练模型result = lr.predict(x)  # 使用训练好的模型对输入特征进行预测
score = lr.score(x, y)  # 计算模型对训练数据的解释方差比(R²)a = round(lr.intercept_[0], 2)  # 截距项(保留两位小数)
b = round(lr.coef_[0][0], 2)  # 斜率项(保留两位小数)
print(f"线性回归模型为:y = {b}x + {a}")  # 输出线性回归模型方程

 运行出来的散点图为:

 结果为:

正态分布的重要性

在一元线性回归中,随机误差项 ε 通常假定为独立同分布的正态分布。这是因为正态分布是许多实际问题的基础假设之一,它保证了回归参数估计的有效性和可靠性。正态分布的期望为 0,方差相同,为σ^2。

多元线性回归

当有多个自变量时,我们称之为多元线性回归。多元线性回归的数学模型可以表示为: y=β0+β1x1+β2x2+…+βpxp+ε 其中,

  • y是因变量。
  • x1,x2,…,xp​ 是自变量。
  • β0​ 是截距项。
  • β1,β2,…,βp​ 是斜率,表示每个自变量对因变量的影响。
  • ε 是随机误差项。

实例解

为了更好地理解线性回归的应用,我们以一个具体的实例来说明。假设我们有一组数据,包含不良贷款、各项贷款余额、本年累计应收贷款、贷款项目个数以及本年固定资产投资额等信息。我们的目标是使用这些数据来预测不良贷款的金额。

数据准备 

我们从 Excel 文件 "案例.xlsx" 中读取数据。

数据分析

我们首先分析这些变量之间的相关性,以确定哪些变量可能与不良贷款有关联。

构建模型

我们选择使用 "各项贷款余额" 和 "本年固定资产投资额" 作为自变量,"不良贷款" 作为因变量,构建多元线性回归模型。

训练模型

使用数据集的一部分来训练模型,其余部分用于验证模型的准确性。

验证模型

评估模型的性能,例如使用 R² 分数来衡量模型的拟合程度。

应用模型

使用训练好的模型进行预测。

代码实现

下面是一个 Python 代码示例,演示如何使用 pandasscikit-learn 库来完成上述任务:

import pandas as pd
from sklearn.linear_model import LinearRegression# 加载数据
data = pd.read_excel('案例.xlsx')# 创建线性回归模型
lr_model = LinearRegression()# 准备数据
X = data[['各项贷款余额', '本年累计应收贷款', '贷款项目个数', '不良贷款']]
y = data[['本年固定资产投资额']]# 训练模型
lr_model.fit(X, y)# 计算模型的决定系数 (R²)
score = lr_model.score(X, y)
print(score)# 进行预测
predictions = lr_model.predict([[100, 50, 100, 10]])
print("预测结果 (100亿元, 50亿元, 100个, 10亿元):", predictions)# 进行多个预测
predictions_multiple = lr_model.predict([[120, 60, 110, 12], [110, 40, 90, 8]])
print("多个预测结果:", predictions_multiple)# 输出模型的截距和系数  y=kx+b
b = lr_model.intercept_
k = lr_model.coef_
print("系数形状:", k.shape)print("线性回归模型为:y = {:.2f} + {:.2f} * 各项贷款余额 + {:.2f} * 本年累计应收贷款 + {:.2f} * 贷款项目个数 + {:.2f} * 不良贷款.".format(b[0], k[0][0], k[0][1], k[0][2], k[0][3]))

 运行结果:

结论

通过上述实例,我们可以看到线性回归模型在实际问题中的应用。希望这篇文章能帮助你更好地理解线性回归的概念,并学会如何使用它解决实际问题。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • IntelliJ IDEA ideaIU-2024.2.0.2.exe 启动 IDE 失败
  • 阿里云CentOs ClickHouse安装
  • 安全检测GO内外链跳转页面html源码
  • Java 入门指南:List 接口
  • SwiftUI 革命:打造未来派用户界面的艺术
  • 数据结构——链式队列和循环队列
  • 34.给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。要求算法时间复杂度是 O(log n)
  • 探索Facebook的区块链计划:未来社交网络的变革
  • 8.20 pre day bug
  • 记忆化搜索与状态压缩:优化递归与动态规划的利器
  • 《python语言程序设计》2018版第7章第06题代数:平方根 设计一个名为QuadraticEquation类
  • Verilog刷题笔记54
  • PowerShell 一键配置IP
  • TMS核心架构与功能模块解析
  • Java-一个接口查询没有值,需要多次调用直到有值,怎么解决?
  • [NodeJS] 关于Buffer
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • canvas 绘制双线技巧
  • flutter的key在widget list的作用以及必要性
  • HTML中设置input等文本框为不可操作
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • 离散点最小(凸)包围边界查找
  • 嵌入式文件系统
  • 硬币翻转问题,区间操作
  • FaaS 的简单实践
  • #window11设置系统变量#
  • #微信小程序(布局、渲染层基础知识)
  • $$$$GB2312-80区位编码表$$$$
  • (floyd+补集) poj 3275
  • (JS基础)String 类型
  • (Matlab)使用竞争神经网络实现数据聚类
  • (windows2012共享文件夹和防火墙设置
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (三)SvelteKit教程:layout 文件
  • (五)网络优化与超参数选择--九五小庞
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)Neo4j下载安装以及初次使用
  • (一)VirtualBox安装增强功能
  • (转)四层和七层负载均衡的区别
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .gitignore文件---让git自动忽略指定文件
  • .net 反编译_.net反编译的相关问题
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .NET基础篇——反射的奥妙
  • .pop ----remove 删除
  • /*在DataTable中更新、删除数据*/
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @Documented注解的作用
  • @ResponseBody
  • @RunWith注解作用
  • @vue/cli脚手架