《机器学习》——线性回归模型

文章目录

  • 线性回归模型简介
  • 一元线性回归模型
  • 多元线性回归模型
  • 误差项分析
  • 一元线性模型实例
    • 完整代码
  • 多元线性模型实例
    • 完整代码

线性回归模型简介

  • 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
    • 相关关系:包含因果关系和平行关系
    • 因果关系:回归分析【原因引起结果,需要明确自变量和因变量】
    • 平行关系:相关关系【无因果关系,不区分自变量和因变量】

一元线性回归模型

在这里插入图片描述

多元线性回归模型

在这里插入图片描述

误差项分析

  • 误差项满足高斯分布:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 求解
    在这里插入图片描述
  • 一元线性回归模型与多元线性回归模型的区别
    • 自变量数量:一元线性回归只涉及一个自变量,而多元线性回归涉及两个或更多自变量。
    • 模型复杂度:由于包含更多的自变量,多元线性回归模型能够捕捉更复杂的数据关系,但也面临过拟合和变量选择等挑战。
    • 解释性:在多元线性回归中,每个自变量的回归系数表示在保持其他自变量不变的情况下,该自变量每增加一个单位对因变量的平均影响。而在一元线性回归中,这个解释更为直接和简单。
    • 应用场景:当数据集中只有一个自变量时,使用一元线性回归;当数据集包含多个可能相关的自变量时,使用多元线性回归。

一元线性模型实例

  • 安装scikit-learn
    python中执行线性回归的一个非常流行和强大的库是scikit-learn。scikit-learn提供了丰富的工具来进行数据挖掘和数据分析,包括简单和复杂的线性回归模型。
pip install scikit-learn
  • 准备数据集
    在这里插入图片描述

    • 数据集文件:通过网盘分享的文件:data.csv
      链接: https://pan.baidu.com/s/119pHKJu0ZPGYUfQA6_hYfg 提取码: i3vf
  • 实例步骤

    • 导入数据

    • 绘制数据的散点图

    • 求特征之间的相关系数

    • 估计模型参数,建立回归模型

    • 训练模型

    • 测试模型

    • 求出线性回归模型

      • 导入数据

      通过导入pandas模块,使用pandas的读取csv文件的方法进行导入数据集。

      data = pd.read_csv('data.csv')
      
      • 绘制散点图
      plt.scatter(data.广告投入,data.销售额)
      plt.show()
      

      在这里插入图片描述

      • 求特征之间的相关系数

      在Python中,特别是在使用pandas库处理数据时,corr()函数是一个非常有用的方法,它用于计算DataFrame中列与列之间的相关系数。
      相关系数越接近1,说明它们之间受相互的影响越大。

      corr = data.corr()
      

      在这里插入图片描述

      • 估计模型参数,建立回归模型

      分别用变量接收数据中的值,后面传入模型中训练
      这里直接调用 scikit-learn 库中的 LinearRegression() 模型

      lr = LinearRegression()
      x = data[["广告投入"]]
      y = data[["销售额"]]
      
      • 训练模型

      使用sklearn模块中的fit()方法进行训练

      lr.fit(x,y)
      
      • 测试模型

      这里取两个例子进行测试预测,score()方法用于评估模型对给定数据(x, y)的拟合优度,其中x是自变量数据,y是真实的因变量数据。对于线性回归模型,score 方法默认计算的是决定系数(R2 score),它表示模型预测值与实际值之间的拟合程度。R2 score的值越接近1,说明模型的拟合效果越好;如果为0,则表示模型的表现和简单预测平均值一样;如果小于0,则表示模型的表现甚至不如简单预测平均值。

      score = lr.score(x,y)
      #
      print(lr.predict([[50]]))
      print(lr.predict([[70]]))
      
      • 求出线性回归模型

      分别求出回归的模型的截距和斜率,.coef_方法用来求斜率而.intercept_方法用来求截距

      b = lr.coef_
      c = lr.intercept_
      print("一元线性回归模型为:y={:.2f}x1 + {:.2f}.".format(b[0][0],c[0]))
      
      • 结果
        在这里插入图片描述

完整代码

import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression


data = pd.read_csv('data.csv')
a = data.广告投入
# 绘制散点图
plt.scatter(data.广告投入,data.销售额)
plt.show()

corr = data.corr()# 求x和y的相关系数
print(corr)
# 估计模型参数,建立回归模型
lr = LinearRegression()
x = data[["广告投入"]]
y = data[["销售额"]]

lr.fit(x,y)# 训练模型

score = lr.score(x,y)
#
print(lr.predict([[50]]))
print(lr.predict([[70]]))
b = lr.coef_
c = lr.intercept_
print("一元线性回归模型为:y={:.2f}x1 + {:.2f}.".format(b[0][0],c[0]))

多元线性模型实例

多元线性模型与一元线性模型结构差不多相同,有些许差别。

  • 导入数据
    在这里插入图片描述

本次使用的数据为糖尿病的数据,共有10个特征变量的自变量和最后一列的因变量。
通过网盘分享的文件:糖尿病数据.csv
链接: https://pan.baidu.com/s/1lO8IshYhgmkGlNYMBMIK4w 提取码: mh94

完整代码

import pandas as pd
from sklearn.linear_model import LinearRegression


data = pd.read_csv("糖尿病数据.csv")

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

lr_model = LinearRegression()
x = data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6']]
y = data[['target']]

lr_model.fit(x,y)

score = lr_model.score(x,y)

print(lr_model.predict([[-0.0926954778032799,-0.044641636506989,-0.0406959404999971,-0.0194420933298793,-0.0689906498720667,-0.0792878444118122,0.0412768238419757,-0.076394503750001,-0.0411803851880079,-0.0963461565416647]]))
print(lr_model.predict([[-0.0963280162542995,-0.044641636506989,-0.0838084234552331,0.0081008722200108,-0.103389471327095,-0.0905611890362353,-0.0139477432193303,-0.076394503750001,-0.0629129499162512,-0.0342145528191441]]))

a = lr_model.coef_
b = lr_model.intercept_

print("糖尿病线性回归模型为:y ={:.2f}x1 + {:.2f}x2 + {:.2f}x3 + {:.2f}x4 + {:.2f}x5 + {:.2f}x6 + {:.2f}x7 + {:.2f}x8 + {:.2f}x9 + {:.2f}x10 + {:.2f}.".format(a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5],a[0][6],a[0][7],a[0][8],a[0][9],b[0]))
  • 结果
    在这里插入图片描述

可以看到一元线性回归模型和多元线性回归模型的结果只是多元线性回归模型有多个自变量,来控制因变量,且多元线性回归模型要导入多个特征数据,数据处理阶段并无太大区别。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习环境】NVIDIA Driver、Cuda和Pytorch(centos9机器,要用到显示器)

文章目录 一 、Anaconda install二、 NIVIDIA driver install三、 Cuda install四、Pytorch install 一 、Anaconda install Step 1 Go to the official website: https://www.anaconda.com/download Input your email and submit. Step 2 Select your version, and click i…

在HTML中使用Vue如何使用嵌套循环把集合中的对象集合中的对象元素取出来(我的意思是集合中还有一个集合那种)

在 Vue.js 中处理嵌套集合(即集合中的对象包含另一个集合)时,使用多重 v-for 指令来遍历这些层次结构。每个 v-for 指令可以用于迭代一个特定级别的数据集,并且可以在模板中嵌套多个 v-for 来访问更深层次的数据。 例如&#xff…

ip归属地是什么意思?ip归属地是实时定位吗

在数字化时代,IP地址作为网络设备的唯一标识符,不仅关乎设备间的通信,还涉及到用户的网络身份与位置信息。其中,IP归属地作为IP地址的地理位置信息,备受用户关注。本文将详细解析IP归属地的含义,并探讨其是…

基于BP训练深度学习模型(用于回归)以及验证误差值

用原生Python训练了一个BP网络,适合没有pytorch等环境的电脑,并用训练的模型对原始数据进行了预测,拿来估测比较误差值了,可以直接拿去用(需根据个人数据来调训练次数、学习效率),代码在文章末。…

C#冒泡排序

一、冒泡排序基本原理 冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以一个简单的整数数…

折腾日记:如何让吃灰笔记本发挥余热——搭建一个相册服务

背景 之前写过,我在家里用了一台旧的工作站笔记本做了服务器,连上一个绿联的5位硬盘盒实现简单的网盘功能,然而,还是觉的不太理想,比如使用filebrowser虽然可以备份文件和图片,当使用手机使用网页&#xf…

从0入门自主空中机器人-2-1【无人机硬件框架】

关于本课程: 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让…

剑指Offer|LCR 013. 二维区域和检索 - 矩阵不可变

LCR 013. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。 实现 NumMatrix 类: NumMatrix(…

接口Mock技术介绍

相信学习过程序设计的读者朋友们,一定对“桩(Stub)”这个概念并不陌生。它是指用来替换一部分功能的程序代码段。桩程序代码段可以用来模拟已有程序的某些功或者是将实现的系统代码的一种临时替代方法。插桩方法被广泛应用于开发和测试工作中…

深入解析C#异步编程:await 关键字背后的实现原理

在C#中,async 和 await 关键字用于编写异步代码。本文将详细介绍 await 的实现原理,包括状态机的生成、回调函数的注册和触发等关键步骤。 1. 异步方法的基本概念 在C#中,async 关键字标记一个方法为异步方法,而 await 关键字用于…

【机器学习】SVM支持向量机(一)

介绍 支持向量机(Support Vector Machine, SVM)是一种监督学习模型,广泛应用于分类和回归分析。SVM 的核心思想是通过找到一个最优的超平面来划分不同类别的数据点,并且尽可能地最大化离该超平面最近的数据点(支持向量…

Unity功能模块一对话系统(1)前置准备

也许你也曾被游戏中的对话系统深深吸引,那些精心设计的对白、鲜活的角色配音、甚至是简单的文字对话,往往能让玩家产生强烈的代入感和情感共鸣。如果你正在开发一款游戏,或者计划为你的项目加入一个引人入胜的对话系统,那么 Unity…

upload-labs关卡记录10

白名单,可以看到已经进行了限制,只能上传这三种后缀的文件,先试一试MIME绕过: 果然不行:观察到是post型,试一试00绕过:没找到路径,绕过失败。 看源码吧: $is_upload f…

专业140+总分410+南京大学851信号与系统考研经验南大电子信息通信集成电路,真题,大纲。参考书。

本人本科中等211,离保送本校差一点,考研前纠结本校还是追求更高目标,和家人聊了自己的想法,感谢父母对我的支持,坚定报考南大的目标,最终专业851信号与系统140,总分410顺利被南京大学录取&#…

《机器学习》——KNN算法

文章目录 KNN算法简介KNN算法——sklearnsklearn是什么?sklearn 安装sklearn 用法 KNN算法 ——距离公式KNN算法——实例分类问题完整代码——分类问题 回归问题完整代码 ——回归问题 KNN算法简介 一、KNN介绍 全称是k-nearest neighbors,通过寻找k个距…

Spring Boot 学习笔记

学习代码第一步&#xff1a;如何写 Hello world &#xff1f; 1、新建项目 新建一个 Maven Java 工程&#xff0c;在 pom.xml 文件中添加 Spring Boot Maven 依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spri…

基于python的扫雷游戏

游戏 游戏目标&#xff1a; 揭开所有非地雷的格子。 如果揭开地雷&#xff0c;游戏失败。 使用标记功能&#xff08;&#x1f6a9;&#xff09;来标记可能的地雷位置。 格子类型&#xff1a; 空白格子&#xff1a;表示周围没有地雷。 数字格子&#xff1a;显示周围 8 个格子…

【K8S系列】深入解析K8S服务的无状态与有状态

在容器编排领域&#xff0c;Kubernetes&#xff08;K8S&#xff09;无疑是占据主导地位的工具。它提供了强大的功能来管理和部署容器化应用程序&#xff0c;其中服务分类是理解和有效使用K8S的关键。K8S中的服务主要分为无状态服务和有状态服务&#xff0c;这两种类型在基础概念…

Linux第100步_Linux之设置LCD作为终端控制台和LCD背光调节

KMS是Kemmel Mode Setting的缩写&#xff0c;内核显示模式设置。它主要负责显示的控制&#xff0c;包括屏幕分辨率、屏幕刷新率和颜色深度等等。 CRTC是指显示控制器&#xff0c;在DRM里有多个显存&#xff0c;通过操作CRTC来控制要显示那个显存。 KMS包含了FB框架。DRM驱动默…

3_TCP/IP连接三次握手与断开四次挥手

TCP/IP 通信是网络通信的基础协议&#xff0c;分为以下主要步骤&#xff1a; 1、建立连接&#xff08;三次握手&#xff09; 目的&#xff1a;保证双方建立可靠的通信连接。 过程&#xff1a; 1>客户端发送 SYN&#xff1a;客户端向服务器发送一个 SYN&#xff08;同步&…