定义:判断一个样本在特征空间中的k个最相似(在特征空间中最邻近)的样本中大多数类别属于哪一个类别,则该样本也属于这个类别。
算法流程:
- 计算已知类别数据集中的点与当前点之间的举例
- 按距离递增次序排序
- 选取与当前点距离最小的k个点
- 统计前k个点所在的类别出现的频率
图解:
说明:橙色圆形是一类,红色正方形是一类,判断绿色三角形是那一个类别
knn算法的判断:通过寻找绿色三角形最近的k个目标,统计k个目标中出现概率最高的类别来决定绿色三角形的类别
距离公式
欧氏距离
二维平面中两个样本之间的距离计算:
d
=
(
x
1
−
x
2
)
2
+
(
y
1
−
y
2
)
2
d=\sqrt{(x_{1}-x_{2})^{2} +(y_{1}-y_{2})^{2}}
d=(x1−x2)2+(y1−y2)2
三维空间中两个样本之间的距离计算:
d
=
(
x
1
−
x
2
)
2
+
(
y
1
−
y
2
)
2
+
(
z
1
−
z
2
)
2
d=\sqrt{(x_{1}-x_{2})^{2} +(y_{1}-y_{2})^{2}+(z_{1}-z_{2})^{2}}
d=(x1−x2)2+(y1−y2)2+(z1−z2)2
n维空间中两个样本之间的距离计算:
d
=
∑
k
=
1
n
(
x
1
k
−
x
2
k
)
2
d=\sqrt{\sum_{k=1}^{n}(x_{1k}-x_{2k})^{2} }
d=k=1∑n(x1k−x2k)2
曼哈顿距离
二维平面两点之间的曼哈顿距离公式:
d
=
∣
x
1
−
x
2
∣
+
∣
y
1
−
y
2
∣
d = |x_{1}-x_{2}|+|y_{1}-y_{2}|
d=∣x1−x2∣+∣y1−y2∣
n维平面两点之间的曼哈顿距离公式:
d
=
∑
k
=
1
n
∣
x
1
k
−
x
2
k
∣
d =\sum_{k=1}{n}|x_{1k} - x_{2k}|
d=k=1∑n∣x1k−x2k∣
切比雪夫距离
二维平面两点之间的切比雪夫距离公式:
d
=
m
a
x
(
x
1
−
x
2
∣
,
∣
y
1
−
y
2
∣
)
d = max(x_{1}-x_{2}|,|y_{1}-y_{2}|)
d=max(x1−x2∣,∣y1−y2∣)
n维平面两点之间的切比雪夫距离公式:
d
=
m
a
x
(
x
1
l
−
x
2
l
∣
)
d =max(x_{1l}-x_{2l}|)
d=max(x1l−x2l∣)
闵可夫斯基距离
可以表示某一类/组的距离(但是不考虑方差、期望等)
d = ∑ k = 1 n ∣ x 1 k − x 2 k ∣ p p d=\sqrt[p]{\sum_{k=1}^{n}|x_{1k}-x_{2k}|^{p} } d=pk=1∑n∣x1k−x2k∣p
p是一个变量:
p=1:曼哈顿距离
p=2:欧氏距离
p->∞:切比雪夫距离
简单快速的api
下载数据集和封装好的集成库
pip install scikit-learn==1.1.2
conda install scikit-learn==1.1.2
使用方法:(knn在sklearn中封转好的使用方式)
import sklearn
sklearn.neighbors.KNeighborsClassifler(n_neighbor= )
# n_neighbor: k值
k值的选择
k值较小:
- 容易受到异常点的影响
- 容易发生过拟合现象
- 估计误差增大,近似误差会减少
k值较大:
- 容易受到样本均衡的影响
- 容易发生欠拟合的问题
- 近似误差增大,估计误差会减少
k值得选取注意事项
- 取双不取单(特征样本如果是奇数,二分类会出现既不也不的情况)
- 不能太大也不能太小