当前位置: 首页 > 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),评估模型的拟合性能。

 

http://www.lryc.cn/news/385493.html

相关文章:

  • idea 开发工具properties文件中的中文不显示
  • 让DroidVNC-NG支持中文输入
  • android dialog 显示时 activity 是否会执行 onPause onStop
  • 如何在MySQL中按字符串中的数字排序
  • memcacheredis构建缓存服务器
  • Linux基础- 使用 Apache 服务部署静态网站
  • 接口自动化测试框架实战(Pytest+Allure+Excel)
  • 如何预防和处理他人盗用IP地址?
  • 【ai】李沐 动手深度学学v2 环境安装:anaconda3、pycharm、d2
  • 前后端分离对软件行业及架构设计的影响
  • 深入解析Dubbo架构层次
  • 关于GPIO的上拉、下拉,无上下拉
  • Python 语法基础二
  • HTML5与HTML:不仅仅是标签的革新
  • Mybatis面试学习
  • el-date-picker设置时间范围
  • Links: Challenging Puzzle Game Template(益智游戏模板)
  • java基于ssm+jsp 仓库智能仓储系统
  • 第24篇 滑动开关控制LED<二>
  • Redis单例部署
  • HarmonyOS4升级到Harmonyos Next(Api 11)学习捷径
  • [电子电路学]电路分析基本概念1
  • Linux bash: /usr/local/gcc/bin/gcc: 不是目录
  • vue项目中,pnpm不能用-解决
  • 数据处理python
  • 【MotionCap】SLAHMR 在 Colab 的demo运行笔记
  • Qt-Advanced-Docking-System示例程序
  • 戴尔笔记本重装系统?笔记本卡顿失灵?一键重装系统!
  • ViewController 的常用跳转及返回方法
  • FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流