目录
一、数据加载与预处理
1. 数据加载
2. 数据统计与类别平衡检查
二、数据可视化
1. 散点图矩阵
2. 箱线图
三、数据集划分
四、模型训练与评估
1. K 近邻分类器(KNN)
2. 决策树分类器
3. 模型评估
五、KNN 不同 k 值准确率对比
一、数据加载与预处理 1. 数据加载步骤1:环境准备与数据加载
1.安装库:
pip install numpy pandas matplotlib scikit-learn
软件包安装完成后就可以运用相关的函数
python
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target
解释:从 sklearn 库中加载鸢尾花数据集,将其转换为 pandas 的 DataFrame 格式,方便后续的数据处理和分析。同时添加 target 列作为类别标签,其中 0 代表山鸢尾(setosa),1 代表变色鸢尾(versicolor),2 代表维吉尼亚鸢尾(virginica)。 2. 数据统计与类别平衡检查python
print(df.describe())
print(df['target'].value_counts())
解释: df.describe() 用于计算各特征的基本统计信息,如均值、标准差、最小值、最大值等,帮助我们了解数据的分布情况。df['target'].value_counts() 用于统计每个类别标签的出现次数,以检查数据集的类别是否平衡。在鸢尾花数据集中,每个类别有 50 个样本,说明数据集是平衡的。遇到的问题:输出的数据分布情况可能会出现省略就像这样
解决方法:在 pandas 中,可通过设置显示选项让省略的列全部输出。 import pandas as pd
pd.set_option("display.max_columns", None)
pd.set_option("display.width", 1000)
display.max_columns:控制 DataFrame 显示的最大列数,设为 None 时会显示所有列。display.width:调整显示宽度,确保列内容完整展示,避免因终端宽度不足导致的折叠或省略。
以下是制作好的表格 
python
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix
scatter_matrix(df, figsize=(12,8), c=df['target'], marker='o')
plt.show()
解释:matplotlib.pyplot 是 Python 常用的绘图库,用于生成可视化图表。scatter_matrix 是 pandas 提供的工具,专门用于绘制散点矩阵图,展示数据集中各特征两两之间的散点关系。df:输入的数据集(需包含特征和标签,如之前处理的鸢尾花数据集 df)。figsize=(12, 8):设置图表的尺寸(宽 12 英寸,高 8 英寸)。c=df['target']:根据 target 标签对数据点上色,不同颜色代表鸢尾花的不同品种。marker='o':设置数据点的标记样式为圆形。
2. 箱线图 python
df.boxplot(by='target', figsize=(10, 6))
plt.show()
最终运行效果:会生成一张图,里面包含多个箱线图,每个箱线图对应一个鸢尾花品种,直观展示该品种在各个特征上的数据分布情况(比如数据的集中趋势、离散程度等)。
如图:
解释:绘制箱线图,按类别标签对数据进行分组,展示每个类别下各特征的分布情况。箱线图可以展示数据的中位数、四分位数、异常值等信息,帮助我们比较不同类别在各特征上的差异。这串代码的作用是:通过绘制箱线图,对比不同鸢尾花品种(由 target 区分)在各个特征上的数据分布。具体解释如下:
df.boxplot():
让数据表格 df 绘制箱线图。箱线图能展示数据的中位数、四分位数、异常值等分布特征。by='target':
表示 “按照 target 这一列的数据分组”。因为 target 代表鸢尾花的品种(0、1、2 对应不同品种),这样就会针对每个品种,分别绘制它们在各个特征(如花瓣长度、花萼宽度等)上的箱线图,方便对比不同品种的数据差异。figsize=(10, 6):
规定图片的尺寸,让画出的图宽是 10 英寸,高是 6 英寸,确保图表展示清晰。plt.show():
把绘制好的箱线图显示出来,不然代码运行后看不到图形结果。
python
from sklearn.model_selection import train_test_split
X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
解释:使用 train_test_split 函数将数据集划分为训练集和测试集,其中测试集占总数据集的 20%。random_state=42 保证了每次运行代码时划分的结果是一致的,方便结果的复现。划分后的训练集用于模型的训练,测试集用于评估模型的性能。python
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
y_pred_knn = knn.predict(X_test)
解释: 导入 KNeighborsClassifier 类,创建一个 KNN 分类器对象,设置 n_neighbors=3,表示使用 3 个最近邻进行分类。使用 fit 方法对训练集进行训练。使用 predict 方法对测试集进行预测,得到预测结果 y_pred_knn。 2. 决策树分类器python
from sklearn.tree import DecisionTreeClassifier, plot_tree
dt = DecisionTreeClassifier(max_depth=2)
dt.fit(X_train, y_train)
plt.figure(figsize=(12,8))
plot_tree(dt, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()
解释: 导入 DecisionTreeClassifier 类和 plot_tree 函数,创建一个决策树分类器对象,设置 max_depth=2,限制决策树的最大深度为 2。使用 fit 方法对训练集进行训练。使用 plot_tree 函数绘制决策树,并显示图形。
3. 模型评估 python
from sklearn.metrics import classification_report
print("KNN报告:n", classification_report(y_test, y_pred_knn))
print("决策树报告:n", classification_report(y_test, dt.predict(X_test)))

python
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
k_values = range(1, 15)
accuracies = []
for k in k_values:
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)
accuracies.append(knn.score(X_test, y_test))
plt.plot(k_values, accuracies, marker='o')
plt.xlabel('k')
plt.ylabel('Test Accuracy')
plt.title('KNN不同k值准确率对比')
plt.show()

通过以上步骤,我们完成了对鸢尾花数据集的加载、预处理、可视化、模型训练和评估,以及对 KNN 分类器不同 k 值的准确率对比分析。
相关知识
机器学习入门实践——鸢尾花分类
第3章(下)基于Softmax回归完成鸢尾花分类任务
教学课件:6、机器学习入门实践:鸢尾花分类.pptx
基于KNN的鸢尾花分类
机器学习实战第1天:鸢尾花分类任务
KNN鸢尾花分类
Python机器学习案例:鸢尾花分类
朴素贝叶斯算法对鸢尾花分类
机器学习实战:鸢尾花分类
pytorch 鸢尾花分类
网址: 鸢尾花分类实践任务 https://m.huajiangbk.com/newsview2500332.html
| 上一篇: 驾驶舱看板能否替代Excel?数 |
下一篇: 微生物研究必备:Cytoscap |