机器学习之线性回归

news2024/11/26 18:41:10

往期目录

python在线性规划中的应用


文章目录

    • 一、线性回归算法概述
    • 1.1 什么是线性回归?
    • 1.2 线性回归算法原理
    • 1.3 线性回归的应用场景
  • 二、线性回归算法Python实现
    • 2.1 导入必要的库
    • 2.2 随机生成数据集
    • 2.3 拟合模型
    • 2.4 预测结果
    • 2.5 结果可视化
  • 三、完整代码


线性回归是机器学习中最基础的算法之一,其原理简单易懂,应用广泛。

回归分析(Regression Analysis)是统计学的数据分析方法,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型以便观察特定变量来预测其它变量的变化情况。

线性回归算法(Linear Regression)的建模过程就是使用数据点来寻找最佳拟合线。公式,y = mx + c,其中 y 是因变量,x 是自变量,利用给定的数据集求 m 和 c 的值。
线性回归又分为两种类型,即 简单线性回归(simple linear regression),只有 1 个自变量;*多变量回归(multiple regression),至少两组以上自变量。

一、线性回归算法概述

1.1 什么是线性回归?

线性回归是一种常见的监督学习算法,用于预测一个连续的输出变量(也称为响应变量或因变量)和一个或多个输入变量(也称为自变量)之间的关系。这种关系可以用一条直线的方程来表达。

1.2 线性回归算法原理

线性回归基于最小二乘法,即寻找一条直线最小化观测数据和线之间的平方误差和。该算法的目标是找到一条最佳拟合直线,使得每个观测值与拟合直线之间的距离最小。

线性回归模型的数学表达式如下:

Y = β 0 + β 1 X 1 + β 2 X 2 + … … + β n ∗ X n Y = β_{0} + β_{1}X_{1} + β_{2}X_{2}+ ……+ β_{n}*X_{n} Y=β0+β1X1+β2X2+……+βnXn

其中, Y Y Y 是响应变量, X 1 X_{1} X1 X 2 X_{2} X2,……, X n X_{n} Xn 是自变量, β 0 , β 1 , β 2 , … … , β n β_{0},β_{1},β_{2},……,β_{n} β0β1β2……βn 是模型的参数。

线性回归算法主要包括两个步骤:

寻找最佳拟合直线的参数 β 0 , β 1 , β 2 , … … , β n β_{0},β_{1},β_{2},……,β_{n} β0β1β2……βn

使用模型对新的数据进行预测。

1.3 线性回归的应用场景

线性回归可以用于许多不同的领域,包括金融、经济学、营销、社会科学等。以下是一些可能的应用场景:

通过销售额和广告支出建立销售预测模型
分析股票市场的趋势和波动
将房价与房屋面积、地理位置等因素联系起来
预测医疗保健成本

二、线性回归算法Python实现

为了实现线性回归算法,我们需要将其转化为一个优化问题。我们需要使用机器学习库 scikit-learn 实现这个问题。下面是实现流程:

2.1 导入必要的库

在开始编写代码之前,我们需要导入一些必要的库,包括 pandas、numpy 和 sklearn 等。这些库使得我们可以轻松地进行数据处理、数学运算和模型训练。下面是导入库的代码示例:

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression

2.2 随机生成数据集

在进行机器学习算法时,我们需要先准备合适的数据集。在这个例子中,我们使用一个包含房屋面积和价格的数据集。我们可以使用 pandas 库来加载数据集。下面是加载数据集的代码示例:

# 生成随机数据集
np.random.seed(0)  # 设置随机种子
X = np.random.rand(100, 1)
y = 2 + 3*X + np.random.randn(100, 1)

在上述代码中,我们使用 Pandas 的 read_csv() 方法从 CSV 文件中读取数据,并将其划分为输入变量(也称为特征)和输出变量。X 是包含所有输入变量的 NumPy 数组,y 是包含所有输出变量的一维 NumPy 数组。

2.3 拟合模型

接下来,我们需要创建一个 LinearRegression 对象并拟合模型。这个对象将用于训练模型和进行预测。下面是拟合模型的代码示例:

# 创建线性回归对象并拟合数据
reg = LinearRegression().fit(X, y)

上述代码中,我们创建了一个 LinearRegression 对象 regressor,并调用其 fit() 方法来拟合模型。这里的 fit() 方法会自动调整模型参数以最小化观测值和拟合直线之间的误差。

2.4 预测结果

有了拟合的模型后,我们就可以使用它来进行预测了。这里我们可以根据输入变量预测输出变量。下面是预测结果的代码示例:

# 预测新数据
X_new = np.array([[0.5]])
y_new = reg.predict(X_new)

# 绘制数据散点图和拟合直线(使用 seaborn 库美化)
sns.set(style='whitegrid', font_scale=1.2)

在上述代码中,我们使用训练好的模型 regressor 来预测输出变量 y 的值。这里的 predict() 方法将根据输入变量 X 来返回相应的预测值 y_pred。

2.5 结果可视化

最后,在得到预测结果之后,我们可以将其可视化。这里我们使用 matplotlib 库来绘制散点图和拟合直线。下面是可视化结果的代码示例

plt.scatter(X, y, alpha=0.8, color='#3F7F4C')
plt.plot(X, reg.predict(X), color='#6D8F18', linewidth=2)
plt.grid(False)
plt.xlabel('xlabel',font)
plt.ylabel('ylabel',font)
plt.show()

在上述代码中,我们使用 matplotlib 库将原始数据绘制为散点图。然后,我们使用 predict() 方法计算出预测结果并绘制一条拟合直线。最后,我们添加一些标题和标签来说明图形内容,并使用 show() 方法展示图形。

三、完整代码

import numpy as np
from sklearn.linear_model import LinearRegression
import seaborn as sns
import matplotlib.pyplot as plt

# 生成随机数据集
np.random.seed(0)  # 设置随机种子
X = np.random.rand(100, 1)
y = 2 + 3*X + np.random.randn(100, 1)


fig,ax = plt.subplots(figsize=(8,6),dpi=300)
plt.tick_params(labelsize=20)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
font = {'family': 'Times New Roman','size': 24}
# font_1 = {'family': 'Times New Roman','size': 14}
plt.rcParams["font.family"] = "Times New Roman"  #全图字号新罗马字体


# 创建线性回归对象并拟合数据
reg = LinearRegression().fit(X, y)

# 预测新数据
X_new = np.array([[0.5]])
y_new = reg.predict(X_new)

# 绘制数据散点图和拟合直线(使用 seaborn 库美化)
sns.set(style='whitegrid', font_scale=1.2)

plt.scatter(X, y, alpha=0.8, color='#3F7F4C')
plt.plot(X, reg.predict(X), color='#6D8F18', linewidth=2)
plt.grid(False)
plt.xlabel('xlabel',font)
plt.ylabel('ylabel',font)
plt.show()

# 
# 打印模型参数和预测结果
print('模型参数:', reg.coef_, reg.intercept_)
print('预测结果:', y_new)

本文对于Python实现线性回归算法进行了详细的介绍。首先,我们介绍了线性回归的概念和原理,然后介绍了它的应用场景。最后,我们使用 scikit-learn 库来实现了线性回归算法,并对结果进行了可视化。
运行结果

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

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

相关文章

(5)串口

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单…

十大排序算法(中):冒泡排序,快速排序(递归和非递归)、归并排序(递归和非递归)

这篇文章,我们接着来讲剩下的排序算法:冒泡排序,快速排序(递归和非递归)、归并排序(递归和非递归) 目录 3.3 交换排序3.3.1 冒泡排序3.3.2 快速排序递归优化非递归优化 3.4 归并排序3.4.1 递归…

Jmeter处理接口签名sign

写接口脚本的时候,很多接口涉及到签名,今天介绍下用Jmeter编写签名脚本的方法。 举个例子,开启红包接口,请求方式为post POST /v1/api/red/open json请求参数 { "red_id":1, "timestamp":"166703384…

springboot+vue学生成绩管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的学生成绩管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

例1:混合物压缩、冷却、分离

例:如图所示流程,一烃类混合物Feed含乙烷0.15(摩尔分数,下同)、丙烷0.20、异丁烷0.60和正丁烷0.05,温度10℃,压力101.3kPa,流量45kmol/h。将其压缩至345kPa后冷却至0℃,送…

博客园主题样式,添加背景音乐,鼠标点击等样式设置

文章目录 1)、 博客园主题样式设置1.1)、 主题文档及地址1.2)、获取文件1.3)、配置CSS1.4)、配置JS1.5)、配置Loading1.6)、其他配置1.7)、个性化配置1.8)、效果预览 2)、背景音乐设置2.1)、单曲添加2.2)、歌单添加2.3)、总结 3)、鼠标点击样式3.1)、Js3.2)、效果预览3.3)、更多…

西门子SCL编程指令状态信息

一、编程时需要考虑的状态信息 在逐步执行运动控制命令时,确保等待激活的命令执行完成后再启动新命令! 使用运动控制指令的状态消息和工艺对象的“StatusBits”变量,可以检查激活的命令是否已完成。 在下例中,请按照所示顺序执行…

51单片机控制步进电机Protues仿真设计

一、概述 1.1步进电机简介 步进电机(Stepper Motor)是一种将电信号转换为机械运动的电动机,是一种专用于精密控制的电机。一般步进电机运行稳定,并且精度较高,因此常用于精密仪器、自动化设备、机器人等需要高精度的…

上传漏洞,后端黑白名单绕过(21)

文件上传常见的验证,:后缀名,类型,文件头等 后缀名指的是白名单和黑名单 文件类型:mime的信息 文件头:内容头信息 我们一个一个来说,这个后缀名,大部分可以上传的对方都不允许脚…

【TCP/IP】TCP报文段的首部格式和流量控制

TCP 报文段的首部格式 TCP 虽然是面向字节流的,但其传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而 TCP 的全部功能的体现在它首部中各字段的作用。 因此,弄清 TCP 报文段首部各字段的作用对掌握 TCP 的工作原理非常重要。…

排查jacoco覆盖率对反射问题的影响

最近业务部门开始推行,在全部后台应用中自动开启覆盖率测试。然而,不久后就有业务测试的同学反馈出现问题。 问题的现象如下: 我们的业务通过 HTTP 调用腾讯OSS的服务,结果得到了以上的报错信息。测试同学验证后发现&#xff0c…

【RocketMQ】004-Spring Boot 集成 RocketMQ

【RocketMQ】004-Spring Boot 集成 RocketMQ 文章目录 【RocketMQ】004-Spring Boot 集成 RocketMQ一、基本使用1、创建 Spring Boot 项目,并引入 RocketMQ 依赖2、application.yml 配置3、消息生产者4、消息消费者5、消息调用接口6、启动 RocketMQ7、启动项目&…

(1)LED

LED正负极:大红旗——负极,小红旗——正极 如何看原理图电阻/电容值: eg: 102 10 2 10 * 10 ^ 2 1000 473 47 3 47 * 10 ^ 3 47000单片机使用TTL电频:高电平(逻辑1)5V 低电平&#xff…

C语言操作符详解(上)

C语言操作符详解&#xff08;上&#xff09; 前言1. 算术操作符2. 移位操作符2.1 左移操作符(<<)2.2 右移操作符&#xff08;>>&#xff09; 3. 位操作符3.1 按位与&#xff08;&&#xff09;3.2 按位或&#xff08;|&#xff09;3.4 按位异或&#xff08;^&am…

(4)定时器

51单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成 作用&#xff1a; 用于计时系统替代长时间Delay&#xff0c;提高运行效率和速度任务切换 STC89C52定时器资源&#xff1a; 定时器个数&#xff1a;3个&#xff08;T0,T1,T2&#xf…

【MySQL】MySQL 运算符

目录 一、运算符简述 二、运算符使用 1.算术运算符 1.1 加法运算符 1.2 减法运算符 1.3 乘法与除法运算符 1.4 求模&#xff08;求余&#xff09;运算符 2.比较运算符 2.1 等号运算符 2.2 安全等于运算符 2.3 不等于运算符 2.4 空运算符 2.5 非空运算符 2.6 最小…

深度剖析Mybatis-plus Injector SQL注入器

背景 在项目中需要同时操作Sql Server 以及 MySQL 数据库&#xff0c;可能平时直接使用 BaseMapper中提供的方法习惯 了&#xff0c;不用的话总感觉影响开发效率&#xff0c;但是两个数据库的SQL语法稍微有点差别&#xff0c;有些暴露的方法并不能直接使用&#xff0c;所以便想…

WebSocket的那些事(3-STOMP实操篇)

目录 一、序言二、STOMP详解1、STOMP简单介绍2、STOMP协议内容3、使用STOMP的好处 三、代码示例1、Maven依赖2、开启WebSocket消息代理3、控制器4、前端页面greeting.html 四、测试1、连接服务端2、发送消息 五、STOMP消息传播流程六、结语 一、序言 上节中我们在 WebSocket的…

(11)LCD1602液晶显示屏

LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是一种字符型液晶显示模块&#xff0c;可以显示ASCII码的标准字符和其它的一些内置特殊字符&#xff0c;还可以有8个自定义字符&#xff0c;自带芯片扫描 显示容量&#xff1a;162个字符&#xff0c;每个字符…

【C++】STL六大组件简介

STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 1.STL的版本介绍 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本&#xff…