KNN算法简述

本文摘自:https://blog.youkuaiyun.com/lx85416281/article/details/40656877

1、KNN概念描述

kNN算法又称为k最近邻(k-nearest neighbor classification)分类算法。所谓的k最近邻,就是指最接近的k个邻居(数据),即每个样本都可以由它的K个邻居来表达。

kNN算法的核心思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。
该算法涉及3个主要因素:训练集、距离与相似的衡量、k的大小;

主要考虑因素:距离与相似度的;


2、举例说明

右图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?

如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。



3、算法特点

KNN算法不仅可以用于分类,还可以用于过渡,比如在两个色度之间取过渡色。

KNN算法当前主要使用加权投票法,即根据距离的远近,对近邻的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)。

优点:易于实现,无需估计参数,无需训练,支持增量学习,能对超多边形的复杂决策空间建模;

缺点:就是计算量较大,分析速度慢


4、常见问题

4.1、k值设定为多大?

 k太小,分类结果易受噪声点影响;k太大,近邻中又可能包含太多的其它类别的点。(对距离加权,可以降低k值设定的影响)k值通常是采用交叉检验来确定(以k=1为基准)经验规则:k一般低于训练样本数的平方根


4.2、类别如何判定最合适?

投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当一些。


4.3、如何选择合适的距离衡量?

高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差。变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化。


4.4、训练样本是否要一视同仁?

在训练集中,有些样本可能是更值得依赖的。可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响。


4.5、性能问题?

kNN是一种懒惰算法,平时不好好学习,考试(对测试样本分类)时才临阵磨枪(临时去找k个近邻)。懒惰的后果:构造模型很简单,但在对测试样本分类地的系开销大,因为要扫描全部训练样本并计算距离。已经有一些方法提高计算的效率,例如压缩训练样本量等。


4.6、能否大幅减少训练样本量,同时又保持分类精度?
浓缩技术(condensing)、

编辑技术(editing)、

5、提高分类效率的改进算法

KNN 算法的主要缺点是, 当训练样本数量很大时将导致很高的计算开销。KNN 算法是懒散的分类算法, 对于分类所需的计算都推迟到分类时才进行, 在其分类器中存储有大量的样本向量, 在未知类别样本需要分类时, 再计算和所有存储样本的距离, 对于高维文本向量或样本集规模较大的情况, 其时间和空间复杂度较高。

特征降维&模式聚合:(在精度下降有限的前提下,降低维度,减少算法的计算量)

基于 Fuzzy ART 的 K- 最近邻分类改进算法,该算法用模糊自适应共振理论(Fuzzy ART)对 K- 最近邻的训练样本集进行浓缩, 以改善 K- 最近邻的计算速度。{就是对样本的维度进行简化,提取出特征明显的维度进行计算}


CHI 概率统计方法进行初步特征提取和模式聚合;(如果某一维在各个类别中取值基本相同, 那么此维对于文本分类的贡献率就相对较低, 如果在各个类别中取值有较大的差异, 那么就具有较强的文本分类能力, 而方差正好是反应变量分布均匀状态的主要指标。)可引入CLA(Classifier’s Local Accuracy)技术进行分类可信度分析以实现两种算法的融合

### 关于KNN算法的PPT资料下载 目前无法直接提供具体的PPT文件下载链接,但可以指导如何制作一份高质量的KNN算法PPT,并基于已有参考资料[^1][^2]整理相关内容。 以下是构建KNN算法PPT的主要框架: #### 1. **概述** - 简述什么是KNN算法及其应用场景。 - KNN是一种简单有效的监督学习方法,用于分类和回归任务。其核心思想是通过已知样本的距离来预测未知样本所属类别或数值。 #### 2. **算法逻辑** - 描述KNN的工作原理。 - 输入待分类的数据点,计算它与训练集中所有数据点之间的距离;选取距离最小的前K个邻居;根据多数投票原则决定该数据点的类别[^2]。 #### 3. **实现步骤** - 数据收集:明确所需特征并获取相应数据集。 - 数据准备:清洗、标准化处理原始数据以便后续操作更加高效准确。 - 参数设定(K值):合理选择近邻数量直接影响最终效果的好坏。 - 距离度量:采用不同类型的测距方式如欧几里得(Euclidean),曼哈顿(Manhattan),切比雪夫(Chebyshev)或者明可夫斯基(Minkowski)。 #### 4. **关键要素** - 阐述影响模型性能的关键因素——K值得当与否会显著改变结果质量; - 较小的K容易引起过拟合现象而较大的K可能导致欠拟合情况发生。 - 各种距离公式的定义及适用场景分析: ```python import numpy as np def euclidean_distance(x, y): return np.sqrt(np.sum((x-y)**2)) def manhattan_distance(x, y): return np.abs(x-y).sum() def chebyshev_distance(x, y): return np.max(np.abs(x-y)) def minkowski_distance(x, y, p=2): return (np.sum(np.abs(x-y)**p))**(1/p) ``` #### 5. **工具库应用** - 推荐使用`scikit-learn`中的现成函数简化开发流程: - `KNeighborsClassifier`: 实现多分类功能。 - 主要参数解释如下表所示: | 参数名 | 默认值 | 功能描述 | |-----------------|-----------|--------------------------------------------------------------------------| | n_neighbors | 5 | 定义考虑多少个最近邻节点 | | weights | 'uniform' | 权重分配策略,默认均匀分布也可设置为按距离倒数加权 | | algorithm | 'auto' | 自动挑选合适的索引结构加速查询过程 | 示例代码片段展示基本调用形式: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier iris = load_iris() X_train, X_test, y_train, y_test = train_test_split( iris.data, iris.target, test_size=0.2, random_state=42 ) scaler = StandardScaler().fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) knn_clf = KNeighborsClassifier(n_neighbors=3) knn_clf.fit(X_train_scaled, y_train) accuracy = knn_clf.score(X_test_scaled, y_test) print(f'Test Accuracy: {accuracy:.2%}') ``` #### 6. **案例分享** - 结合实际例子加深理解比如手写数字识别MNIST数据库上的表现评估等等. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值