1.邻近算法,或k最近邻(KNN),
既能用于回归又能用于分类。是数据挖掘分类技术中最简单的方法。
所谓K最邻,就是K个最近的邻居的意思,就是说,每个样本都可以用它的最接近的k个邻居来代表。
如将房子出租时,租金为多少?看看这个房子周围 此类型的房子都租多少,求平均值以此来定租金。(若找了10个房子,则k=10,即找了10个最近的房子)此处举的例子为回归问题。
算法的实质:找邻居+投票决定(分类问题是投票决定)
2.如何找邻居?找几个邻居?如何投票?
根据距离找邻居。
距离的定义:
常用的距离:
(1)欧式距离(最常用):
(2)曼哈顿距离:
最近的邻居的个数=K值(k的值会影响结果)
投票时,根据邻居的类别判断,哪个类别的多就是哪个类别的。
3.KNN算法API参数
sklearn官网 Documentation->API,打开API,找到对应的API文档
下图中,上面一行是分类问题,下面的一行是回归问题。
以分类为例,点击上图中第一行,进入如下界面。
上图中参数解释:
n_neighbors:即为K值,最近邻居的个数。默认值为5。
weight:权重项,默认uniform方法。
(uniform:所有最近邻样本的权重都一样。一般使用这个)
(distance:权重和距离呈反比,距离越近的样本具有更高的权重)
(Callable:用户自定义权重。一般不使用)
algorithm:用于计算最近邻的算法。(一般选自动即可)
(ball_tree:球树实现)
(kd_tree:KD树实现)
(brute:暴力实现)
(auto:自动选择,权衡上述三种算法。)
leaf_size:空值KD树或者球树的参数,停止建子树的叶子节点的阈值。
p:距离的计算方式,默认为2
(p=1 为曼哈顿距离)
(p=2 为欧式距离)
metric:距离的度量方式(默认为minkowski)
度量方式很多,最常用的是曼哈顿距离和欧式距离。
metric_params:用于比较复杂的距离的度量附加参数(一般用不上)
4.KNN算法优缺点:
优点:
(1)简单,易于理解,易于实现,无需估计参数,无需训练
(2)对异常值不敏感
(3)适合对稀有事件进行分类
缺点:
(1)样本容量比较大时,要计算大量的距离,所以计算时间很长
(2)不均衡样本效果较差