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

机器学习之线性回归

往期目录

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 库来实现了线性回归算法,并对结果进行了可视化。
运行结果

相关文章:

机器学习之线性回归

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

中国系统正式发声!所有用户永久免费,网友:再见了,CentOS!

点关注公众号,回复“1024”获取2TB学习资源! 如果说:没有操作系统会怎么样? 对于个PC来说,无论是台式机、笔记本、平板等等,一切都变的一无是处,这些硬件对我们来说,和一堆废铁没什么…...

Oracle数据库坏块类故障

正常的数据块有其特有的固定格式,如果某数据块内部出现了混乱而导致Oracle无法读取,则可称其为坏块。数据库坏块的影响范围可大可小,严重时会导致数据库无法打开。当数据库出现坏块时,一般出现ORA-01578错误、ORA-10632错误或者OR…...

andorid之摄像头驱动流程--MTK平台

camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过DSP加工出来,然后在通过IO接口传输到CPU处理。 由于摄像头满足总线、驱动、设备模型,…...

Android9.0 iptables用INetd实现屏蔽ip黑名单的实现

1.前言 在9.0的系统rom定制化开发中,在system中netd网络这块的产品需要中,会要求设置屏蔽ip地址之内的功能,liunx中iptables命令也是比较重要的,接下来就来在INetd这块实现屏蔽ip黑名单的的相关功能,就是在app中只能屏蔽某个网址,就是除了这个网址,其他的都能上网,最后…...

介绍一下json

目录 介绍一下json Elasticsearch7.6学习指南 介绍一下json JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以易于阅读和编写的文本形式表示结构化数据。JSON最初是由Douglas Crockford在2001年提出的,它在we…...

DI依赖注入环境

1.构造器注入 上一章节已经说过了&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoca…...

《程序员面试金典(第6版)》面试题 16.18. 模式匹配(暴力破解 + 剪枝)

题目描述 你有两个字符串&#xff0c;即pattern和value。 pattern字符串由字母"a"和"b"组成&#xff0c;用于描述字符串中的模式。 例如&#xff0c;字符串"catcatgocatgo"匹配模式"aabab"&#xff08;其中"cat"是"a&q…...

一天吃透SpringCloud面试八股文

1、什么是Spring Cloud &#xff1f; Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序&#xff0c;提供与外部系统的集成。Spring cloud Task&#xff0c;一个生命周期短暂的微服务框架&#xff0c;用于快速构建执行有限数据处理的应用程序。 Sprin…...

java生成图片缩略图

目录 前言一、使用Base64编码方式1、基本方法2、压缩本地图片保存到本地3、压缩网络图片到图片服务器 二、使用thumbnailator工具方式1、导入依赖2、压缩本地图片保存到本地 前言 下面介绍了两种获取图片缩略图的方式&#xff0c;全都不是一次性压缩&#xff0c;如果没有达到设…...

《统计学习方法》——隐马尔可夫模型(下)

学习算法 HMM的学习&#xff0c;在有观测序列的情况下&#xff0c;根据训练数据是否包含状态序列&#xff0c;可以分别由监督学习算法和无监督学习算法实现。 监督学习算法 监督学习算法就比较简单&#xff0c;基于已有的数据利用极大似然估计法来估计隐马尔可夫模型的参数。…...

Liunx top 命令详解

文章目录 top补充说明语法选项top交互命令实例 top 显示或管理执行中的程序 补充说明 top命令 可以实时动态地查看系统的整体运行情况&#xff0c;是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面&#xff0c;用热键可以管理。 语法…...

基于 SpringBoot 的医院固定资产系统

本文将介绍基于 SpringBoot 技术的医院固定资产系统的设计和实现。医院固定资产管理是医疗机构管理工作的重要组成部分&#xff0c;它对医院的正常运营和管理具有重要的意义。本系统的设计和实现将有助于医疗机构更好地管理和维护其固定资产。 1. 系统需求分析 医院固定资产管…...

【企业信息化】第2集 免费开源ERP: Odoo 16 销售管理系统

文章目录 前言一、概览二、使用功能1.通过清晰报价提高销售效率2.创建专业报价单3.管理订单及合同4.简化沟通5.维护产品&价格6.直观的报告7.集成 三、总结 前言 世界排名第一的免费开源ERP: Odoo 16 销售管理系统。通过Odoo Sign应用程序和在线支付&#xff0c;发送报价。…...

浅谈数据治理

大家好 &#xff0c;近年来&#xff0c;数据治理成为挖掘数据价值的重要手段和工具。随着大数据平台和工业互联网兴起&#xff0c;数据治理平台主要采用数据中台技术和微服务架构初步替代传统架构&#xff0c;面向大数据架构下&#xff0c;为数据资源中心与外部数据系统提供数据…...

Matlab入门教程003|MATLAB变量|MATLAB命令

MATLAB变量 每个MATLAB变量可以是数组或者矩阵。 用一个简单的方法指定变量。例如&#xff1a; x 3 % defining x and initializing it with a value MATLAB执行上述语句&#xff0c;并返回以下结果&#xff1a; x 3 上述的例子创建了一个1-1的矩阵名为x和的值存储…...

【啃书C++Primer5】-编写一个简单C++程序

每个C程序都包含一个或多个函数(function)&#xff0c;其中一个必须命名为main。操作系统通过调用main来运行C程序。下面是一个非常简单的main函数&#xff0c;它什么也不干&#xff0c;只是返回给操作系统一个值: int main() {return 0; }一个函数的定义包含四部分:返回类型(r…...

GoView 是一个Vue3搭建的低代码数据可视化开发平台

一、总览 开源、精美、便捷的「数据可视化」低代码开发平台 二、整体介绍 框架&#xff1a;基于 Vue3 框架编写&#xff0c;使用 hooks 写法抽离部分逻辑&#xff0c;使代码结构更加清晰&#xff1b; 类型&#xff1a;使用 TypeScript 进行类型约束&#xff0c;减少未知错误…...

【面试篇】Redis持久化面试题

文章目录 Redis持久化&#x1f64e;‍♂️面试官&#xff1a;什么是Redis持久化&#xff1f; AOF日志AOF日志原理&#x1f64e;‍♂️面试官&#xff1a;AOF日志是怎么工作的/AOF写入磁盘的流程&#xff1f;&#x1f64e;‍♂️面试官&#xff1a; 刚刚说到了Redis先执行写入的…...

哈工大软件过程与工具作业2

云原生技术云原生技术 哈尔滨工业大学 计算机科学与技术学院/国家示范性软件学院 2022年秋季学期 《软件过程与工具》课程 作业报告 作业 2&#xff1a;需求分析UML建模 姓名 学号 联系方式 石卓凡 120L021011 944613709qq.com/18974330318 目 录 1 需求概述...........…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...