电信保温杯笔记——《统计学习方法(第二版)——李航》第3章 k近邻法
《统计学习方法(第二版)——李航》第3章k近邻法 笔记论文介绍特点模型结构相关视频相关的笔记相关代码pytorchtensorflowkeraspytorch API:tensorflow API论文《统计学习方法(第二版)——李航》 笔记原论文:《The perceptron: A probabilistic model for information storage and organizat
电信保温杯笔记——《统计学习方法(第二版)——李航》第3章 k近邻法
论文
原论文:《Nearest neighbor pattern classification》
介绍
本文是对原书的精读,会有大量原书的截图,同时对书上不详尽的地方进行细致解读与改写。
1967年1月发表的文章,提出了k近邻法,一个分类模型。给定训练样本集,并且样本集中每个数据都存在标签,输入没有标签的新数据后,提取样本集中特征前k个最相似数据(最近邻)的分类标签,k个中出现次数最多的分类,作为新数据的分类,无需显示训练。
特点
模型结构
红色问号是未知标签的输入样本,蓝色点为已知标签的训练集样本。
模型三要素
- 样本间距离的度量
- k值的选择
- 分类决策规则:这k个最近的样本以何种方式决策出输出分类
距离度量
要选出距离输入样本最近的k个训练样本,就需要一种距离度量的准则,距离反映了这2个点的相似程度。
实例
k值的选择
分类决策规则
这个区域一共k个样本, ∑ i = 1 k I ( y i ≠ c j ) \sum_{i=1}^k I(y_i \neq c_j) ∑i=1kI(yi=cj) 代表误分类次数。
k近邻算法
上式的意思是,寻找一个类别 c j c_j cj,使得多数样本都是这个分类,就是多数表决规则。
k近邻算法的实现:kd树
构造kd树
假设数据集有16个样本,每个样本拥有k维的特征,令k=3。
j为树的深度,根节点的层深度为0,那么树的深度应该为5,l作为第j层划分的特征维度,%为取模运算符,下面计算层深度与选择的特征维度:
l = j % k + 1 j = 0 , l = 0 % 3 + 1 = 1 , 选取 x ( 1 ) ; j = 1 , l = 1 % 3 + 1 = 2 , 选取 x ( 2 ) ; j = 2 , l = 2 % 3 + 1 = 3 , 选取 x ( 3 ) ; j = 3 , l = 3 % 3 + 1 = 1 , 选取 x ( 1 ) ; j = 4 , l = 4 % 3 + 1 = 2 , 选取 x ( 2 ) . l=j\%k+1 \\ j=0,l=0\%3+1=1,\text{选取}x^{(1)}; \\ j=1,l=1\%3+1=2,\text{选取}x^{(2)}; \\ j=2,l=2\%3+1=3,\text{选取}x^{(3)}; \\ j=3,l=3\%3+1=1,\text{选取}x^{(1)}; \\ j=4,l=4\%3+1=2,\text{选取}x^{(2)}. \\ l=j%k+1j=0,l=0%3+1=1,选取x(1);j=1,l=1%3+1=2,选取x(2);j=2,l=2%3+1=3,选取x(3);j=3,l=3%3+1=1,选取x(1);j=4,l=4%3+1=2,选取x(2).
实例
这个例子的讲解可以参考学生视频-KD树
搜索kd树
第一次搜索时,结果是D,而真正最近的点是E。
疑问
具体怎么搜索还是不清楚,平均搜索复杂度为什么是 O ( log N ) O(\log N) O(logN)。
相关视频
相关的笔记
hktxt /Learn-Statistical-Learning-Method
相关代码
Dod-o /Statistical-Learning-Method_Code,用了最原始的方法,遍历所有样本点计算距离,没有使用kd树。
pytorch
tensorflow
keras
pytorch API:
tensorflow API

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)