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),评估模型的拟合性能。

 

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

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

相关文章

C++11的可变参数模板

可变参数模板 什么是可变参数模板的可变参数展开参数包emplace系列函数引例emplace系列函数 什么是可变参数 printf和scanf中就涉及可变参数 这里三个点就代表可变参数,意思就是不管你传多少个参数,都可以接收 printf("%d",x); printf("…

狼牙山短视频:成都柏煜文化传媒有限公司

狼牙山短视频:记录自然与历史的交融 随着短视频的兴起,我们得以在短短几分钟内,跨越千山万水,领略世界各地的风情。成都柏煜文化传媒有限公司 而今天,我想带大家走进一个独特的地方——狼牙山,通过一系列短…

centos挂载新的磁盘

如果是vmware的话,在管理界面,为虚拟机创建一个新的磁盘,然后需要给这个磁盘分区 https://juejin.cn/post/6987200157733371935 1、执行如下命令,查询磁盘分区的UUID。 blkid 磁盘分区 以查询磁盘分区“/dev/vdb1”的UUID为例&am…

Spring Boot中的异常处理策略

Spring Boot中的异常处理策略 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Spring Boot应用程序中如何有效地处理异常,保证系统的…

Transformer教程之Transformer的历史背景

在现代人工智能领域,Transformer模型已经成为一种不可或缺的技术,它在自然语言处理(NLP)和计算机视觉等多个领域取得了巨大的成功。本文将带你回顾Transformer的历史背景,了解它是如何从最初的构想到今天的广泛应用的。…

英国Essay写作攻略怎么才算详细?

写Essay是所有英国留学生都要面对的,很多刚到英国的留学生为了拿到一个完美的成绩单,都会选择找人Essay写作,从而拿到高分。可是你有没有想过,为什么Essay写作能拿高分,而自己写的Essay一直在及格线边上徘徊&#xff0…

Element-UI表单验证 二选一、三选一、多选一验证

Element-UI表单验证二选一验证 在表单提交过程中很多时候要用到几个表单项二选一验证或多选一验证,比如联系方式中的手机号和固定电话只需要填写一项就可通过验证,针对这样情况可以使用Element-UI的自定义验证实现,具体实现方法如下。 HTML…

Web渗透:文件包含漏洞

Ⅱ.远程文件包含 远程文件包含漏洞(Remote File Inclusion, RFI)是一种Web应用程序漏洞,允许攻击者通过URL从远程服务器包含并执行文件;RFI漏洞通常出现在动态包含文件的功能中,且用户输入未经适当验证和过滤。接着我…

520. 检测大写字母 Easy

我们定义,在以下情况时,单词的大写用法是正确的: 全部字母都是大写,比如 "USA" 。 单词中所有字母都不是大写,比如 "leetcode" 。 如果单词不只含有一个字母,只有首字母大写&#xff0…

生产者发送数据,kafka服务器接收数据异常的问题记录

现象: 某个客户要求审计日志用kafka的方式传输给他们,使用了第三方的librdkafka库来开发。 往客户提供的kafka服务器上的一个topic发送数据,这个topic有三个分区,客户反馈接收到的数据和发送端发送的实际数量对不上,他…

代码随想录第五十二天打卡

647. 回文子串 动态规划解决的经典题目&#xff0c;如果没接触过的话&#xff0c;别硬想 直接看题解。 代码随想录 class Solution { public:int countSubstrings(string s) {vector<vector<bool>>dp(s.size(),vector<bool>(s.size(),false));int res0;for …

使用VMware创建Ubuntu 24.04【一】

相关链接下载地址 VMware https://www.vmware.com/content/vmware/vmware-published-sites/cn/products/workstation-pro/workstation-pro-evaluation.html.html.html Ubuntu 24.04 LTS https://cn.ubuntu.com/download/desktop 虚拟机创建 1、打开VNware软件&#xff0c;点…

5.9k!一款清新好用的后台管理系统!【送源码】

今天给大家分享的开源项目是一个优雅清新后台管理系统——Soybean Admin。 简介 官方是这样介绍这个项目的&#xff1a; Soybean Admin 使用的是Vue3作为前端框架&#xff0c;TypeScript作为开发语言&#xff0c;同时还整合了NaiveUI组件库&#xff0c;使得系统具有高可用性和…

Vue 3 的 <script setup> 语法糖中的e

在 Vue 3 的 <script setup> 语法糖中&#xff0c;可以通过直接在模板的事件监听器中访问事件对象&#xff08;通常命名为 e 或 event&#xff09;来传递它到方法。 以下是一个简单的例子&#xff0c;展示了如何在 Vue 3 的 <script setup> 中获取到 mousemove 事…

Windows 环境下 MySQL Server 清空 Log 文件命令

MySQL Community Server for Windows 下载&#xff1a; MySQL :: Download MySQL Community Server 清空 Log 文件步骤命令&#xff08;MySQL Server 8.0 为例&#xff09;&#xff1a; 1.杀掉 MySQL Workbench 进程 2.删除路径文件 C:\ProgramData\MySQL\MySQL Server 8.0\Dat…

基于YOLOv5+pyqt5的口罩佩戴检测系统(PyQT页面+YOLOv5模型+数据集)

简介 在各种工作环境和公共场所,确保人们正确佩戴口罩对个人防护和公共卫生至关重要,尤其是在医疗设施、制造业车间和拥挤的公共交通中。为了满足这一需求,我们开发了一种基于YOLOv5目标检测模型的口罩佩戴检测系统。本项目不仅实现了高精度的口罩佩戴检测,还设计了一个可…

学习提示词工程

去年 11 月 8 日&#xff0c;新加坡政府科技局&#xff08;GovTech&#xff09;组织举办了首届 GPT-4 提示工程&#xff08;Prompt Engineering&#xff09;竞赛。数据科学家 Sheila Teo 最终夺冠&#xff0c;成为最终的提示女王&#xff08;Prompt Queen&#xff09;。之后&am…

Swagger2及常用校验注释说明

Api(value "后台用户管理") RestController RequestMapping("bossuser") public class BossUserController {ApiOperation(value "测试接口")PostMapping("test")public String testUser(Valid RequestBody TestUser user) {LOG.inf…

机器学习之集成学习

一&#xff1a;概念 顾名思义集成学习就是用多个其他的算法结合起来使用 对于“其他算法”有同类和同质的区别&#xff0c;同质指的是所用的算法都是同一类型的&#xff0c;比如决策树和神经网络&#xff0c;这种也叫基学习器。反之亦然&#xff0c;但一般使用的是同质的。 …

6种高效便捷的移动硬盘加密软件,总有一款适合你

想要给自己移动硬盘内的文件/文件夹加密来保护数据隐私&#xff0c;防止重要信息泄露&#xff1f;使用电脑文件夹加密工具可以轻松帮您解决&#xff01;面对市面上众多的加密工具&#xff0c;如何选择成为一大难题。本文将为您提供一份详细的挑选指南&#xff0c;帮助您选择最合…