使用 Python 和 scikit-learn 实现 KNN 分类:以鸢尾花数据集为例

在机器学习的世界里,K-Nearest Neighbors(KNN)算法是一种简单而强大的分类方法。它基于一个直观的想法:相似的数据点往往属于同一类别。本文将通过 Python 的 scikit-learn 库实现 KNN 分类,以经典的鸢尾花数据集为例,展示从数据加载到模型评估的完整流程。

1. KNN 算法简介

KNN 是一种监督学习算法,主要用于分类和回归任务。它的工作原理非常简单:对于一个新的数据点,算法会查找训练数据中与其最近的 K 个点(即"邻居"),然后根据这些邻居的类别进行投票,最终决定新数据点的类别。KNN 的关键在于选择合适的 K 值以及定义"最近"的距离度量方式。

2. 鸢尾花数据集

鸢尾花数据集是机器学习领域中最经典的数据集之一,由英国统计学家和生物学家 Ronald Fisher 在 1936 年首次发表。该数据集包含 150 个样本,每个样本有 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),分别对应鸢尾花的三种类别:Setosa、Versicolor 和 Virginica。

3. 实现 KNN 分类

接下来,我们将通过 Python 的 scikit-learn 库实现 KNN 分类。以下是完整的代码实现:

python 复制代码
# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report, accuracy_score

# 1. 加载数据集
iris = load_iris()
X = iris.data  # 特征数据
y = iris.target  # 标签数据
print("数据集特征:", iris.feature_names)
print("数据集标签:", iris.target_names)

# 2. 划分训练集和测试集(训练集70%,测试集30%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 3. 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 4. 创建KNN模型并训练
k = 3  # 设置K的值
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)

# 5. 进行预测
y_pred = knn.predict(X_test)
print("预测结果:", y_pred)
print("真实标签:", y_test)

# 6. 评估模型性能
print("分类报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))
print("准确率:", accuracy_score(y_test, y_pred))

代码解析

  1. 加载数据集

    使用 scikit-learn 提供的 load_iris() 函数加载鸢尾花数据集。数据集包含 4 个特征和 3 个类别。

  2. 划分训练集和测试集

    使用 train_test_split 函数将数据集划分为训练集(70%)和测试集(30%)。这样可以评估模型在未见过的数据上的性能。

  3. 特征标准化

    KNN 算法对特征的尺度非常敏感,因此我们使用 StandardScaler 对特征进行标准化处理,使每个特征的均值为 0,标准差为 1。

  4. 创建 KNN 模型并训练

    使用 KNeighborsClassifier 创建 KNN 模型,并通过 fit 方法训练模型。这里我们选择 K=3。

  5. 进行预测

    使用训练好的模型对测试集进行预测,并打印预测结果和真实标签。

  6. 评估模型性能

    使用 classification_reportaccuracy_score 评估模型的性能。分类报告提供了每个类别的精确率、召回率和 F1 分数,而准确率则表示模型在测试集上的整体性能。

4. 结果分析

运行上述代码后,你会看到以下输出:

5. 总结

通过本文,我们展示了如何使用 Python 和 scikit-learn 实现 KNN 分类。从数据加载、预处理、模型训练到性能评估,整个过程清晰明了。KNN 算法虽然简单,但在许多实际问题中都能取得不错的效果。当然,KNN 的性能也依赖于 K 值的选择和数据的特征分布。在实际应用中,你可以尝试不同的 K 值,或者使用交叉验证来优化模型。

希望本文能帮助你更好地理解和应用 KNN 算法。

相关推荐
独行soc1 天前
2025年渗透测试面试题总结-101(题目+回答)
网络·python·安全·web安全·adb·渗透测试·安全狮
好家伙VCC1 天前
**全息显示技术的发散创新与深度探索**一、引言随着科技的飞速发展,全息显示技术已成为显示领域的一大研究热点。本文将带你
java·图像处理·python·科技·计算机视觉
Nina_7171 天前
第二章 prompt思维链
python·prompt
掘金安东尼1 天前
遇见 Kiro:从“爽感写代码”到“生产级落地”
人工智能·python
偷心伊普西隆1 天前
Python Access:删除数据库中指定的表和查询
数据库·python
Learn Beyond Limits1 天前
Using per-item Features|使用每项特征
人工智能·python·神经网络·算法·机器学习·ai·吴恩达
哈里谢顿1 天前
Celery Signal 类详解与实战
python
深蓝电商API1 天前
解析动态数据:如何抓取 JavaScript 加载的 AJAX 内容
爬虫·python
2401_841495641 天前
【计算机视觉】霍夫变换检测
图像处理·人工智能·python·opencv·算法·计算机视觉·霍夫变换
m0_741585351 天前
Django开发环境
python·django