K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。
该方法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。
下面这幅图假设蓝色正方形表示喜欢python编程语言,红色三角形表示喜欢Java语言。
根据前面讲的KNN算法原理,猜猜绿色圆形可能喜欢哪种编程语言?
答案:Java,图形中表示的K=3,3个邻居中,2个都是喜欢Java,那么我就推断绿色的也喜欢Java。
既然是预测,肯定就不是百分百的,只是根据现有数据进行预测。
有一份保存了各地所喜欢的编程语言数据。
每一条数据包含了 经度,纬度,以及对应喜欢的语言。
我们的任务是,根据这份数据,实现一个预测模型,当给一个新的经度纬度 数据点,可以输出预测的语言。
预测结果:
加载数据:
加载好后,首先定义一个可以求两点距离的方法:
结果值越小,表示两者越近,也就是越相似(很多相似性都是通过类似的方法来判定的,比如图片相似性,可以用来搜索图片,还有推荐功能等)。
然后定义一个可以预测的方法 knn_classify,k 表示几个邻居,label_points 表示提供训练的数据,new_point 是待预测的点。
最后就可以使用了。
为了看的更加清楚,可以放到图表中显示。
原来的数据点,分别使用红绿蓝标出,黑色是预测的点。
(全文完)