KNN 算法,以及与Kmeans的简单对比
KNN与Kmeans感觉没啥联系,但是名字挺像的,就拿来一起总结一下吧。
初学者的总结。
KNN是监督学习,Kmeans是无监督学习。
KNN用于分类,Kmeans用于聚类。
先说KNN:
对于KNN,有一批已经标注好label的训练样本,将这批样本的数据转换为向量表示,然后选择度量向量距离的方式。例如 欧式距离,曼哈顿距离,夹脚余弦等。对于这批样本记为W。
然后来一个待分类的样本S,选取W中距离样本S距离最近的K个样本。这K个样本中哪种类别的样本多,则该样本S的分类就是哪种。
KNN的优缺点:
KNN的优点:
1、对输入数据无假定,比如不会假设输入数据是服从正太分布的。
2、算法简单,直观,易于实现
3、对异常值不敏感
4、可以用于数值型数据,也可以用于离散型数据
KNN的缺点:
1、有说是计算复杂度高,不过这个是可以改进的,例如KD数,或者ball tree
2、严重依赖训练样本集,这个感觉没啥改进方法,只能是尽量获取更好的训练样本集。
3、距离度量方法,K值的选取都有比较大的影响。 KNN算法必须指定K值,K值选择不当则分类精度不能保证
4、特征作用相同 与决策树归纳方法和神经网络方法相比,传统最近邻分类器认为每个属性的 作用都是相同的(赋予相同权重)。样本的距离是根据样本的所有特征(属性)计 算的。在这些特征中,有些特征与分类是强相关的,有些特征与分类是弱相关的, 还有一些特征(可能是大部分)与分类不相关。这样,如果在计算相似度的时候, 按所有特征作用相同来计算样本相似度就会误导分类过程。
KNN的改进方向:
对于KNN分类算法的改进方法主要可以分为加快分类速度、对训练样本库的 维护、相似度的距离公式优化和K值确定四种类型。
目前我了解的只有加快分类速度,通过KD树,ball tree等。
机器学习实战 书中说 K不超过20