概念
在一个样本空间中的k个最相似(特征空间中最近邻)的样本中的大多数属于某一个类别
API的使用
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
参数:n_neighbors
:默认为5
距离度量
1、欧式距离
即高中所学的俩点之间的距离公式
2、曼哈顿距离
用以标明两个点在标准坐标系上的绝对轴距总和
3、切比雪夫距离
是向量空间中的一种度量,二个点之间的距离定义是其各坐标数值差绝对值的最大值。类似于人走格子,直行、横行、斜行
4、闵可夫斯基距离
缺点:将各个分量的单位都相同看待,未考虑各个分量的分布(方差…)可能是不同的
5、标准化欧式距离
对数值进行标准化
6、余弦距离
高中所学的余弦定理
7、汉名距离
字符串替换所做的最小替换次数
8、杰卡德距离
K值的选择
k值的影响
过小:
易受异常点影响
整体模型变得复杂, 容易过拟合
过大:受到样本均衡问题
模型变简单
误差
近似误差:
过拟合
在训练集表现好,而测试集中表现不佳
估计误差:误差小,说明对未知数据的预测能力好,模型接近最佳
kd树
概念
原理:若A和B很远,B和C很近,则A和C也很远;
对值进行排序,然后切割,分区域
使用方法
构建树 - 最近邻搜索
eg: list = {(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)}
#### 选择x、y轴哪个方差大,就对哪个先切割
### 选择一个根节点
【1】构建树
第一次:可知x轴的方差较大
x轴 -- 2,5,9,4,8,7 --> 2,4,5,7,8,9
y轴 -- 3,4,6,7,1,2 --> 1,2,3,4,6,7
则选择x轴,找中间点【(5,4)或(7,2)】任意一个都可以
第二次:选择(7,2)
左边:(2,3),(4,7),(5,4) --> 3,4,7
右边:(8,1),(9,6) --> 1, 6
左边选(5,4),右边选(9,6)
按步选择 ...
总结
优点
- 简单有效
- 重新训练代价低
- 适合类域交叉样本
- 适合大样本自动分类
缺点
- 惰性学习
- 类别评分不是规格化
- 输出可解释性不强
- 对不均衡的样本不擅长:收集到的数据每个占比严重失衡
- 计算量较大