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

K近邻回归原理详解及Python代码示例

K近邻回归原理详解

        K近邻回归(K-Nearest Neighbors Regression, KNN)是一种基于实例的学习算法,用于解决回归问题。它通过找到输入数据点在特征空间中最相似的K个邻居(即最近的K个数据点),并使用这些邻居的平均值来预测目标值。

目录

K近邻回归原理详解

1. 基本概念

2. 工作原理

3. 优点

4. 缺点

5. 实际应用

Python代码示例

代码解释


 

1. 基本概念

        KNN回归的基本思想是“相似的数据点具有相似的目标值”。它不需要显式的训练过程,而是直接在输入数据上进行预测,因此属于懒惰学习算法(Lazy Learning)。

2. 工作原理

        KNN回归的工作流程如下:

  1. 选择K值:确定用于预测的邻居数量K,这个参数对模型性能有很大影响。
  2. 计算距离:对于每个待预测的数据点,计算它与训练集中所有数据点的距离。常用的距离度量包括欧氏距离、曼哈顿距离等。
  3. 找到K个最近邻:根据计算的距离,从训练集中找到K个距离最近的数据点。
  4. 预测目标值:将这K个最近邻的数据点的目标值进行平均,得到待预测数据点的预测值。

3. 优点

  • 简单易懂:KNN回归原理简单,易于实现和理解。
  • 无需训练:KNN回归不需要训练过程,因此在数据更新时无需重新训练模型。
  • 灵活性高:KNN回归对数据分布没有假设,可以处理非线性数据。

4. 缺点

  • 计算开销大:在预测时需要计算所有训练数据点的距离,对于大规模数据集效率较低。
  • 存储需求高:需要存储所有训练数据,内存开销大。
  • 对噪声敏感:对数据中的噪声和异常值敏感,可能影响预测结果。
  • 参数选择困难:K值的选择对模型性能影响较大,需通过交叉验证等方法确定最佳K值。

5. 实际应用

        KNN回归在许多实际应用中表现良好,适用于回归、分类以及其他需要基于相似性进行预测的问题,如推荐系统、模式识别等。

Python代码示例

        以下是一个完整的Python代码示例,用于实现K近邻回归。我们将使用scikit-learn库来构建和评估模型。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error# 生成一些示例数据
np.random.seed(0)
x = np.sort(5 * np.random.rand(100, 1), axis=0)
y = np.sin(x).ravel()
y[::5] += 3 * (0.5 - np.random.rand(20))  # 添加噪声# 可视化原始数据
plt.scatter(x, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.title("Original Data")
plt.show()# 数据标准化
scaler = StandardScaler()
x_scaled = scaler.fit_transform(x)# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x_scaled, y, test_size=0.2, random_state=42)# 创建K近邻回归模型并进行拟合
knn = KNeighborsRegressor(n_neighbors=5)
knn.fit(x_train, y_train)# 预测结果
y_train_pred = knn.predict(x_train)
y_test_pred = knn.predict(x_test)# 可视化拟合结果
x_test_sorted = np.sort(x_test, axis=0)
y_test_pred_sorted = knn.predict(x_test_sorted)plt.figure()
plt.scatter(x_train, y_train, s=20, edgecolor="black", c="darkorange", label="train data")
plt.scatter(x_test, y_test, s=20, edgecolor="black", c="blue", label="test data")
plt.plot(x_test_sorted, y_test_pred_sorted, color="green", label="predictions", linewidth=2)
plt.title("K-Nearest Neighbors Regression")
plt.legend()
plt.show()# 打印模型参数和均方误差
train_mse = mean_squared_error(y_train, y_train_pred)
test_mse = mean_squared_error(y_test, y_test_pred)
print("Train Mean Squared Error:", train_mse)
print("Test Mean Squared Error:", test_mse)

代码解释

  1. 数据生成

    • 生成100个随机点,并将这些点排序。
    • 使用正弦函数生成目标值,并在部分数据上添加随机噪声以增加数据的复杂性。
  2. 数据可视化

    • 绘制生成的原始数据点,用散点图表示。
  3. 数据标准化

    • 使用StandardScaler对数据进行标准化处理,以使得输入特征具有零均值和单位方差。
  4. 数据划分

    • 将数据划分为训练集和测试集,训练集占80%,测试集占20%。
  5. 创建K近邻回归模型

    • 使用KNeighborsRegressor类构建K近邻回归模型,设置参数n_neighbors=5表示选择5个最近邻。
  6. 模型训练

    • 在训练数据上训练K近邻回归模型。
  7. 结果预测

    • 在训练集和测试集上进行预测,生成预测结果。
  8. 可视化拟合结果

    • 绘制训练数据、测试数据及模型的预测结果,观察模型的拟合效果。
  9. 模型评估

    • 计算并打印训练集和测试集的均方误差(MSE),评估模型的拟合性能。

 

相关文章:

K近邻回归原理详解及Python代码示例

K近邻回归原理详解 K近邻回归(K-Nearest Neighbors Regression, KNN)是一种基于实例的学习算法,用于解决回归问题。它通过找到输入数据点在特征空间中最相似的K个邻居(即最近的K个数据点),并使用这些邻居的…...

idea 开发工具properties文件中的中文不显示

用idea打开一个项目,配置文件propertise中的中文都不展示,如图: 可修改idea配置让中文显示: 勾选箭头指向的框即可,点击应用保存,重新打开配置文件,显示正常...

让DroidVNC-NG支持中文输入

DroidVNC-NG支持控制端输入内容,但是仅支持英文字符,如果需要控制输入法软键盘输入中文的话就没办法了,经过摸索找到了解决办法。 这个解决办法有个条件就是让DroidVNC-NG成为系统级应用(这个条件比较苛刻)&#xff…...

android dialog 显示时 activity 是否会执行 onPause onStop

当一个 Android Dialog 显示时,当前 Activity 通常不会执行 onPause 或 onStop 方法。Dialog 是附加到 Activity 上的一个窗口,它不会中断或替换当前的 Activity,因此 Activity 的生命周期方法 onPause 和 onStop 不会被调用。 然而&#xf…...

如何在MySQL中按字符串中的数字排序

在管理数据库时,我们经常遇到需要按嵌入在字符串中的数字进行排序的情况。这在实际应用中尤为常见,比如文件名、代码版本号等字段中通常包含数字,而这些数字往往是排序的关键。本文将详细介绍如何在MySQL中利用正则表达式提取字符串中的数字并…...

memcacheredis构建缓存服务器

Memcached&Redis构建缓存服务器 前言 许多Web应用都将数据保存到 RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。Memcached/redis是高性能…...

Linux基础- 使用 Apache 服务部署静态网站

目录 零. 简介 一. linux安装Apache 二. 创建网页 三. window访问 修改了一下默认端口 到 8080 零. 简介 Apache 是世界使用排名第一的 Web 服务器软件。 它具有以下一些显著特点和优势: 开源免费:可以免费使用和修改,拥有庞大的社区支…...

接口自动化测试框架实战(Pytest+Allure+Excel)

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1. Allure 简介 Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具,它不…...

如何预防和处理他人盗用IP地址?

IP地址的定义及作用 解释 IP 地址在互联网中的作用。它是唯一标识网络设备的数字地址,类似于物理世界中的邮政地址。 1、IP地址盗窃的定义 解释一下什么是IP地址盗用,即非法使用他人的IP地址或者伪造IP地址的行为,这种行为可能引发法律和安…...

【ai】李沐 动手深度学学v2 环境安装:anaconda3、pycharm、d2

cuda-toolkit cuda_12.5.0_windows_network.exe 官方课程网站 第二版资源下载release版本 pycharm版本 李沐 【动手学深度学习v2 PyTorch版】 课程笔记 CUDA 选择11, 实际下载 12.5.0...

前后端分离对软件行业及架构设计的影响

在软件开发领域,前后端分离是一种越来越流行的架构设计模式。这种方法将用户界面(前端)与服务器逻辑(后端)分离开来,允许它们独立开发、测试和部署。本文将探讨前后端分离对软件行业和架构设计的影响&#…...

深入解析Dubbo架构层次

什么是Dubbo? Dubbo是阿里巴巴开源的一款高性能优秀的服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。它的主要功能包括: 远程通信:提供高效的远程通信能力。负载均衡&#xff1…...

关于GPIO的上拉、下拉,无上下拉

1.GPIO_PULLUP(上拉) 作用和原理 作用:上拉模式会在GPIO引脚和电源电压(Vcc)之间连接一个内部上拉电阻。原理:当引脚配置为输入模式时,如果引脚没有连接到其他外部电路,内部上拉电…...

Python 语法基础二

7.常用内置函数 执行这个命令可以查看所有内置函数和内置对象(两个下划线) >>>dir(__builtins__) [__class__, __contains__, __delattr__, __delitem__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __getitem__, __gt…...

HTML5与HTML:不仅仅是标签的革新

当我们提到HTML5,很多人会想到这是HTML的一个升级版本,增加了许多新的标签和特性。然而,HTML5带来的变化远不止于此。它是一个全面的网页开发框架,重新定义了网络应用程序的构建方式,为开发者提供了前所未有的灵活性和…...

Mybatis面试学习

1.介绍一下mybatis mybatis是一个半自动的ORM的框架,ORM就是对象关系映射。(对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系)…...

el-date-picker设置时间范围

下面这种写法会报错&#xff1a;找不到expirationDate&#xff0c;这是因为涉及到this的指向问题 在普通函数中&#xff0c;this 的上下文并不指向 Vue 组件实例&#xff0c;而是取决于函数的调用方式或者是否使用了严格模式 <el-date-pickerclass"date-icon-common&q…...

Links: Challenging Puzzle Game Template(益智游戏模板)

链接:挑战益智游戏 《Links》是一款独特且具有挑战性的益智游戏,即将发布。 每个级别都会向玩家展示不同的棋盘。目标是通过移动和旋转所有棋子来连接它们。每个棋子都有自己的特点和功能-你可以移动它们,旋转它们,或者两者兼而有之。连接所有棋子,以解决难度和挑战不断增…...

java基于ssm+jsp 仓库智能仓储系统

1管理员功能模块 管理员登录&#xff0c;通过填写用户名、密码等信息&#xff0c;输入完成后选择登录即可进入智能仓储系统 &#xff0c;如图1所示。 图1管理员登录界面图 智能仓储系统 &#xff0c;在智能仓储系统可以查看个人中心、公告信息管理、员工管理、供应商管理、商…...

第24篇 滑动开关控制LED<二>

Q&#xff1a;如何使用Intel FPGA Monitor Program创建滑动开关控制LED工程并运行呢&#xff1f; A&#xff1a;创建工程的基本过程与前面的Intel FPGA Monitor Program的使用<三>一样&#xff0c;不同的地方是&#xff0c;本实验工程用到了开发板的外设硬件LED和SW&…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...