k近邻算法

1. 概念:

(1)KNN是通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
(2)通俗来讲KNN算法的实现是:在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,由此也说明了KNN算法的结果很大程度取决于K的选择。
(3)在KNN中,通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题,在这里距离一般使用欧氏距离:

注意:因为算法需要计算欧式距离,如果不对数据进行标准化处理,会导致(样本1-样本2)^2非常大,产生极大值对分类产生影响

2. API: sklearn.neighbors.KNeighborsClassifier

KNeighborsClassifier(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30, p=2, metric=’minkowski’, metric_params=None, n_jobs=None, **kwargs)

3. 参数设置:

首先看KNeighborsClassifier源码如下图所示


n_neighbors:int类型,表示对应K的取值
algorithm:使用不同的方式来影响算法的结果

4. 下面是使用k近邻算法预测sklearn中的鸢尾花数据集预测种类


5. KNN算法的优点:

1) 理论成熟,思想简单,既可以用来做分类也可以用来做回归
2) 训练时间复杂度比支持向量机之类的算法低,仅为O(n)
3) 和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
4) 由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合

6. KNN的主要缺点有:

1)计算量大,尤其是特征数非常多的时候
2)样本不平衡的时候,对稀有类别的预测准确率低(当存在异常值的时候)
3)使用懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢
4)相比决策树模型,KNN模型可解释性不强

0条评论