原来机器学习那么简单——K近邻回归

引言:
在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。


一、什么是K近邻回归?

K近邻回归(K-Nearest Neighbors Regression,简称KNN回归)是一种简单直观的机器学习算法。KNN回归通过寻找样本空间中与目标点最接近的K个邻居,利用这些邻居的平均值或加权平均值来预测目标点的值。KNN回归属于非参数模型,因为它不对数据的分布做出假设,也不需要训练过程。

二、K近邻回归的原理

KNN回归的核心思想非常直观,即“相似的样本具有相似的输出”。具体步骤如下:

  1. 计算距离:对于待预测的样本点,计算其与训练集中每一个样本点之间的距离。常用的距离度量包括欧氏距离(Euclidean Distance)、曼哈顿距离(Manhattan Distance)等。

    欧氏距离的计算公式为:
    d ( x i , x j ) = ∑ k = 1 n ( x i , k − x j , k ) 2 d(x_i, x_j) = \sqrt{\sum_{k=1}^{n} (x_{i,k} - x_{j,k})^2} d(xi,xj)=k=1n(xi,kxj,k)2
    其中,$ x_i $ 和 $ x_j $ 分别是两个样本点的特征向量,$ n $ 是特征的维数。

  2. 选择K个邻居:根据计算得到的距离,选择距离待预测样本点最近的K个邻居。

  3. 计算预测值:根据选中的K个邻居的输出值,计算待预测样本点的输出值。常用的方法包括简单平均和加权平均。如果是简单平均,则预测值为K个邻居的输出值的算术平均:

    y ^ = 1 K ∑ i = 1 K y i \hat{y} = \frac{1}{K} \sum_{i=1}^{K} y_i y^=K1i=1Kyi
    其中,$ y_i $ 是第 i i i个邻居的输出值。

    如果采用加权平均,则预测值为K个邻居的加权平均值,权重通常为邻居与待预测样本点距离的倒数:

    y ^ = ∑ i = 1 K 1 d ( x , x i ) y i ∑ i = 1 K 1 d ( x , x i ) \hat{y} = \frac{\sum_{i=1}^{K} \frac{1}{d(x, x_i)} y_i}{\sum_{i=1}^{K} \frac{1}{d(x, x_i)}} y^=i=1Kd(x,xi)1i=1Kd(x,xi)1yi
    其中,$ d(x, x_i) $ 是待预测样本点与第 $ i $ 个邻居的距离。

三、K近邻回归的优缺点

优点:

  • 简单直观:算法思想简单,容易理解和实现。
  • 无模型假设:KNN回归不对数据的分布做任何假设,适用于各种数据分布。
  • 高灵活性:由于无需训练过程,KNN回归可以处理在线学习问题,也可以随时加入新的数据。

缺点:

  • 计算复杂度高:对于大规模数据集,计算每个样本点的距离代价较高,影响预测效率。
  • 维度灾难:随着特征维数的增加,样本之间的距离变得越来越难以区分,导致预测效果下降。
  • 对异常值敏感:KNN回归直接依赖于邻居的输出值,如果邻居中存在异常值,可能会严重影响预测结果。

四、案例分析

在这一部分,我们还是使用加州房价数据集来演示如何应用K近邻回归算法进行预测。加州房价数据集包含了加州的街区信息,每个街区有多项特征,包括人口、收入、房屋年龄等。目标是根据这些特征预测该街区的房屋中位数价格。

  1. 数据加载与预处理

    • 加载加州房价数据集并进行标准化处理,确保所有特征都在相同的尺度上。
    • 将数据集划分为训练集和测试集,比例为8:2。
  2. 模型训练

    • 使用KNeighborsRegressor创建一个K近邻回归模型,选择K=5,即考虑最近的5个邻居。
    • 用训练集的数据来训练模型。
  3. 模型预测

    • 利用训练好的模型对测试集进行预测,并计算均方误差(MSE)作为模型性能的评估指标。

代码实现:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
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# 加载加州房价数据集
california = fetch_california_housing()
X = california.data
y = california.target# 数据标准化
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_pred = knn.predict(X_test)# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"测试集的均方误差: {mse:.2f}")# 可视化结果
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, edgecolor='k', alpha=0.7)
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], 'r--', lw=3)
plt.xlabel("真实房价")
plt.ylabel("预测房价")
plt.title("K近邻回归预测结果")
plt.show()

结果分析:

测试集的均方误差: 0.43。

通过散点图,可以看到模型预测的房价与真实房价之间的关系。

五、总结

K近邻回归是一种简单且易于理解的回归算法,适合用于小规模数据集或需要在线更新模型的场景。然而,在使用KNN回归时,需要考虑数据的维数和计算复杂度,并对异常值进行处理,以确保模型的预测效果。

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

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

相关文章

10.9QT对话框以及QT的事件机制处理

MouseMoveEvent(鼠标移动事件) widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 设置窗口为无边框,去掉标题栏等装饰this->setWi…

电脑缺失msvcr120.dll怎样修复,马上教你6种修复方法

在用电脑的时候,经常会碰到各种错误提示,比如“msvcr120.dll丢失”,导致的结果就是某些程序无法正常启动。那么,这个dll文件到底是啥,为什么会丢失,怎么解决呢?将通过这篇文章详细解释一下&…

智能优化算法-引力搜索优化算法(GSA)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 引力搜索优化算法 (Gravitational Search Algorithm, GSA) 是一种基于牛顿万有引力定律的元启发式优化算法,由Rashedi等人于2009年提出。GSA通过模拟天体之间的引力作用来搜索最优解,适用…

[ROS2]解决PyQt5和sip的各种报错问题 stderr: qt_gui_cpp

前言 编译ros环境的时候遇到了qt_gui_cpp各种编译问题,但是鉴于网上解决方法基本没有,故记录下来帮助后来者。整篇文章总结下来就是一句话:PyQt5和sip安装过程或安装版本有问题,需要重新安装。 问题与解决方法 如果PyQt5你是正…

P-Tuning v2:一种普遍有效的提示调整方法

人工智能咨询培训老师叶梓 转载标明出处 预训练语言模型通过微调(fine-tuning)来适应特定任务虽然效果显著,但存在训练成本高、参数存储量大等问题。为了解决这些问题,清华大学的研究者们提出了一种名为P-Tuning v2的提示调整&am…

colab+ngork本地访问多模态大模型

allenai/Molmo-7B-D-0924 1)colab准备环境,我这里用的是l4 2)安装对应的python库 !pip install transformers Pillow requests einops!pip install accelerate>0.26.0 bitsandbytes!pip install --no-deps accelerate bitsandbytes !p…

怎么将手机备忘录传送至电脑

在数字化时代,手机备忘录已成为我们生活中不可或缺的一部分。无论是记录购物清单、工作事项,还是灵感闪现的瞬间,手机备忘录都能随时记录下这些宝贵的信息,帮助我们防止遗忘。然而,有时候我们需要将这些备忘录内容转移…

数字影像技术平台推动可持续发展创意产业

在这个日新月异的数字时代,数字影像技术平台正以前所未有的力量,为可持续发展创意产业注入勃勃生机与无限可能。它们不仅是技术革新的前沿阵地,更是推动社会进步、促进文化繁荣的绿色引擎。 从高清细腻的VR体验,到震撼人心的AR互…

Tailwind Css的使用

1.Tailwind Css是什么 官网解释:Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何 模板中的 CSS 类(class)名,然后生成相应的样式代码并写入 到一个静态 CSS 文件中。 我的理解是利用Tailwind CSS 提供的…

共享单车轨迹数据分析:以厦门市共享单车数据为例(十)

副标题:共享单车与地铁站出入口分布情况探究——以厦门市为例 假期结束了,我们满血复活,继续更新! 本篇文章我们讨论共享单车与地铁出入口的关系,在上一篇文章中,我们讨论了综合得分指数最高的地铁站——…

利用可解释性技术增强制造质量预测模型

概述 论文地址:https://arxiv.org/abs/2403.18731 本研究提出了一种利用可解释性技术提高机器学习(ML)模型性能的方法。该方法已用于铣削质量预测,这一过程首先训练 ML 模型,然后使用可解释性技术识别不需要的特征并去…

安装echarts报错:request to https://registry.npmjs.org/echarts-gl failed

Hello!欢迎各位新老朋友来看小弟博客,祝大家事业顺利,财源广进!! 主题:安装echarts报错:request to https://registry.npmjs.org/echarts-gl failed 第一:报错问题:链接…

Codeforces Round 923 (Div. 3) F. Microcycle

题目 【坑点】:不能先用拓扑排序去掉“线头”,然后找权重最小的边所在的环。因为去掉线头后,可能有的边不在环内。 e.g.有六条无向边 1 - 2 , 2 - 3, 1 - 3, 4 - 5, 5 - 6, 4 - 6, 1 - 4, 边1 - 4不在环内 wa代码: #include &…

【FPGA开发】Modelsim仿真精度的坑

问题所在 最近在使用黑金的AXU3EG板卡对着正点原子ZYNQ7020的例程进行移植学习。但在编写tb代码以及使用modelsim进行仿真时出了问题,发现我的实际波形与正点的对不上,仔细测量一下波形发现,我的系统时钟是6ns周期,而不是理想中的…

儿童(青少年)可以参加哪些含金量高的比赛?

随着素质教育的推进,越来越多的家长和老师开始关注如何培养孩子的综合素质和能力。而参加各类比赛,不仅可以锻炼孩子的思维、动手能力和团队合作精神,还能帮助孩子在学习的过程中找到兴趣点和成就感。尤其是一些含金量高的比赛,不…

QT实现QMessageBox中文按钮

这是我记录Qt学习过程心得文章的第二篇,主要是为了方便QMessageBox弹出框的使用,通过自定义的方式,将其常用的功能,统一封装成一个函数,还是写在了Skysonya类里面。 实现代码: //中文提示对话框 bool Sky…

DAMA数据管理知识体系(第12章 元数据管理)

课本内容 12.1 引言 图12-1 语境关系图:元数据概念理解 元数据的信息范围很广,不仅包括技术和业务流程、数据规则和约束,还包括逻辑数据结构与物理数据结构等。它描述了数据本身(如数据库、数据元素、数据模型)&#x…

noexcept

作用 性能优化:当一个函数声明为noexcept时,编译器可以假设该函数不会抛出异常,从而避免生成与异常处理相关的额外代码。这可以减少程序的运行时开销,特别是在那些不使用异常的代码路径上。 使用 通const一样,声明和…

java动态规划背包问题

代码功能 在不超过给定背包容量(capacity)的前提下,从一系列具有特定重量(weights)和价值(values)的物品中选择若干物品,使得这些物品的总价值最大化。 类定义:定义了一…

C++实现AVL树增删查

目录 1. AVL的概念 (1)名字的由来 (2)什么是AVL树 (3)实现方法 (4)为什么高度差是1 (5)对比二叉搜索树 2. AVL树的结构 3. AVL树的功能 (1…