机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题

简介: 机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题

1. K 近邻算法 API

K近邻(K-Nearest Neighbors, KNN)算法作为一种基础且广泛应用的机器学习技术,其API的重要性不言而喻。它提供了快速、直接的方式来执行基于实例的学习,通过查找与待分类样本最邻近的K个样本,并基于这些邻近样本的类别来预测新样本的类别。KNN API的标准化和易用性,使得数据分析师和开发者能够轻松集成该算法到他们的项目中,无需深入算法细节,即可享受其强大的分类与回归能力。此外,KNN API通常还包含参数调整功能,如K值选择、距离度量方法等,使得用户可以根据具体需求优化算法性能,进一步凸显了其在机器学习实践中的不可或缺性。

学习目标

  1. 掌握sklearn中K近邻算法API的使用方法

1.1 Sklearn API介绍

本小节使用 scikit-learn 的 KNN API 来完成对鸢尾花数据集的预测.

  • API介绍

1.2 鸢尾花分类示例代码

鸢尾花数据集

鸢尾花Iris Dataset数据集是机器学习领域经典数据集,鸢尾花数据集包含了150条鸢尾花信息,每50条取自三个鸢尾花中之一:Versicolour、Setosa和Virginica

每个花的特征用如下属性描述:

示例代码:

from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
if __name__ == '__main__':
    # 1. 加载数据集  
    iris = load_iris() #通过iris.data 获取数据集中的特征值  iris.target获取目标值
    # 2. 数据标准化
    transformer = StandardScaler()
    x_ = transformer.fit_transform(iris.data) # iris.data 数据的特征值
    # 3. 模型训练
    estimator = KNeighborsClassifier(n_neighbors=3) # n_neighbors 邻居的数量,也就是Knn中的K值
    estimator.fit(x_, iris.target) # 调用fit方法 传入特征和目标进行模型训练
    # 4. 利用模型预测
    result = estimator.predict(x_) 
    print(result)

1.3 小结

1、sklearn中K近邻算法的对象:

from sklearn.neighbors import KNeighborsClassifier
estimator = KNeighborsClassifier(n_neighbors=3)  # K的取值通过n_neighbors传递

2、sklearn中大多数算法模型训练的API都是同一个套路

estimator = KNeighborsClassifier(n_neighbors=3) # 创建算法模型对象
estimator.fit(x_, iris.target)  # 调用fit方法训练模型
estimator.predict(x_)           # 用训练好的模型进行预测

3、sklearn中自带了几个学习数据集

  • 都封装在sklearn.datasets 这个包中
  • 加载数据后,通过data属性可以获取特征值,通过target属性可以获取目标值, 通过DESCR属性可以获取数据集的描述信息

2. K 值选择问题

K值选择问题是K近邻算法中的关键,它直接影响到算法的准确性与效率。在平衡“过拟合”与“欠拟合”需要注意:K值过小可能导致模型复杂,对新样本敏感,易于过拟合;K值过大则可能平滑类边界,忽视邻近样本的细节,造成欠拟合。因此,合理选取K值是确保K近邻算法性能的重要步骤。

学习目标

  1. 了解 K 值大小的影响
  2. 掌握 GridSearchCV 的使用

2.1 K取不同值时带来的影响

举例:

  • 有两类不同的样本数据,分别用蓝颜色的小正方形和红色的小三角形表示,而图正中间有一个绿色的待判样本。
  • 问题:如何给这个绿色的圆分类?是判断为蓝色的小正方形还是红色的小三角形?
  • 方法:应用KNN找绿色的邻居,但一次性看多少个邻居呢(K取几合适)?

解决方案:

  • K=4,绿色圆圈最近的4个邻居,3红色和1个蓝,按少数服从多数,判定绿色样本与红色三角形属于同一类别
  • K=9,绿色圆圈最近的9个邻居,6红和3个蓝,判定绿色属于红色的三角形一类。

有时候出现K值选择困难的问题

KNN算法的关键是什么?

答案一定是K值的选择,下图中K=3,属于红色三角形,K=5属于蓝色的正方形。这个时候就是K选择困难的时候。

2.2 如何确定合适的K值

K值过小:容易受到异常点的影响

k值过大:受到样本均衡的问题

K=N(N为训练样本个数):结果只取决于数据集中不同类别数量占比,得到的结果一定是占比高的类别,此时模型过于简单,忽略了训练实例中大量有用信息。

在实际应用中,K一般取一个较小的数值

我们可以采用交叉验证法(把训练数据再分成:训练集和验证集)来选择最优的K值。

2.3 GridSearchCV 的用法

使用 scikit-learn 提供的 GridSearchCV 工具, 配合交叉验证法可以搜索参数组合.

# 1. 加载数据集
x, y = load_iris(return_X_y=True)
# 2. 分割数据集
x_train, x_test, y_train, y_test = \
    train_test_split(x, y, test_size=0.2, stratify=y, random_state=0)
# 3. 创建网格搜索对象
estimator = KNeighborsClassifier()
param_grid = {'n_neighbors': [1, 3, 5, 7]}
estimator = GridSearchCV(estimator, param_grid=param_grid, cv=5, verbose=0)
estimator.fit(x_train, y_train)
# 4. 打印最优参数
print('最优参数组合:', estimator.best_params_, '最好得分:', estimator.best_score_)
# 4. 测试集评估模型
print('测试集准确率:', estimator.score(x_test, y_test))

2.4 小结

KNN 算法中K值过大、过小都不好, 一般会取一个较小的值

GridSearchCV 工具可以用来寻找最优的模型超参数,可以用来做KNN中K值的选择

K近邻算法的优缺点:

  • 优点:简单,易于理解,容易实现
  • 缺点:算法复杂度高,结果对K取值敏感,容易受数据分布影响+
目录
打赏
0
1
1
0
15
分享
相关文章
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
AI训练师入行指南(三):机器学习算法和模型架构选择
从淘金到雕琢,将原始数据炼成智能珠宝!本文带您走进数字珠宝工坊,用算法工具打磨数据金砂。从基础的经典算法到精密的深度学习模型,结合电商、医疗、金融等场景实战,手把手教您选择合适工具,打造价值连城的智能应用。掌握AutoML改装套件与模型蒸馏术,让复杂问题迎刃而解。握紧算法刻刀,为数字世界雕刻文明!
77 6
强化学习:时间差分(TD)(SARSA算法和Q-Learning算法)(看不懂算我输专栏)——手把手教你入门强化学习(六)
本文介绍了时间差分法(TD)中的两种经典算法:SARSA和Q-Learning。二者均为无模型强化学习方法,通过与环境交互估算动作价值函数。SARSA是On-Policy算法,采用ε-greedy策略进行动作选择和评估;而Q-Learning为Off-Policy算法,评估时选取下一状态中估值最大的动作。相比动态规划和蒙特卡洛方法,TD算法结合了自举更新与样本更新的优势,实现边行动边学习。文章通过生动的例子解释了两者的差异,并提供了伪代码帮助理解。
144 2
基于入侵野草算法的KNN分类优化matlab仿真
本程序基于入侵野草算法(IWO)优化KNN分类器,通过模拟自然界中野草的扩散与竞争过程,寻找最优特征组合和超参数。核心步骤包括初始化、繁殖、变异和选择,以提升KNN分类效果。程序在MATLAB2022A上运行,展示了优化后的分类性能。该方法适用于高维数据和复杂分类任务,显著提高了分类准确性。
从cURL到GraphQL:不同API类型概述
本文概述了不同API类型及其应用,帮助开发人员选择合适的工具。cURL是强大的命令行工具,适用于调试和自动化;RESTful API基于HTTP方法,适合Web服务和微服务架构;SOAP用于企业级应用,提供高安全性;GraphQL通过精确查询减少数据传输;WebSocket支持实时通信,适用于低延迟场景。了解这些API的特点和优势,有助于构建高效、可扩展的应用程序。
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。
淘宝商品详情API接口概述与JSON数据示例
淘宝商品详情API是淘宝开放平台提供的核心接口之一,为开发者提供了获取商品深度信息的能力。以下是技术细节和示例:
1688寻源通API接口概述
1688寻源通API接口是1688开放平台为采购商提供的商品/供应商搜索与匹配服务接口
淘宝拍立淘按图搜索API接口系列概述
淘宝拍立淘按图搜索API接口允许用户通过上传图片或拍摄实物来搜索相似或相同的商品。这一功能主要依赖于图像识别技术,系统会对上传的图片进行分析和处理,提取出商品的特征信息,并在淘宝的商品数据库中进行匹配搜索,最终返回与上传图片相似或相同的商品列表。
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
637 13
机器学习算法的优化与改进:提升模型性能的策略与方法

热门文章

最新文章