**提示**：此条目的主题不是**K-平均算法**。 

| 机器学习与 |
| --- |
|  |
| 范式
* 监督学习
* 無監督學習
* 線上機器學習
* 元学习（英语：）
* 半监督学习
* 自监督学习
* 强化学习
* 基于规则的机器学习（英语：）
* 量子機器學習
 |
| 问题
* 统计分类
* 生成模型
* 迴歸分析
* 聚类分析
* 降维
* 密度估计（英语：）
* 异常检测
* 数据清洗
* 自动机器学习
* 关联规则学习
* 語意分析
* 结构预测（英语：）
* 特征工程
* 表征学习
* 排序学习（英语：）
* 语法归纳（英语：）
* 本体学习（英语：）
* 多模态学习（英语：）
 |
| 监督学习(**分类** · **回归**)
* 学徒学习（英语：）
* 决策树学习
* 集成学习
	+ Bagging
	+ 提升方法
	+ 随机森林
* *k*-NN
* 線性回歸
* 朴素贝叶斯
* 人工神经网络
* 邏輯斯諦迴歸
* 感知器
* 相关向量机（RVM）
* 支持向量机（SVM）
* 迁移学习
* 微调
 |
| 聚类分析
* BIRCH
* CURE算法（英语：）
* 层次
* *k*-平均
* Fuzzy
* 期望最大化（EM）
* DBSCAN
* OPTICS
* 均值飘移（英语：）
 |
| 降维
* 因素分析
* CCA
* ICA
* LDA
* NMF（英语：）
* PCA
* PGD（英语：）
* t-SNE（英语：）
* SDL
 |
| 结构预测（英语：）
* 圖模式
	+ 貝氏網路
	+ 條件隨機域
	+ 隐马尔可夫模型
 |
| 异常检测
* RANSAC
* *k*-NN
* 局部异常因子（英语：）
* 孤立森林（英语：）
 |
| 人工神经网络
* 自编码器
* 認知計算
* 深度学习
* DeepDream（英语：）
* 多层感知器
* RNN
	+ LSTM
	+ GRU（英语：）
	+ ESN（英语：）
	+ 储备池计算（英语：）
* 受限玻尔兹曼机
* GAN
* SOM
* 卷积神经网络
	+ U-Net
* Transformer
	+ Vision transforme（英语：）
* 脉冲神经网络（英语：）
* Memtransistor（英语：）
* 电化学RAM（英语：）（ECRAM）
 |
| 强化学习
* Q学习
* SARSA
* 时序差分（TD）
* 多智能体（英语：）
	+ Self-play（英语：）
* RLHF
 |
| 与人类学习
* 主动学习（英语：）
* 众包
* Human-in-the-loop（英语：）
 |
| 模型诊断
* 学习曲线（英语：）
 |
| 数学基础
* 内核机器（英语：）
* 偏差–方差困境（英语：）
* 计算学习理论（英语：）
* 经验风险最小化
* 奥卡姆学习（英语：）
* PAC学习（英语：）
* 统计学习
* VC理论
 |
| 大会与出版物
* NeurIPS
* ICML（英语：）
* ICLR
* ML（英语：）
* JMLR（英语：）
 |
| 相关条目
* 人工智能术语（英语：）
* 机器学习研究数据集列表（英语：）
* 机器学习概要（英语：）
 |
| * 
* 论
* 编
 |

在模式识别领域中，**最近鄰居法**（**KNN**算法，又譯**K-近邻算法**）是一种用于分类和回归的無母數統計方法，由美国统计学家伊芙琳·费克斯和小約瑟夫·霍奇斯于1951年首次提出，后来由托馬斯·寇弗（英语：）扩展。在这两种情况下，输入包含特徵空間（英语：）中的***k***个最接近的训练样本。

* 在*k-NN分类*中，输出是一个分类族群。一个对象的分类是由其邻居的"多数表决"确定的，*k*个最近邻居（*k*为正整数，通常较小）中最常见的分类决定了赋予该对象的类别。若*k* = 1，则该对象的类别直接由最近的一个节点赋予。

* 在*k-NN回归*中，输出是该对象的属性值。该值是其*k*个最近邻居的值的平均值。

最近鄰居法採用向量空間模型來分類，概念為相同類別的案例，彼此的相似度高，而可以藉由計算與已知類別案例之相似度，來評估未知類別案例可能的分類。

K-NN是一种基于实例的学习（英语：），或者是局部近似和将所有计算推迟到分类之后的惰性学习（英语：）。k-近邻算法是所有的机器学习算法中最简单的之一。

无论是分类还是回归，衡量邻居的权重都非常有用，使较近邻居的权重比较远邻居的权重大。例如，一种常见的加权方案是给每个邻居权重赋值为1/ d，其中d是到邻居的距离。

邻居都取自一组已经正确分类（在回归的情况下，指属性值正确）的对象。虽然没要求明确的训练步骤，但这也可以当作是此算法的一个训练样本集。

k-近邻算法的缺点是对数据的局部结构非常敏感。

K-平均算法也是流行的机器学习技术，其名稱和k-近邻算法相近，但兩者没有关系。数据标准化可以大大提高该算法的准确性。

算法
--

*k*近邻算法例子。测试样本（绿色圆形）应归入要么是第一类的蓝色方形或是第二类的红色三角形。如果k=3（实线圆圈）它被分配给第二类，因为有2个三角形和只有1个正方形在内侧圆圈之内。如果k=5（虚线圆圈）它被分配到第一类（3个正方形与2个三角形在外侧圆圈之内）。
训练样本是多维特征空间向量，其中每个训练样本带有一个类别标签。算法的训练阶段只包含存储的特征向量和训练样本的标签。

在分类阶段，*k*是一个用户定义的常数。一个没有类别标签的向量（查询或测试点）将被归类为最接近该点的*k*个样本点中最频繁使用的一类。

一般情况下，将欧氏距离作为距离度量，但是这是只适用于连续变量。在文本分类这种离散变量情况下，另一个度量——**重叠度量**（或海明距离）可以用来作为度量。例如对于基因表达微阵列数据，*k*-NN也与Pearson和Spearman相关系数结合起来使用。通常情况下，如果运用一些特殊的算法来计算度量的话，*k*近邻分类精度可显著提高，如运用大间隔最近邻居或者邻里成分分析法。

"多数表决"分类会在类别分布偏斜时出现缺陷。也就是说，出现频率较多的样本将会主导测试点的预测结果，因为他们比较大可能出现在测试点的K邻域而测试点的属性又是通过*k*邻域内的样本计算出来的。解决这个缺点的方法之一是在进行分类时将样本到*k*个近邻点的距离考虑进去。*k*近邻点中每一个的分类（对于回归问题来说，是数值）都乘以与测试点之间距离的成反比的权重。另一种克服偏斜的方式是通过数据表示形式的抽象。例如，在自组织映射（SOM）中，每个节点是相似的点的一个集群的代表（中心），而与它们在原始训练数据的密度无关。*K*-NN可以应用到SOM中。

参数选择
----

如何选择一个最佳的K值取决于数据。一般情况下，在分类时较大的K值能够减小雜訊的影响， 但会使类别之间的界限变得模糊。一个较好的K值能通过各种启发式技术（见超参数优化（英语：））来获取。

噪声和非相关性特征的存在，或特徵尺度与它们的重要性不一致会使K近邻算法的准确性严重降低。对于选取和缩放特征来改善分类已经作了很多研究。一个普遍的做法是利用进化算法优化功能扩展，还有一种较普遍的方法是利用训练样本的互信息进行选择特征。

在二元（两类）分类问题中，选取*k*为奇数有助于避免两个分类平票的情形。在此问题下，选取最佳经验*k*值的方法是自助法。

加权最近邻分类器
--------

 k- 最近邻分类器可以被视为为 k最近邻居分配权重{\displaystyle 1/k}以及为所有其他邻居分配 0权重。这可以推广到加权最近邻分类器。也就是说，第 i近的邻居被赋予权重{\displaystyle w\_{ni}}，其中{\displaystyle \sum \_{i=1}^{n}w\_{ni}=1}。关于加权最近邻分类器的强一致性的类似结果也成立。

设{\displaystyle C\_{n}^{wnn}}表示权重为{\displaystyle \{w\_{ni}\}\_{i=1}^{n}}的加权最近邻分类器。根据类别分布的规律性条件，超额风险具有以下渐近展开

{\displaystyle {\mathcal {R}}\_{\mathcal {R}}(C\_{n}^{wnn})-{\mathcal {R}}\_{\mathcal {R}}(C^{Bayes})=\left(B\_{1}s\_{n}^{2}+B\_{2}t\_{n}^{2}\right)\{1+o(1)\},}
对常数 B\_{1} and B\_{2} 当 {\displaystyle s\_{n}^{2}=\sum \_{i=1}^{n}w\_{ni}^{2}} 并且 {\displaystyle t\_{n}=n^{-2/d}\sum \_{i=1}^{n}w\_{ni}\{i^{1+2/d}-(i-1)^{1+2/d}\}}。

最佳加权方案{\displaystyle \{w\_{ni}^{\*}\}\_{i=1}^{n}}用于平衡上面显示中的两个项，如下所示：令 {\displaystyle k^{\*}=\lfloor Bn^{\frac {4}{d+4}}\rfloor }，

{\displaystyle w\_{ni}^{\*}={\frac {1}{k^{\*}}}\left[1+{\frac {d}{2}}-{\frac {d}{2{k^{\*}}^{2/d}}}\{i^{1+2/d}-(i-1)^{1+2/d}\}\right]} 对 {\displaystyle i=1,2,\dots ,k^{\*}} 并且
{\displaystyle w\_{ni}^{\*}=0} 对 {\displaystyle i=k^{\*}+1,\dots ,n}.
利用最优权重，超额风险的渐近展开中的主项是{\displaystyle {\mathcal {O}}(n^{-{\frac {4}{d+4}}})}。当使用bagged 最近邻分类器（英语：）时，类似的结果也是如此。

属性
--

原始朴素的算法通过計算测试点到存储样本点的距离是比较容易实现的，但它属于计算密集型的，特别是当训练样本集变大时，计算量也会跟着增大。多年来，许多用来减少不必要距离评价的近邻搜索算法已经被提出来。使用一种合适的近邻搜索算法能使K近邻算法的计算变得简单许多。

近邻算法具有较强的一致性结果。随着数据趋于无限，算法保证错误率不会超过贝叶斯算法错误率的两倍。对于一些K值，K近邻保证错误率不会超过贝叶斯的。

决策边界
----

近邻算法能用一种有效的方式隐含的计算决策边界。另外，它也可以显式的计算决策边界，以及有效率的这样做计算，使得计算复杂度是边界复杂度的函数。

连续变量估计
------

K近邻算法也适用于连续变量估计，比如适用反距离加权平均多个K近邻点确定测试点的值。该算法的功能有：

1. 从目标区域抽样计算欧式或马氏距离；
2. 在交叉验证后的RMSE基础上选择启发式最优的K邻域；
3. 计算多元k-最近邻居的距离倒数加权平均。

發展
--

然而k最近鄰居法因為計算量相當的大，所以相當的耗時，Ko與Seo提出一演算法**TCFP**（**t**ext **c**ategorization using **f**eature **p**rojection），嘗試利用特徵投影法（英语：）來降低與分類無關的特徵對於系統的影響，並藉此提昇系統效能，其實驗結果顯示其分類效果與k最近鄰居法相近，但其運算所需時間僅需k最近鄰居法運算時間的五十分之一。

除了針對文件分類的效率，尚有研究針對如何促進*k*最近鄰居法在文件分類方面的效果，如Han等人於2002年嘗試利用貪心法，針對文件分類實做可調整權重的k最近鄰居法**WAkNN**（**w**eighted **a**djusted **k** **n**earest **n**eighbor），以促進分類效果；而Li等人於2004年提出由於不同分類的文件本身有數量上有差異，因此也應該依照訓練集合中各種分類的文件數量，選取不同數目的最近鄰居，來參與分類。

参见
--

* 最邻近搜索
* 聚类分析
* 数据挖掘
* 机器学习
* 模式识别
* 预测分析
* 维数灾难
* 主成分分析
* 最小哈希

參考文獻
----

### 引用

1. ↑  Altman, N. S.. The American Statistician. 1992, **46** (3): 175–185. doi:10.1080/00031305.1992.10475879.
2. ↑  Piryonesi S. Madeh; El-Diraby Tamer E.. Journal of Transportation Engineering, Part B: Pavements. 2020-06-01, **146** (2): 04020022. doi:10.1061/JPEODX.0000175.
3. ↑  Hastie, Trevor.. Tibshirani, Robert. Friedman, J. H. (Jerome H.). New York: Springer. 2001. ISBN 0-387-95284-5. OCLC 46809224.
4. ↑  Jaskowiak, P. A.; Campello, R. J. G. B.. Brazilian Symposium on Bioinformatics (BSB 2011): 1–8. CiteSeerX 10.1.1.208.993 可免费查阅.
5. ↑  D. Coomans; D.L. Massart.. Analytica Chimica Acta. 1982, **136**: 15–27. doi:10.1016/S0003-2670(01)95359-0.
6. ↑  Everitt, B. S. Landau, S. Leese, M. and Stahl, D.（2011）Miscellaneous Clustering Methods, in Cluster Analysis, 5th Edition, John Wiley & Sons, Ltd, Chichester, UK.
7. ↑  Nigsch F, Bender A, van Buuren B, Tissen J, Nigsch E, Mitchell JB (2006). "Melting point prediction employing k-nearest neighbor algorithms and genetic parameter optimization". Journal of Chemical Information and Modeling 46 (6): 2412–2422. doi:10.1021/ci060149f. PMID 17125183.
8. ↑  Hall P, Park BU, Samworth RJ.. Annals of Statistics. 2008, **36** (5): 2135–2152. doi:10.1214/07-AOS537.
9. ↑  Stone C. J.. Annals of Statistics. 1977, **5** (4): 595–620. doi:10.1214/aos/1176343886.
10. ↑  Samworth R. J.. Annals of Statistics. 2012, **40** (5): 2733–2763. arXiv:1101.5783 可免费查阅. doi:10.1214/12-AOS1049.
11. ↑  Cover TM, Hart PE (1967). "Nearest neighbor pattern classification". IEEE Transactions on Information Theory 13 (1): 21–27. doi:10.1109/TIT.1967.1053964.
12. ↑  Bremner D, Demaine E, Erickson J, Iacono J, Langerman S, Morin P, Toussaint G (2005). "Output-sensitive algorithms for computing nearest-neighbor decision boundaries". Discrete and Computational Geometry 33 (4): 593–604. doi:10.1007/s00454-004-1152-0

### 来源

* E. H. Han, G. Karypis and V. Kumar, Text categorization using weight adjusted k-Nearest Neighbor classification, Pacific-Asia Conference on Knowledge Discovery and Data Mining, pp. 53–65, 2001.
* Y. J. Ko and Y. J. Seo, Text categorization using feature projections, Proceedings of the Nineteenth international conference on Computational linguistics, Volume 1, pp. 1–7, 2002.
* B. L. Li, Q. Lu and S. W. Yu, An adaptive k-nearest neighbor text categorization strategy, ACM Transactions on Asian Language Information Processing, Volume 3 , Issue 4, pp. 215–226, 2004.

}}

拓展阅读
----

* When Is "Nearest Neighbor" Meaningful?（页面存档备份，存于）
* Belur V. Dasarathy (编).. 1991. ISBN 0-8186-8930-7.
* Shakhnarovish, Darrell, and Indyk (编).. MIT Press. 2005. ISBN 0-262-19547-X.
* Mäkelä H Pekkarinen A.. Forest Ecology and Management. 2004-07-26, **196** (2–3): 245–255. doi:10.1016/j.foreco.2004.02.049.
* Fast k nearest neighbor search using GPU. In Proceedings of the CVPR Workshop on Computer Vision on GPU, Anchorage, Alaska, USA, June 2008. V. Garcia and E. Debreuve and M. Barlaud.
* Scholarpedia article on *k*-NN （页面存档备份，存于）
* google-all-pairs-similarity-search （页面存档备份，存于）