使用Python实现基于KNN的鸢尾花分类

03-04 85阅读
󦘖

免费快速起号(微信号)

yycoo88

添加微信

机器学习是当今计算机科学中一个非常热门且重要的领域,它通过让计算机从数据中自动学习规律并做出预测或决策。在众多机器学习算法中,K近邻(K-Nearest Neighbors, KNN)算法是一种简单但有效的监督学习方法。本文将介绍如何使用Python编程语言中的Scikit-Learn库来实现基于KNN的鸢尾花分类任务。

鸢尾花数据集简介

鸢尾花数据集(Iris Dataset)是机器学习领域最著名的数据集之一,由英国统计学家和生物学家罗纳德·费舍尔(Ronald Fisher)于1936年收集。该数据集包含150个样本,分为3个不同的类别(即3种不同品种的鸢尾花),每个类别有50个样本。对于每一个样本,记录了4个特征值:萼片长度、萼片宽度、花瓣长度和花瓣宽度。

这些特征可以帮助我们区分不同种类的鸢尾花。例如,某些种类可能具有更长的花瓣而其他种类则可能拥有更宽的萼片。因此,这个数据集非常适合用来进行分类任务的学习与实践。

Python环境搭建及库安装

为了能够顺利地完成本次实验,在开始之前需要确保已经安装好Python解释器以及必要的第三方库。这里推荐使用Anaconda发行版因为它自带了许多常用的科学计算相关包,并且可以通过其集成开发环境Spyder或者Jupyter Notebook来进行代码编写与调试工作。

除了Anaconda自带的一些基本库外,还需要额外安装scikit-learn库,它是专门为机器学习设计的一个Python模块,提供了丰富的机器学习算法实现和其他有用的工具函数。可以使用pip命令来安装:

pip install scikit-learn

此外,matplotlib和seaborn这两个可视化库也会被用到,用于绘制图表展示结果。如果尚未安装的话,同样可以通过pip命令来安装它们:

pip install matplotlib seaborn

数据预处理

导入数据

首先,我们需要导入鸢尾花数据集。幸运的是,Scikit-Learn库中已经内置了这个经典的数据集,可以直接调用datasets模块中的load_iris()函数来加载。

from sklearn import datasets# 加载鸢尾花数据集iris = datasets.load_iris()# 查看数据集的基本信息print(iris.DESCR)

这段代码会输出有关鸢尾花数据集的描述性信息,包括特征名称、目标变量(即鸢尾花种类)、数据规模等。这对于理解数据结构非常重要。

特征选择与标准化

接下来要对数据进行一些初步处理。由于KNN算法依赖于距离度量来确定样本之间的相似程度,因此特征尺度差异较大时会影响模型性能。所以,在训练之前应该先对所有特征做标准化处理,使得每个特征都具有零均值和单位方差。

from sklearn.preprocessing import StandardScaler# 提取特征矩阵X和标签向量yX = iris.datay = iris.target# 创建StandardScaler对象scaler = StandardScaler()# 对特征进行标准化X_scaled = scaler.fit_transform(X)# 打印前五行标准化后的特征值print(X_scaled[:5])

划分训练集与测试集

最后一步是在训练之前将整个数据集划分为两个部分:一部分用于训练模型;另一部分保留下来作为测试集以评估模型泛化能力。通常情况下,我们会按照一定比例(如7:3或8:2)随机抽取样本构建训练集和测试集。这可以通过Scikit-Learn提供的train_test_split()函数轻松实现。

from sklearn.model_selection import train_test_split# 将数据集划分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(    X_scaled, y, test_size=0.3, random_state=42)# 打印划分后的数据集大小print(f"训练集大小: {len(X_train)}")print(f"测试集大小: {len(X_test)}")

模型训练与评估

训练KNN模型

现在准备工作已经完成,接下来就可以正式开始训练KNN分类器了。在Scikit-Learn中,只需要创建一个KNeighborsClassifier类的实例,并调用其fit()方法传入训练数据即可完成训练过程。

from sklearn.neighbors import KNeighborsClassifier# 创建KNN分类器对象,默认k=5knn = KNeighborsClassifier(n_neighbors=5)# 使用训练数据拟合模型knn.fit(X_train, y_train)

评估模型性能

训练完成后,自然想要知道所建立的模型究竟表现如何。为此,我们可以利用测试集中的数据来对模型进行预测,并将其与真实标签进行对比从而计算出准确率等指标。此外,还可以借助混淆矩阵更加直观地了解模型分类情况。

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report# 使用测试数据进行预测y_pred = knn.predict(X_test)# 计算准确率accuracy = accuracy_score(y_test, y_pred)print(f"模型准确率: {accuracy:.4f}")# 绘制混淆矩阵import seaborn as snsimport matplotlib.pyplot as pltcm = confusion_matrix(y_test, y_pred)sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')plt.title('Confusion Matrix')plt.xlabel('Predicted Label')plt.ylabel('True Label')plt.show()# 输出详细的分类报告report = classification_report(y_test, y_pred, target_names=iris.target_names)print("分类报告:\n", report)

以上代码首先计算了模型在测试集上的准确率,然后通过Seaborn库绘制了一个热力图形式的混淆矩阵,最后打印出了包含精确度、召回率和支持度在内的详细分类报告。这些信息有助于全面评估模型的表现,并为后续改进提供依据。

通过上述步骤,我们成功地使用Python实现了基于KNN算法的鸢尾花分类任务。在这个过程中,不仅学会了如何操作Scikit-Learn库中的各种组件,还掌握了数据预处理、模型训练以及评估等方面的知识。当然,这只是机器学习领域的一小部分内容,还有许多更复杂和高级的技术等待着大家去探索。希望这篇文章能够激发读者对机器学习的兴趣,并为今后深入学习打下坚实的基础。

免责声明:本文来自网站作者,不代表ixcun的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:aviv@vne.cc
您是本站第17316名访客 今日有32篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!