引言
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/) 。