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

【人工智能-初级】第2章 机器学习入门:从线性回归开始

文章目录

    • 一、什么是线性回归?
    • 二、线性回归的基本概念
      • 2.1 一元线性回归
      • 2.2 多元线性回归
    • 三、如何进行线性回归建模?
    • 四、用Python实现线性回归
      • 4.1 导入必要的库
      • 4.2 创建虚拟数据集
      • 4.3 数据可视化
      • 4.4 拆分训练集和测试集
      • 4.5 训练线性回归模型
      • 4.6 查看模型的参数
      • 4.7 模型预测与评估
      • 4.8 可视化拟合效果
    • 五、总结
      • 5.1 学习要点
      • 5.2 练习题

一、什么是线性回归?

线性回归(Linear Regression)是机器学习中最基础的算法之一,它主要用于解决回归问题。简单来说,线性回归就是找到一个合适的直线来描述数据之间的关系,并用这个直线进行预测。

在生活中,我们常常会遇到这样的场景:你想知道房子的面积和价格之间的关系,或者想了解广告投放和产品销售之间的联系。这些情况中,存在一种变量随着另一种变量而变化的趋势,这就是线性关系。而线性回归模型的目的就是找到这个趋势,用一个数学公式将这种线性关系表示出来。

二、线性回归的基本概念

线性回归的目标是找到一个函数,它能够尽可能准确地预测输入变量(通常叫做自变量)和输出变量(通常叫做因变量)之间的关系。这个函数通常是一个线性方程,其形式为:

y = w x + b y = w x + b y=wx+b

  • y:预测值或因变量。
  • x:输入特征或自变量。
  • w:模型的权重或斜率。
  • b:偏置项,也叫截距,它表示直线在y轴上的截距。

通过调整 wb 的值,我们可以让这条直线尽可能“拟合”数据,使得我们的预测值与真实值之间的误差尽可能小。

2.1 一元线性回归

最简单的线性回归是一元线性回归,它只有一个自变量,即用一个特征预测一个输出值。例如,用房子的面积预测房子的价格。

y = w x + b y = w x + b y=wx+b

在这个公式中,w 是描述房价随面积变化的速率,b 是当面积为0时的房价(当然这种情况在现实中并没有实际意义,但它是数学上的一个假设)。

2.2 多元线性回归

当有多个自变量时,线性回归就变成了多元线性回归。例如,我们用房子的面积、房间数量和建筑年份来预测房价,这时公式变为:

y = w 1 x 1 + w 2 x 2 + w 3 x 3 + . . . + b y = w_1 x_1 + w_2 x_2 + w_3 x_3 + ... + b y=w1x1+w2x2+w3x3+...+b

其中,w1, w2, w3 分别表示每个特征的权重,x1, x2, x3 是各个特征值,b 依旧是截距。

三、如何进行线性回归建模?

线性回归的建模过程包括以下几个步骤:

  1. 数据收集和准备:收集数据,并对数据进行清洗和预处理。
  2. 数据可视化:使用图表等手段查看数据,以确定变量之间是否存在线性关系。
  3. 模型训练:使用线性回归算法拟合模型,找出最优的 wb
  4. 模型评估:通过评价指标来衡量模型的好坏,例如均方误差(MSE)。
  5. 模型预测:使用训练好的模型对新数据进行预测。

四、用Python实现线性回归

下面我们将通过Python来实现一个简单的一元线性回归模型,使用一个虚拟的数据集来说明整个过程。

4.1 导入必要的库

首先,我们需要导入一些库,这些库将帮助我们完成数据分析和建模工作。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
  • numpy:用于进行数值计算。
  • matplotlib:用于绘制数据可视化图表。
  • sklearn:一个流行的机器学习库,包含许多常用的机器学习算法和工具。

4.2 创建虚拟数据集

我们创建一个简单的数据集,其中包含自变量 x 和因变量 y,并且两者之间存在线性关系。

# 生成随机数据
np.random.seed(0)
x = 2 * np.random.rand(100, 1)
y = 4 + 3 * x + np.random.randn(100, 1)
  • np.random.seed(0):设置随机数种子,使得每次生成的随机数相同,方便实验复现。
  • x:自变量,随机生成的100个数,每个数介于0到2之间。
  • y:因变量,根据线性方程生成,加上了一些噪声(np.random.randn),以模拟实际中的数据。

4.3 数据可视化

绘制数据散点图,以便观察自变量和因变量之间是否存在线性关系。

plt.scatter(x, y, color='blue')
plt.xlabel("x")
plt.ylabel("y")
plt.title("Scatter Plot of Dataset")
plt.show()

运行上述代码后,我们将看到一个散点图,这些点大致呈现线性分布,说明可以用线性回归模型来拟合。

4.4 拆分训练集和测试集

在进行建模之前,我们将数据集拆分为训练集和测试集,以便评估模型的表现。

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
  • train_test_split:将数据随机分为训练集和测试集,test_size=0.2 表示20%的数据用于测试,80%用于训练。

4.5 训练线性回归模型

使用 scikit-learn 提供的 LinearRegression 类来拟合模型。

model = LinearRegression()
model.fit(x_train, y_train)
  • model.fit(x_train, y_train):使用训练集数据来训练线性回归模型。训练的过程就是找到最佳的 wb

4.6 查看模型的参数

训练完成后,我们可以查看模型学习到的权重和截距。

w = model.coef_[0][0]
b = model.intercept_[0]
print(f"模型的权重 w: {w}")
print(f"模型的截距 b: {b}")

这些参数就是拟合出来的直线的方程:

y = w ∗ x + b y = w * x + b y=wx+b

4.7 模型预测与评估

使用测试集对模型进行评估,并计算模型的均方误差(MSE)。

y_pred = model.predict(x_test)# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差 MSE: {mse}")
  • mean_squared_error:计算预测值和真实值之间的平均平方误差,误差越小,说明模型的拟合效果越好。

4.8 可视化拟合效果

最后,我们可以将拟合的直线绘制在散点图上,直观地看到模型的拟合效果。

plt.scatter(x, y, color='blue', label='Data')
plt.plot(x, model.predict(x), color='red', linewidth=2, label='Linear Fit')
plt.xlabel("x")
plt.ylabel("y")
plt.title("Linear Regression Fit")
plt.legend()
plt.show()

在图中,蓝色的散点是我们的原始数据,红色的直线是模型拟合出来的直线。可以看到这条直线很好地描述了数据之间的关系。

五、总结

线性回归是机器学习中最基础的算法之一,适用于那些变量之间存在线性关系的问题。通过本文的介绍,我们了解了线性回归的基本概念、数学公式以及如何用Python进行建模。掌握线性回归对于理解更复杂的机器学习和深度学习算法有很大的帮助。

5.1 学习要点

  1. 线性回归的基本形式是 y = wx + b,其中 w 是权重,b 是截距。
  2. 一元线性回归用于一个特征的情况,而多元线性回归用于多个特征的情况。
  3. 使用Python库(如 scikit-learn)可以很方便地实现线性回归模型。
  4. 训练模型时需要将数据集拆分为训练集和测试集,以便评估模型的泛化能力。

5.2 练习题

  1. 在本例中的数据上,尝试增加更多的噪声,观察模型的拟合效果会发生怎样的变化?
  2. 使用多元线性回归,尝试预测一个虚拟的房价数据集。
  3. 使用 sklearn.datasets 模块中的 load_boston 数据集,构建一个线性回归模型,预测房屋价格。

这篇文章介绍的线性回归仅仅是机器学习的一个起点,希望大家通过动手实践能够对其有更加深刻的理解。如果有任何问题,欢迎在评论中讨论!

如果您觉得本文有帮助,欢迎继续学习本专栏的其他内容,下一篇文章将为您介绍K-最近邻(KNN)算法及其Python实现。

相关文章:

【人工智能-初级】第2章 机器学习入门:从线性回归开始

文章目录 一、什么是线性回归?二、线性回归的基本概念2.1 一元线性回归2.2 多元线性回归 三、如何进行线性回归建模?四、用Python实现线性回归4.1 导入必要的库4.2 创建虚拟数据集4.3 数据可视化4.4 拆分训练集和测试集4.5 训练线性回归模型4.6 查看模型…...

SPOOLing技术详解,结合实际场景让你了解什么是假脱机技术。

SPOOLing技术 ​ 在手工操作阶段,主机直接从I/O设备获取数据,但是由于设备速度很慢,主机速度很快。人机速度矛盾明显,主机需要浪费很多时间来等待设备。 什么是脱机技术,脱机技术可以解决什么问题? 所谓脱…...

基于SSM汽车零部件加工系统的设计

管理员账户功能包括:系统首页,个人中心,员工管理,经理管理,零件材料管理,产品类型管理,产品信息管理,产品出库管理,产品入库管理 员工账号功能包括:系统首页…...

改进 JavaScript 条件语句,探索可以替代 if...else 的 7 种方式!

当优化 JavaScript 代码时,条件语句是一个经常需要思考和改进的关键部分。if...else 结构虽然是我们常用的条件语句之一,但当代码逻辑变得复杂,if...else 结构可能会导致代码冗长、难以维护和理解。因此,了解并掌握优化 if...else…...

全新子比主题7.9.2开心版 子比主题最新版源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 wordpress zibll子比主题7.9.2开心版 修复评论弹授权 可做付费下载站 含wordpress搭建视频教程zibll子比主题安装视频教程支付配置视频教程,视频都是语音讲解,…...

Kafka之消费者组与消费者

消费者(Consumer)在Kafka的体系结构中是用来负责订阅Kafka中的主题(Topic),并从订阅的主题中拉取消息后进行处理。 与其他消息中间件不同,Kafka引入一个逻辑概念——消费组(Consumer Group&…...

Damn-Vulnerable-Drone:一款针对无人机安全研究与分析的靶机工具

关于Damn-Vulnerable-Drone Damn-Vulnerable-Drone是一款针对无人机安全研究与分析的靶机工具,广大研究人员可以利用该环境工具轻松学习、研究和分析针对无人机安全态势。 Damn Vulnerable Drone 基于流行的 ArduPilot/MAVLink 架构,其中故意留下了各种…...

项目模块三:Socket模块

一、模块设计 1、套接字编程常用头文件展示 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <fcntl.h> 2、成员函数设计 &#xff08;1&#xf…...

Unity-Shader-语义

1、从程序传给顶点函数&#xff1a; POSITION&#xff1a;顶点坐标&#xff08;模型空间下&#xff09; NORMAL&#xff1a;法线向量&#xff08;模型空间下&#xff09; TANGENT&#xff1a;切线向量&#xff08;模型空间下&#xff09; TEXCOORD0~n&#xff1a;纹理坐标 …...

MFC工控项目实例二十四模拟量校正值输入

承接专栏《MFC工控项目实例二十三模拟量输入设置界面》 对模拟量输入的零点校正值及满量程对应的电压值进行输入。 1、在SenSet.h文件中添加代码 #include "BtnST.h" #include "ShadeButtonST.h"/ // SenSet dialogclass SenSet : public CDialog { // Co…...

analysis-ik分词器

analysis-ik分词器 1、安装离线在线 2、使用配置拓展词典 3、测试ik_smartik_max_word 1、安装 离线 使用离线安装下载地址https://release.infinilabs.com/analysis-ik/stable/找到对应es版本的ik分词器、下载zip后放到/elasticsearch/plugins/ik文件夹下。重启es即可生效 …...

开源的、基于内存的键值存储数据库redis详细介绍

目录 一、Redis的概述 1、概述 2、特点 &#xff08;1&#xff09;基本特性 &#xff08;2&#xff09;数据结构 &#xff08;3&#xff09;运行环境 二、Redis的重要作用 1、缓存 2、会话存储 3、消息队列 4、计数器 5、分布式锁 6、排行榜 7、实时数据处理 三、…...

三种容器 std::vector、std::map、std::unordered_set 的对比分析

目录 1.添加元素 1.1 std::vector 1.2 std::map 1.3 std::unordered_set 2. 查找元素 2.1 std::vector 2.2 std::map 2.3 std::unordered_set 3. 遍历容器 3.1 std::vector 使用范围基for循环(range-based for loop) 使用迭代器: 3.2 std::map 3.3 std::unord…...

Nuxt3 SSR 服务端渲染部署 PM2 全流程(Nest.js 同理)

项目打包 我们以 Nuxt3 项目为例子&#xff1a; 项目打包 执行 npm run build &#xff0c; 生成的 .output 文件夹就是部署产物&#xff08;目前不支持中文路径&#xff09;执行 npm run preview 可以本地预览效果 方式一&#xff1a;使用 Node 部署 需要服务器安装 Nod…...

如何轻松使用pip安装Git仓库中的私有Python模块(使用pip和Git仓库发布和安装私有Python模块)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Git模块 📒📝 Git仓库要求🔖 项目目录结构🔖 文件说明📝 编写setup.py📝 配置MANIFEST.in📝 推送代码到Git仓库📝 使用pip安装模块🔖 使用用户名和密码🔖 使用Personal Access Token (PAT)🔖 示例📝 更…...

写 R 包教程

R R 包开发 | 保姆级教程-CSDN博客 https://www.prestevez.com/post/r-package-tutorial/ 1、加载开发所需 R 包 library(usethis) library(devtools) library(roxygen2) 2、在当前工作路径创建 R 包 usethis::create_package("myRpkg") # 在当前路径创建 my…...

【java】数组(超详细总结)

目录 一.一维数组的定义 1.创建数组 2.初始化数组 二.数组的使用 1.访问数组 2.遍历数组 3.修改数据内容 三.有关数组方法的使用 1.toString 2. copyOf 四.查找数组中的元素 1.顺序查找 2.二分查找binarySearch 五.数组排序 1.冒泡排序 2.排序方法sort 六.数组逆置…...

@KafkaListener注解

KafkaListener(topics "${xxxx}", containerFactory "xxx") public void consume(String message) {service.save(xx); }在 Spring Boot 中&#xff0c;使用 KafkaListener 注解消费 Kafka 消息时&#xff0c;如果 service.save(cleanWikiSource) 抛出异…...

2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)

2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025) 2025 International Conference on Advances in Computer Vision Research and Applications 重要信息 2025年3月28-30日 南京 一轮截稿日期&#xff1a;2024年11月30日 EI检索稳定 早投稿&#xff0c;早审稿&a…...

第二代GPT-SoVITS V2:让声音克隆变得简单

随着人工智能技术的飞速发展&#xff0c;AI声音克隆已经成为一种趋势&#xff0c;广泛应用于各个领域。为了满足更多用户的需求&#xff0c;第二代GPT-SoVITS V2应运而生&#xff0c;它由RVC变声器创始人“花儿不哭”与AI音色转换技术Sovits开发者Rcell联合开发&#xff0c;是一…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...