当前位置: 首页 > article >正文

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

引言​

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

环境准备​

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

pip install numpy scikit - learn​

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

基本版本 kNN 算法构建​

数据准备​

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

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 分类模型,并进行训练:​

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

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

模型预测与评估​

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

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 值。​

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 值后,使用最佳模型进行预测和评估:​

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.kler.cn/a/585324.html

相关文章:

  • 如何撰写一份清晰专业的软件功能测试报告
  • Vue项目搜索引擎优化(SEO)终极指南:从原理到实战
  • JVM 垃圾回收器的选择
  • 海量数据查询加速:Presto、Trino、Apache Arrow
  • 在Vue3中集成XGPlayer视频播放器的完整指南
  • Unity打包Android平台调用sherpa-onnx
  • 【Devops】DevOps and CI/CD Pipelines
  • Qt5中视口(ViewPort)与窗口(Window)
  • ACwing—01背包(暴力bfs+dp+递归+记忆化搜索算法)
  • std::span
  • 【软考-架构】4.2、嵌入式软件-系统-RTOS-软件开发
  • 03.Python基础2
  • 【蓝桥杯集训·每日一题2025】 AcWing 4905. 面包店 python
  • Android LeakCanary使用与原理深度解析
  • R语言基础| 高级数据管理
  • mne溯源相关说明
  • ChatGPT、DeepSeek、Grok 三者对比:AI 语言模型的博弈与未来
  • RTSP/Onvif视频安防监控平台EasyNVR调用接口返回匿名用户名和密码的原因排查
  • Linux内核实时机制19 - RT调度器3 - 实时任务出入队
  • 【vLLM 学习】使用 TPU 安装