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

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

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

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

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

42.jpg


正方形该分到哪个类?

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

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

43.jpg

44.jpg

👆 取鸢尾花数据集两个特征可视化

45.jpg


以上是利用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'时,表示一个已知样本点距离未知点的距离越小,其投票时所占权重越大

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

46.jpg


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

47.jpg



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

今天的分享就到这里了,关于kNN还有很多更复杂的超参数的调整,就不一一展示了,请小伙伴们自己在下面亲手操作下,会收获更多哦。kNN思想和实现简单,目前还在机器学习算法的领域持续的发光发热,如果你们中有大神路过,还请高抬贵脚,勿踩勿喷!

相关文章
|
21天前
|
机器学习/深度学习 存储 算法
用kNN算法诊断乳腺癌--基于R语言
用kNN算法诊断乳腺癌--基于R语言
|
5天前
|
机器学习/深度学习 数据采集 存储
【机器学习】K-近邻算法(KNN)全面解析
K-近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,属于监督学习范畴。它的工作原理简单直观:给定一个训练数据集,对新的输入实例,KNN算法通过计算其与训练集中每个实例的距离,找出距离最近的K个邻居,然后根据这些邻居的类别(对于分类任务)或值(对于回归任务)来预测新实例的类别或值。KNN因其简单高效和无需训练过程的特点,在众多领域中得到广泛应用,如模式识别、推荐系统、图像分类等。
160 0
|
13天前
|
机器学习/深度学习 算法
机器学习—KNN算法
机器学习—KNN算法
|
21天前
|
机器学习/深度学习 人工智能 算法
【机器学习】K-means和KNN算法有什么区别?
【5月更文挑战第11天】【机器学习】K-means和KNN算法有什么区别?
|
21天前
|
机器学习/深度学习 自然语言处理 算法
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享(下)
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享
|
21天前
|
机器学习/深度学习 算法 大数据
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享(上)
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享
|
21天前
|
机器学习/深度学习 算法 前端开发
Scikit-learn进阶:探索集成学习算法
【4月更文挑战第17天】本文介绍了Scikit-learn中的集成学习算法,包括Bagging(如RandomForest)、Boosting(AdaBoost、GradientBoosting)和Stacking。通过结合多个学习器,集成学习能提高模型性能,减少偏差和方差。文中展示了如何使用Scikit-learn实现这些算法,并提供示例代码,帮助读者理解和应用集成学习提升模型预测准确性。
|
21天前
电信公司churn数据客户流失k近邻(knn)模型预测分析
电信公司churn数据客户流失k近邻(knn)模型预测分析
|
6天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于DCT变换和位平面分解的数字水印嵌入提取算法matlab仿真
这是一个关于数字水印算法的摘要:使用MATLAB2022a实现,结合DCT和位平面分解技术。算法先通过DCT变换将图像转至频域,随后利用位平面分解嵌入水印,确保在图像处理后仍能提取。核心程序包括水印嵌入和提取,以及性能分析部分,通过PSNR和NC指标评估水印在不同噪声条件下的鲁棒性。
|
7天前
|
算法 数据安全/隐私保护 C++
基于二维CS-SCHT变换和扩频方法的彩色图像水印嵌入和提取算法matlab仿真
该内容是关于一个图像水印算法的描述。在MATLAB2022a中运行,算法包括水印的嵌入和提取。首先,RGB图像转换为YUV格式,然后水印通过特定规则嵌入到Y分量中,并经过Arnold置乱增强安全性。水印提取时,经过逆过程恢复,使用了二维CS-SCHT变换和噪声对比度(NC)计算来评估水印的鲁棒性。代码中展示了从RGB到YUV的转换、水印嵌入、JPEG压缩攻击模拟以及水印提取的步骤。