轻松玩转 Scikit-Learn 系列 —— KNN 算法

简介:

scikit-learn 是最受欢迎的机器学习库之一,它提供了各种主流的机器学习算法的API接口供使用者调用,让使用者可以方便快捷的搭建一些机器学习模型,并且通过调参可以达到很高的准确率。

这次我们主要介绍scikit-learn中k近邻算法(以下简称为KNN)的使用。

KNN是一种非参数机器学习算法(机器学习中通过模型训练而学到的是模型参数,而要人工调整的是超参数,请注意避免混淆)。使用KNN首先要有一个已知的数据集D,数据集内对于任意一个未知标签的样本数据x,可以通过计算x与D中所有样本点的距离,取出与x距离最近的前k个已知数据,用该k个已知数据的标签对x进行投票,哪一类票数最多,x就是哪一类,这是kNN的大概思想,以下举个例子方便理解。

59145c471ca2ab493c62479ff97e0b852164c859

正方形该分到哪个类?

在上图中有2个已知类别——红色五角星和蓝色三角形和一个未知样本——绿色方格。现在我们要用KNN算法对绿色方格进行分类,以判定其属于这两类中的哪一类,首先令k=5,通过计算距离我们可以知道距离绿色方格最近的5个样本中(假设绿色方格位于圆心),有2个红色五角星,3个蓝色三角形。通过投票可知:蓝色三角形得3票,红色五角星得2票,因此绿色方格应该属于蓝色三角形。kNN就是这样工作的。

上图同时也引申出KNN算法的一个重要的超参数——k。举例来说,如果当k=10时,由图可以看出:红色五角星投了6票,蓝色三角形投了4票,因此未知的样本应该属于红色五角星一类。因此,我们可以看出超参数的选择会影响最终kNN模型的预测结果。下面用代码具体展示如何调用scikit-learn使用kNN,并调整超参数。

336699a1c01e5b168fbe568220c813677f2831f3

以上是利用scikit-learn中默认的k近邻模型来预测未知鸢尾花样本的种类(假装未知),我们在实例化模型的过程中并未传入任何的超参数,则kNN模型会使用模型默认的超参数。

例如:

 ●  metric='minkowski' —— 计算样本点之间距离的时候会采用明可夫斯基距离,与p=2等价
 ●  n_jobs=1 —— kNN算法支持cpu多核并行运算;n_jobs=1,默认使用一个核,当n_jobs=-1时,使用所有的核
 ●  n_neighbors=5 —— 表示k=5,即抽取未知样本附近最近的5个点进行投票
 ●  weights='uniform' —— 表示再利用最近的k个点投票时,他们的权重是等价的,当weights='distance'时,表示一个已知样本点距离未知点的距离越小,其投票时所占权重越大

还有一些其他的很重要的超参数,在这里先暂不说明,以下用代码具体展示。

f1de85c33246ca2e24d013bbfa3f632decb08f90

以下用循环来搜索下关于n_neighbors、和p这两个超参数的最优值。

3e131ccd85ce4a8d5d64f0fd787a215d63280f35

因为我们为了便于可视化,仅使用了鸢尾花数据集中的2个特征,所以导致最终预测的准确率不太高,如果使用该数据集的全部特征来训练模型并预测未知样本,传入最佳超参数的kNN模型,亲测准确度可达100%,当然这与鸢尾花数据集的高质量也有关系。运行以上代码并打印结果可得如上所示。


原文发布时间为:2018-11-21

本文作者:蜉蝣扶幽

本文来自云栖社区合作伙伴“小詹学Python”,了解相关信息可以关注“小詹学Python”。

相关文章
|
27天前
|
算法 Python
KNN
【9月更文挑战第11天】
36 13
|
25天前
|
算法 大数据
K-最近邻(KNN)
K-最近邻(KNN)
|
1月前
|
机器学习/深度学习 算法 数据挖掘
R语言中的支持向量机(SVM)与K最近邻(KNN)算法实现与应用
【9月更文挑战第2天】无论是支持向量机还是K最近邻算法,都是机器学习中非常重要的分类算法。它们在R语言中的实现相对简单,但各有其优缺点和适用场景。在实际应用中,应根据数据的特性、任务的需求以及计算资源的限制来选择合适的算法。通过不断地实践和探索,我们可以更好地掌握这些算法并应用到实际的数据分析和机器学习任务中。
|
3月前
knn增强数据训练
【7月更文挑战第27天】
29 10
|
3月前
|
机器人 计算机视觉 Python
K-最近邻(KNN)分类器
【7月更文挑战第26天】
40 8
|
3月前
创建KNN类
【7月更文挑战第22天】创建KNN类。
28 8
|
3月前
knn增强数据训练
【7月更文挑战第28天】
23 2
|
5天前
|
传感器 算法 C语言
基于无线传感器网络的节点分簇算法matlab仿真
该程序对传感器网络进行分簇,考虑节点能量状态、拓扑位置及孤立节点等因素。相较于LEACH算法,本程序评估网络持续时间、节点死亡趋势及能量消耗。使用MATLAB 2022a版本运行,展示了节点能量管理优化及网络生命周期延长的效果。通过簇头管理和数据融合,实现了能量高效和网络可扩展性。
|
2天前
|
算法 数据挖掘
基于粒子群优化算法的图象聚类识别matlab仿真
该程序基于粒子群优化(PSO)算法实现图像聚类识别,能识别0~9的数字图片。在MATLAB2017B环境下运行,通过特征提取、PSO优化找到最佳聚类中心,提高识别准确性。PSO模拟鸟群捕食行为,通过粒子间的协作优化搜索过程。程序包括图片读取、特征提取、聚类分析及结果展示等步骤,实现了高效的图像识别。
|
1月前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
下一篇
无影云桌面