使用Python实现K-Nearest Neighbor算法

K-Nearest Neighbor(KNN)可以翻译为K最近邻算法,是机器学习中最简单的分类算法。为了更好的理解这个算法,本帖使用Python实现这个K-Nearest Neighbor算法 ,最后和scikit-learn中的k-Nearest Neighbor算法进行简单对比。

KNN算法基本原理

假设我有如下两个数据集:

使用Python实现k-Nearest Neighbor算法

上面画出了两组数据点:black,red。假设你在上图任意添加一个点,如(3.5, 5.3),KNN的任务就是判断这个点(下图中的绿点)该划分到哪个组。

使用Python实现k-Nearest Neighbor算法

KNN分类算法超级简单:只需使用初中所学的两点距离公式(欧拉距离公式),计算绿点到各组的距离,看绿点和哪组更接近。K代表取离绿点最近的k个点,这k个点如果其中属于红点个数占多数,我们就认为绿点应该划分为红组,反之,则划分为黑组。

如果有两组数据(如上图),k值最小应为3;如果有三组数据(如下图),k值最小应为5。scikit-learn默认k值为5。

使用Python实现k-Nearest Neighbor算法

上面使用的是二维数据,同样的逻辑可以推广到三维或任意纬度。

除了K-Nearest Neighbor之外还有其它分组的方法,如Radius-Based Neighbor。

使用Python实现KNN算法

执行结果:

使用Python实现k-Nearest Neighbor算法

使用现实数据测试上面实现的knn算法

数据集(Breast Cancer):https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Original%29

数据集字段:

使用Python实现k-Nearest Neighbor算法

我们的任务是使用knn分类数据,预测肿瘤是良性的还是恶性的。

代码:

执行结果:

使用scikit-learn中k邻近算法

执行结果:

scikit-learn中的算法和我们上面实现的算法原理完全一样,只是它的效率更高,支持的参数更全。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注