KNN算法:找啊找啊找朋友

如何找朋友
KNN是昨天才刚刚接触到的算法,是一种十分基础的非监督分类算法。
个人认为它的概念最为生动的阐述就是:寻找邻居、投票计数:

想像训练集中的数据构成了一个超大的社会,其中又包含很多很多“人以类聚”的社区(人的本性之复读机)。突然有一天,一个新人(测试数据)打算移民到这个社会中,为了最快地适应到这个社会中,他要做的第一件事就是选择最适合自己社区去定居。最简单的办法就是:
首先,他与社会中的每一个人都接触、交谈一遍(计算欧氏距离),找到和自己兴趣最为贴合的K个好朋友。
其次,分析这K个好朋友都是来自哪个社区,然后选择朋友最多的社区去定居。 但这么做的后果就是效率太低。
但这么做的效率实在太低,一个聪明人不应该这么做。更为简单的方法是对整个社会进行一个结构化的划分,根据不同的特征建立一个KD树。比如,已知这个人最喜欢去海边居住,那么他就没有必要再去和一个蒙古人交谈(计算欧氏距离),这么做的时间复杂度是log(N)。

一些参考

  • 这一篇详细解释了sklearn中KNN的源码,阐述十分清楚。特别注意归一化部分。

    http://www.devtalking.com/articles/machine-learning-4/

  • KNN用于泰坦尼克号预测问题,同时也可以借此学习一下简单的数据清洗与挖掘流程
    https://blog.csdn.net/TungYu/article/details/77017068
    个人学到的东西有:

    1、进入训练模型的数据需要是数值变量,使用for循环或pd.get_dummies()函数对类型变量转换
    2、一定要对数据有足够深入的了解和挖掘,之后再构建机器学习/深度学习模型来训练

猜你喜欢

转载自blog.csdn.net/weixin_37659245/article/details/88928245