统计学习方法笔记 -- KNN

简介:

K近邻法(K-nearest neighbor,k-NN),这里只讨论基于knn的分类问题,1968年由Cover和Hart提出,属于判别模型 
K近邻法不具有显式的学习过程,算法比较简单,每次分类都是根据训练集中k个最近邻,通过多数表决的方式进行预测。所以模型需要保留所有训练集数据,而象感知机这样的模型只需要保存训练后的参数即可,训练集不需要保留

K近邻算法

image

K近邻法三要素 
和其他统计学习方法不同的,K近邻法的三要素是,k值的选择,距离度量和分类决策规则

距离度量 
首先如何定义“近”?需要通过距离度量,比如最常见的欧氏距离 
下面这个比较清楚,欧氏距离只是p=2的case,也称为L2距离

image

K值的选择 
选取比较小的k值(较复杂的模型),近似误差(approximation error)会减小,而估计误差(estimation error)会增大,因为影响分类的都是比较近的样本,但一旦出现噪点,预测就会出错 
选取比较大的k值(较简单的模型),相反,减小噪点的影响,但是较远或不相似的样本也会对结果有影响,极限情况下k=N,考虑所有样本,极简模型 
k一般会选取比较小的值,通常采用交叉验证来选取最优的k值

分类决策规则 
往往采用多数表决,但是也可以采用其他的策略

kd树

对于knn有个根本问题是,当训练集比较大时,线性的扫描效率是很低的,需要更为高效的方法来找到k近邻,这里介绍的kd数是二叉树,其实就是以二分的方式查找,将复杂度由n变小为logn。 
那么关键问题就是,如何能够二分的索引训练点和给定任意一个点如何从kd树中找到最近邻?

构造kd树 
基本思路,循环的以k维空间中的每一维对训练数据进行划分 
划分标准,往往是使用训练集在该维上的中位数进行划分,具体看下下面的例子 
使用中位数可以保证树是平衡的,但不一定效率最优

image 
image

例子, 
首先用x维划分,中位数为7,(7,2)放在节点上 
(2,3) (4,7) (5,4)划分到左子树,而(8,1) (9,6)划分到右子树 
然后用y维进行划分, 
对于左边区域,y维的中位数为4,(4,7)放在节点上,(2,3) (5,4)分布划分到两个子树 
对于右边区域,y维的中位数为6。。。 
然后再用x维进行划分。。。 
image

image

搜索kd树 
对于搜索k邻近,就是k次搜索最邻近,所以直接看下最邻近的搜索算法 
例子学习, 
首先找到包含S的那个叶节点,这里是D,那么以SD为半径画个圆,有可能包含更近节点的区域一定会和这个圆相交,相交不一定有,但不相交一定没有 
所以下面做的只是往根节点回溯, 
首先B,B本身不是更近的节点,而B的另一个子节点F的区域和圆不相交 
继续回溯到A,A不是,但A的另一个子节点C的区域是和圆相交的 
所以需要checkA的C节点,C本身不是,G的区域不相交,但E的区域相交 
并且E到S的距离更近,故E是最邻近节点

image

image


本文章摘自博客园,原文发布日期:2014-03-18

目录
相关文章
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
203 6
|
4月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
87 3
|
4月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
100 1
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
332 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
4月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
74 0
|
4月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
73 0
|
4月前
|
算法
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
53 0
|
4月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
158 0
|
3月前
|
存储 算法 安全
SnowflakeIdGenerator-雪花算法id生成方法
SnowflakeIdGenerator-雪花算法id生成方法
64 1
|
3月前
|
JSON 算法 数据挖掘
基于图论算法有向图PageRank与无向图Louvain算法构建指令的方式方法 用于支撑qwen agent中的统计相关组件
利用图序列进行数据解读,主要包括节点序列分析、边序列分析以及结合节点和边序列的综合分析。节点序列分析涉及节点度分析(如入度、出度、度中心性)、节点属性分析(如品牌、价格等属性的分布与聚类)、节点标签分析(如不同标签的分布及标签间的关联)。边序列分析则关注边的权重分析(如关联强度)、边的类型分析(如管理、协作等关系)及路径分析(如最短路径计算)。结合节点和边序列的分析,如子图挖掘和图的动态分析,可以帮助深入理解图的结构和功能。例如,通过子图挖掘可以发现具有特定结构的子图,而图的动态分析则能揭示图随时间的变化趋势。这些分析方法结合使用,能够从多个角度全面解读图谱数据,为决策提供有力支持。
157 0

热门文章

最新文章