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

【Python】KNN:K-NearestNeighbor 学习指南

【Python】KNN:k-NearestNeighbor 学习指南

  • 一、基本原理
    • 1.原理简述:
    • 2.适用范围:
  • 二、KNN的优缺点分析
    • 1.优点:
    • 2.缺点:
  • 三、实现原理
  • 四、总结

一、基本原理

KNN是机器学习分类技术中最简单方法之一,属于监督学习范畴。
K最近邻,就是k个最近的邻居的意思,即每个样本都可以用它最接近的k个邻居来代表。因此KNN算法的结果很大程度取决于K的选择。

1.原理简述:

(1) 计算测试数据与各个训练数据之间的距离
(2) 按照距离的递增关系进行排序
(3) 选取距离最小的K个点
(4) 确定前K个点所在类别的出现频率
(5) 返回前K个点中出现频率最高的类别作为测试数据的预测分类 

在这里插入图片描述

2.适用范围:

由于KNN方法主要靠周围有限邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合.

二、KNN的优缺点分析

1.优点:

  1. 无需估计参数,无需训练
  2. 适合对稀有事件进行分类
  3. 适合多分类问题(对象具有多个类别标签),比SVM的表现要好

2.缺点:

  1. K难确定,该算法只计算’最近的’邻居样本。某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本
  2. 计算量和复杂度高,因为对每一个待分类的文本都要计算距离
  3. 可理解性差,无法给出像决策树那样的规则

三、实现原理


# 导入库
from sklearn.datasets import load_iris                # 用于加载鸢尾花数据集
from sklearn.neighbors import KNeighborsClassifier    # K近邻分类算法实现模块
from sklearn.model_selection import train_test_split  # 数据集划分工具(用于拆分训练集/测试集)
from sklearn.preprocessing import StandardScaler      # 数据标准化处理器(消除特征量纲差异)
from sklearn.metrics import accuracy_score            # 准确率计算函数(模型性能评估)

# 加载数据
iris = load_iris()
X, y = iris.data, iris.target

# 数据预处理(标准化)
scaler = StandardScaler()
X = scaler.fit_transform(X)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# 创建模型(K=5,使用曼哈顿距离)
knn = KNeighborsClassifier(n_neighbors=5, metric='manhattan')
knn.fit(X_train, y_train)

# 预测并评估
y_pred = knn.predict(X_test)
print(f"准确率:{accuracy_score(y_test, y_pred):.2%}")

在这里插入图片描述

四、总结

  1. 参数调优:通过交叉验证选择最优K值(参考误差率曲线)
  2. 距离度量对比:欧氏距离 vs 余弦相似度(文本分类场景更适用后者)
  3. 工程优化:使用KD树将时间复杂度从O(n)降至O(log n)
http://www.dtcms.com/a/108197.html

相关文章:

  • Vue3+Cesium+vite 入门- 项目搭建
  • HAL库 通过USB Boot进行APP程序升级
  • window11 通过cmd命令行安装 oh my zsh 的教程
  • VMware上的windows虚拟机安装使用Docker方法
  • MySQL篇(二): 核心知识深度聚簇解析:索引、非聚簇索引、回表查询、覆盖索引、超大分页处理、索引创建原则与索引失效场景
  • TDengine 权限管理与安全配置实战(二)
  • Redhat8.10 离线安装Snipe-IT v8.0.4 版本
  • 计算机网络中科大 - 第1章 结构化笔记(详细解析)
  • PostgreSQL pg_repack 重新组织表并释放表空间
  • NumPy的应用
  • 【数据结构】图的基本概念
  • 基于Django框架的基金数据可视化平台(源码+lw+部署文档+讲解),源码可白嫖!
  • 客户机用vscode连接局域网内主机
  • springboot去读yml配置文件中的属性值
  • LLM大模型学习系列——总纲
  • 瑞数信息发布《BOTS自动化威胁报告》,揭示AI时代网络安全新挑战
  • 深入解析 Java 8 Function 接口:函数式编程的核心工具
  • react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析--react17
  • Windows下部署AgentGPT
  • C/C++与JavaScript的WebAssembly编程(一)
  • RNN模型及NLP应用(5/9)——多层RNN、双向RNN、预训练
  • js防抖函数防抖无效的解决方法
  • 14.网络套接字TCP
  • 5.好事多磨 -- TCP网络连接Ⅱ
  • LabVIEW多线程
  • API vs 网页抓取:获取数据的最佳方式
  • PyTorch中.pth文件的解析及应用
  • Linux的TCP连接数到达2万,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出现什么问题
  • Python `async` 和 `asyncio` 区别; `asyncio.Lock` 和 `threading.Lock`区别
  • pyqt SQL Server 数据库查询-优化2