轻松玩转 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”。

相关文章
|
1月前
|
机器学习/深度学习 算法 数据库
KNN和SVM实现对LFW人像图像数据集的分类应用
KNN和SVM实现对LFW人像图像数据集的分类应用
34 0
|
3月前
|
算法
KNN分类算法
KNN分类算法
107 47
|
3月前
|
算法
KNN算法及其优缺点
KNN算法及其优缺点
76 0
|
8天前
|
机器学习/深度学习 算法 前端开发
Scikit-learn进阶:探索集成学习算法
【4月更文挑战第17天】本文介绍了Scikit-learn中的集成学习算法,包括Bagging(如RandomForest)、Boosting(AdaBoost、GradientBoosting)和Stacking。通过结合多个学习器,集成学习能提高模型性能,减少偏差和方差。文中展示了如何使用Scikit-learn实现这些算法,并提供示例代码,帮助读者理解和应用集成学习提升模型预测准确性。
|
9天前
电信公司churn数据客户流失k近邻(knn)模型预测分析
电信公司churn数据客户流失k近邻(knn)模型预测分析
18 0
|
3月前
KNN中KD树的查询操作
KNN中KD树的查询操作
25 0
|
3月前
|
存储 算法
KD树(KNN的plus版
KD树(KNN的plus版
22 0
|
3月前
|
存储 算法 搜索推荐
K-最近邻算法(KNN)是什么?
K-最近邻算法(K-Nearest Neighbor,KNN)是一种经典的有监督学习方法,也可以被归为懒惰学习(Lazy Learning)方法。它基于“物以类聚”的原理,假设样本之间的类别距离越近则它们越有可能是同一类别。 KNN算法的工作原理简单且直观,当需要将一个测试样本分类时,它首先会计算测试样本与所有训练样本之间的距离,然后根据距离的递增关系进行排序。接着,它会选择距离最小的前K个样本,并统计这K个最近邻样本中每个样本出现的次数。最后,它会选择出现频率最高的类标号作为未知样本的类标号。 在KNN算法中,K值的选择是关键。如果K值较小,只有当需要进行预测的样本和训练的样本较接近时,才能
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真