1-概率与学习-KNN
1. 回顾
1.1. 特征和属性
统计学角度看机器学习:得到映射函数
将原始数据通过特征工程(手工/自动)得到特征向量x,再求映射函数
属性:特征向量的每个维度
1.2. 分类问题和回归问题
分类:输出离散值,找到一个决策边界
回归:输出连续值
1.3. 距离度量/相似性度量
[[0-introduction#3.2. 距离度量函数]]
机器学习中大多是向量运算。
2. k-近邻分类器
2.1. 算法流程👍
- 计算测试样本
和 中的训练样本 之间的距离 - 对所有距离值(相似度)进行升序(降序)排序
- 选择k个最邻近(距离最小,相似度最高)的训练样本
- 采取投票法,将近邻中样本数最多的标签分配给
2.2. k的影响
- k一般是奇数,避免平局
- k不同取值,结果不同
- k太小,对噪声敏感,模型整体变得复杂,容易过拟合
- k太大,对噪声不敏感,模型整体变得简单,容易欠拟合
3. 最近邻分类器
3.1. 算法流程
k近邻的简化,选取最近的一个
- 计算测试样本
和 中的训练样本 之间的距离 - 对所有距离值(相似度)进行升序(降序)排序
- 选择最近的那个训练样本
- 标签分配给
3.2. 泛化错误率
虽然简单,但错误率不超过贝叶斯分类器的两倍
4. k-近邻回归
4.1. 算法流程👍
- 计算测试样本
和 中的训练样本 之间的距离 - 对所有距离值(相似度)进行升序(降序)排序
- 选择k个最邻近(距离最小,相似度最高)的训练样本
- 将距离值倒数作为权重,然后求k个最近邻的标签加权平均,作为
的预测值
和分类器主要区别在于回归输出是连续值。
4.2. 近邻平滑
加权平均plus,得到很好的回归模型。
- 核平滑法
- 二次核
- 次方核
- 高斯核
4.3. 讨论
- k-NN是典型的“懒惰学习”(lazy)
- 训练阶段仅仅把数据收集起来,训练开销时间为零,带收集到测试样本后再开始处理
- KVM、CNN是典型的“急切学习”(eager learning)
- 训练开销很大,但是测试时可以直接运行。尝试在训练阶段构造一个通用的、与输入无关的目标函数。
4.3.1. 优缺点
- 优点:
- 精度高
- 对异常值不敏感(k取值不一样,设置更大的k可以减少异常值的影响)
- 无数据输入假定(无训练阶段)
- 缺点
- 计算复杂度高
- 空间复杂度高
4.3.2. 时间复杂度
假设
训练阶段:
测试阶段:
Top k问题时间复杂度:
algorithm - Find the top K elements in O(N log K) time using heaps - Stack Overflow
5. 降低近邻计算
- 维度2-5:维诺图
- 维度6-30:KD-Tree
- 高维特征:
- 降维算法:如PCA
- 近似最邻近(ANN)
- 哈希
5.1. 维诺图
根据一组给定的目标,将一个平面分成靠近每一个目标的多个区块。
维诺单元定义
假设X是一个点集
5.1.1. 查询测试
5.2. KD-Tree
对K维空间中的实例点进行存储一便对其快速检索的树状数据结构
KD树是二叉树,表示对k维空间的一个划分。
Introduction to K-D Trees | Baeldung on Computer Science
5.2.1. 构造
5.3. 降维
5.4. 近似最近邻ANN
flann
5.5. 哈希
- 把任意长度的输入映射成固定长度的输入
概率化的k-NN
- 标题: 1-概率与学习-KNN
- 作者: Charlie
- 创建于 : 2023-10-10 18:10:00
- 更新于 : 2024-07-05 12:55:04
- 链接: https://chillcharlie357.github.io/posts/76a34f21/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论