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

【机器学习|学习笔记】 K近邻算法(K Nearest Neighbour,KNN )详解,附代码。

【机器学习|学习笔记】 K近邻算法(K Nearest Neighbour,KNN )详解,附代码。

【机器学习|学习笔记】 K近邻算法(K Nearest Neighbour,KNN )详解,附代码。


文章目录

  • 【机器学习|学习笔记】 K近邻算法(K Nearest Neighbour,KNN )详解,附代码。
  • 前言
    • 📜 起源与发展
    • ⚙️ 原理解析
    • 🧠 应用领域
    • 🐍 Python实现示例


欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/147567533


前言

K-最近邻(K-Nearest Neighbors,KNN)算法是一种经典的非参数监督学习方法,广泛应用于分类和回归任务。其核心思想是:给定一个新的样本,找到训练集中与其最接近的K个样本,并根据这些邻居的标签来预测该样本的类别或数值。

📜 起源与发展

  • 起源:KNN算法最早由Evelyn Fix和Joseph Hodges于1951年在为美国空军进行的研究中提出,旨在进行非参数判别分析
  • 发展:1967年,Thomas Cover和Peter Hart在其论文中进一步扩展了KNN方法,提出了“最近邻模式分类”的概念,使其成为模式识别领域的重要方法
  • 改进:随着研究的深入,KNN算法出现了多种变体,如加权KNN、模糊KNN(Fuzzy KNN)等,以提高其在不同应用场景下的性能。

⚙️ 原理解析

  • 距离度量:常用的距离度量包括欧氏距离、曼哈顿距离等,用于衡量样本之间的相似性。

  • 选择K值:K值的选择对模型性能有重要影响。较小的K值可能导致模型对噪声敏感,而较大的K值则可能使模型过于平滑,忽略局部结构。

  • 预测机制分类任务:通过多数投票法,即选择K个邻居中出现频率最高的类别作为预测结果。回归任务:取K个邻居的数值平均值作为预测结果。

  • 权重分配:为了提高预测精度,可以根据距离对邻居赋予不同的权重,距离越近的邻居权重越大。

🧠 应用领域

  • 文本挖掘:用于文本分类、情感分析等任务。
  • 图像识别:在手写数字识别、人脸识别等领域表现良好。
  • 推荐系统:如Netflix、Amazon等平台利用KNN进行个性化推荐。
  • 金融分析:用于信用评分、风险评估等。
  • 医疗诊断:辅助疾病预测和诊断。

🐍 Python实现示例

以下是使用scikit-learn库实现KNN分类的示例代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score# 生成示例数据
X, y = make_classification(n_samples=500, n_features=2, n_informative=2,n_redundant=0, n_clusters_per_class=1, random_state=42)# 数据标准化
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.3, random_state=42)# 创建KNN分类器
k = 5
knn = KNeighborsClassifier(n_neighbors=k)# 训练模型
knn.fit(X_train, y_train)# 预测
y_pred = knn.predict(X_test)# 评估准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型在测试集上的准确率:{accuracy:.2f}")# 可视化决策边界
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormaph = .02  # 网格步长
x_min, x_max = X_scaled[:, 0].min() - 1, X_scaled[:, 0].max() + 1
y_min, y_max = X_scaled[:, 1].min() - 1, X_scaled[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.figure(figsize=(8,6))
plt.contourf(xx, yy, Z, cmap=ListedColormap(['#FFAAAA', '#AAAAFF']), alpha=0.8)
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=y, edgecolor='k', cmap=ListedColormap(['#FF0000', '#0000FF']))
plt.title(f"KNN分类器 (k={k})")
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.show()
  • 该代码首先生成一个二维的分类数据集,并对其进行标准化处理。然后,使用KNN算法进行训练和预测,并评估模型在测试集上的准确率。最后,绘制出KNN分类器的决策边界,以可视化模型的分类效果
http://www.xdnf.cn/news/6606.html

相关文章:

  • 从银行排队到零钱支付:用“钱包经济学”重构Java缓存认知
  • LLaMA-Factory微调大模型Qwen2.5
  • 【设计模式】- 行为型模式1
  • 利用 Amazon Bedrock Data Automation(BDA)对视频数据进行自动化处理与检索
  • 2025年PMP 学习十六 第11章 项目风险管理 (总章)
  • IDEA中springboot项目中连接docker
  • upload-labs通关笔记-第7关 文件上传之空格绕过
  • Qwen3技术报告解读
  • 基于springboot+vue的机场乘客服务系统
  • 基于“岗课赛证”融通的中职“综合布线技术”课程解决方案
  • Pywinauto:轻松实现Windows桌面自动化实战
  • Python模块化编程进阶指南:从基础到工程化实践
  • Acronis True Image 2025 中文版深度评测:全能系统备份与灾难恢复解决方案
  • HTML常用标签用法全解析:构建语义化网页的核心指南
  • 大模型在数据分析领域的研究综述
  • Detected for tasks ‘compileDebugJavaWithJavac‘ (17) and ‘kspDebugKotlin‘ (21).
  • 0x08.Redis 支持事务吗?如何实现?
  • asp.net IHttpHandler 对分块传输编码的支持,IIs web服务器后端技术
  • C#进阶(2)stack(栈)
  • linux环境下 安装svn并且创建svn版本库详细教程
  • 自媒体工作室如何矩阵?自媒体矩阵养号策略
  • 嵌入式学习笔记 - STM32 ADC 模块工作模式总结
  • 【解决分辨数字】2021-12-16
  • React学习———CSS Modules(样式模块化)
  • Go语言处理HTTP下载中EOFFailed
  • Spring WebFlux与Quarkus实战:云原生微服务开发的两大主流框架深度解析
  • STM32CubeMX使用SG90舵机角度0-180°
  • Rust 学习笔记:关于 String 的练习题
  • python中集合的操作
  • MySQL 与 FastAPI 交互教程