Python 与 sklearn 库:轻松构建 KNN 算法双版本

server/2025/3/15 16:15:36/

引言​

k 最近邻(kNN)算法是一种简单而强大的机器学习算法,常用于分类和回归任务。在 Python 中,借助 scikit - learn(sklearn)库,我们可以轻松实现 kNN 算法。本文将为大家介绍两种使用 sklearn 库构建 kNN 算法的版本。​

环境准备​

在开始之前,请确保你已经安装了 Python 和 scikit - learn 库。如果没有安装,可以通过以下命令进行安装:​

python">pip install numpy scikit - learn​

numpy 是 scikit - learn 的依赖库,在许多机器学习任务中也会用到。​

基本版本 kNN 算法构建​

数据准备​

首先,我们需要准备数据集。这里以经典的鸢尾花数据集为例,该数据集包含 4 个特征和 3 个类别。可以通过 sklearn 库中的datasets模块加载:​

python">from sklearn.datasets import load_iris​
from sklearn.model_selection import train_test_split​
iris = load_iris()​
X = iris.data​
y = iris.target​
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)​

train_test_split函数将数据集按照 80:20 的比例划分为训练集和测试集。​

模型构建与训练​

接下来,我们使用KNeighborsClassifier类来构建 kNN 分类模型,并进行训练:​

python">from sklearn.neighbors import KNeighborsClassifier​
# 创建kNN分类器,k值设为5​
knn = KNeighborsClassifier(n_neighbors = 5)​
# 训练模型​
knn.fit(X_train, y_train)​

这里将 k 值设置为 5,你可以根据实际情况调整 k 值以优化模型性能。​

模型预测与评估​

训练完成后,我们使用测试集进行预测,并评估模型的准确性:​

python">y_pred = knn.predict(X_test)​
from sklearn.metrics import accuracy_score​
accuracy = accuracy_score(y_test, y_pred)​
print(f"模型准确率: {accuracy}")​

通过accuracy_score函数计算预测结果与真实标签之间的准确率。​

调优版本 kNN 算法构建​

超参数调优​

在实际应用中,我们通常需要对 kNN 算法的超参数(如 k 值)进行调优,以获得更好的性能。这里我们使用网格搜索(Grid Search)来寻找最优的 k 值。​

python">from sklearn.model_selection import GridSearchCV​
# 定义k值的搜索范围​
param_grid = {'n_neighbors': range(1, 21)}​
# 创建kNN分类器​
knn = KNeighborsClassifier()​
# 使用网格搜索进行超参数调优​
grid_search = GridSearchCV(knn, param_grid, cv = 5)​
grid_search.fit(X_train, y_train)​

这里我们在 1 到 20 的范围内搜索 k 值,并使用 5 折交叉验证(cv = 5)来评估每个 k 值下模型的性能。​

最佳模型预测与评估​

找到最优 k 值后,使用最佳模型进行预测和评估:​

python">best_knn = grid_search.best_estimator_​
y_pred = best_knn.predict(X_test)​
accuracy = accuracy_score(y_test, y_pred)​
print(f"调优后模型准确率: {accuracy}")​

通过这种方式,我们可以找到在当前数据集上表现最佳的 kNN 模型。​

总结​

通过以上两个版本,我们展示了如何使用 Python 的 scikit - learn 库构建 kNN 算法。基本版本简单直接,适合快速搭建模型;调优版本通过超参数调优,能够提升模型的性能。希望本文能帮助你快速掌握 kNN 算法在 Python 中的实现。如果你想深入了解 scikit - learn 库的更多功能,可以访问官方文档:[scikit - learn 官方文档](https://scikit - learn.org/stable/) 。​


http://www.ppmy.cn/server/175198.html

相关文章

阿里巴巴发布 R1-Omni:首个基于 RLVR 的全模态大语言模型,用于情感识别

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

FPGA中级项目1——IP核(ROM 与 RAM)

FPGA中级项目1——IP核(ROM 与 RAM) IP核简介 在 FPGA(现场可编程门阵列)设计中,IP 核(Intellectual Property Core,知识产权核)是预先设计好的、可重用的电路模块,用于实…

Git提交前时间检查

为了防止在本地看日志的时候,由于本地时间被修改,导致日志的时间存在非正确时间。通过以下脚本在提交前进行时间验证,只有是正确的时间才可以提交。 使用方法如下: 复制如下脚本,命名为 pre-commit ,放到 …

【存储中间件】Redis核心技术与实战(一):Redis入门与应用(高级数据结构:Bitmaps、HyperLogLog、GEO)

文章目录 Redis入门与应用Redis高级数据结构Bitmaps操作命令setbit 设置值getbit 获取值bitcount 获取Bitmaps指定范围值为1的个数bitop Bitmaps 间的运算bitpos 计算Bitmaps中第一个值为targetBit 的偏移量 Bitmaps优势面试题和场景传统数据结构的不足 布隆过滤器布隆过滤器简…

Unix 域套接字(本地套接字)

Unix 域套接字(Unix Domain Sockets),也称为本地套接字(Local Sockets),是一种用于同一主机上进程间通信(IPC)的机制。Unix 域套接字提供了一种高效的进程间通信方式,它利…

为什么List、Set集合无法在遍历的时候修改内部元素

以常用集合ArrayList为例,ArrayList 在遍历过程中无法直接修改内部元素的结构(例如通过 remove() 或 add() 方法修改元素),是因为 遍历的过程中修改结构 可能会导致 不一致的行为、并发修改异常 或 逻辑错误。 注意:和…

【AWS入门】2025 AWS亚马逊云科技账户注册指南

【AWS入门】2025 AWS亚马逊云科技账户注册指南 A Guide To Register a New account on AWS By JacksonML 0. AWS亚马逊云科技简介 Amazon Web Service(AWS) 即亚马逊云科技,其在全球Cloud Computing(云计算)市场占有最为重要的地位。 AWS连续13年被Gartner评为…

安全中心建设关键技术之数据分析

1.1.1 功能要求 通过对重要信息系统安全防护设备发现的威胁数据、恶意访问行为数据的采集分析,判定危险源行为特征类型。立足对系统安全监测数据、运行数据的分析,通过事件分析、告警分析、文件分析、融合分析及大数据分析模型等技术,及时通过…