介绍
在这个项目中,你将学习如何使用支持向量分类器(SVC)模型对鸢尾花数据集进行分类。鸢尾花数据集是一个经典的机器学习数据集,包含了不同种类鸢尾花的信息,包括它们的萼片长度、萼片宽度、花瓣长度和花瓣宽度。
🎯 任务
在这个项目中,你将学习:
- 如何导入所需的库并加载鸢尾花数据集
- 如何将数据集拆分为训练集和测试集
- 如何创建和训练一个支持向量分类器模型
- 如何使用训练好的模型进行预测
- 如何使用准确率得分和分类报告评估模型的性能
🏆 成果
完成这个项目后,你将能够:
- 使用 scikit-learn 库处理鸢尾花数据集
- 将数据集拆分为训练集和测试集
- 创建和训练一个支持向量分类器模型
- 使用训练好的模型进行预测
- 使用准确率得分和分类报告评估模型的性能
导入所需库并加载数据集
在这一步中,你将学习如何导入所需的库并加载鸢尾花数据集。按照以下步骤完成此步骤:
在iris_classification_svm.py中,导入所需的库,包括用于加载数据集、拆分数据、创建支持向量机(SVM)模型以及评估其性能的库。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report
从sklearn.datasets加载鸢尾花数据,并将数据集拆分为训练集和测试集。数据集按 80-20 的比例进行训练和测试拆分,随机种子设为 42 以确保可重复性。
## 在同一个文件中继续
def load_and_split_data() -> tuple:
"""
返回值:
元组:[X_train, X_test, y_train, y_test]
"""
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
return X_train, X_test, y_train, y_test
这段代码加载鸢尾花数据集并将其拆分为训练集和测试集,用于机器学习。以下是各部分的详细说明:
- 导入必要的库:
sklearn.datasets用于加载数据集,包括鸢尾花数据集。sklearn.model_selection提供将数据集拆分为训练集和测试集的实用工具。sklearn.svm包含支持向量机(SVM)的类,这是一种机器学习算法。sklearn.metrics包括用于评估模型性能的工具,如准确率和分类报告。
- 函数定义:定义了一个名为
load_and_split_data的函数。此函数执行以下任务:- 加载鸢尾花数据集:
load_iris()是sklearn.datasets提供的一个函数,用于加载鸢尾花数据集,这是一个用于分类任务的流行数据集。它包含来自三个不同物种的 150 朵鸢尾花的测量数据。 - 数据分离:数据集被分离为特征(
X)和目标标签(y)。在这种情况下,X将是鸢尾花的 4 维测量数据,而y将是相应的物种标签(0、1 或 2)。 - 拆分数据:使用
sklearn.model_selection中的train_test_split将数据拆分为训练子集和测试子集。test_size = 0.2参数表示 20% 的数据将用于测试,其余 80% 将用于训练。random_state = 42确保拆分的可重复性;每次运行代码时使用相同的种子(这里是 42)将产生相同的拆分结果。 - 返回值:该函数返回一个包含
X_train、X_test、y_train和y_test的元组,它们分别是训练数据和测试数据的特征集和目标集。
- 加载鸢尾花数据集:
创建并训练支持向量机模型
在这一步中,你将学习如何创建一个支持向量分类器模型,并在训练数据上对其进行训练。
## 在同一个文件中继续
def create_and_train_SVM(X_train: list, y_train: list) -> SVC:
"""
参数:
X_train:[训练用的特征]
y_train:[训练用的标签]
返回值:
SVC:[训练好的支持向量分类器模型]
"""
svm = SVC()
svm.fit(X_train, y_train)
return svm
这个函数create_and_train_SVM旨在使用sklearn.svm.SVC类实例化一个支持向量分类器(SVM)模型,然后在提供的训练数据上对其进行训练。以下是详细解释:
- 函数签名:该函数接受两个参数:
X_train:一个列表或类似数组的对象,包含训练数据集的特征(输入变量)。y_train:一个列表或类似数组的对象,包含训练数据集的相应标签(输出变量)。
- 实例化 SVM 模型:在函数内部,调用
SVC()时不使用任何参数。这会创建一个默认的支持向量分类器模型。scikit-learn 中的 SVC 类提供了各种参数来定制模型,例如核函数类型、正则化等,但在这个基本示例中,使用的是默认值。 - 训练模型:使用
X_train和y_train调用svm对象的fit方法。这是实际进行训练的地方——模型从与各自类别标签(y_train)相关联的特征(X_train)中学习模式。 - 返回训练好的模型:训练完成后,函数返回训练好的
SVC模型。然后可以使用这个模型对新的、未见过的数据进行预测,或者使用测试数据集评估其性能。
进行预测
在这一步中,你将学习如何使用训练好的支持向量机(SVM)模型进行预测。
## 在同一个文件中继续
def make_predictions(model: SVC, X_test: list) -> list:
"""
参数:
model:[训练好的支持向量分类器模型]
X_test:[测试用的特征]
返回值:
列表:[预测结果]
"""
predictions = model.predict(X_test)
return predictions
函数make_predictions将一个训练好的支持向量机模型和一组测试特征作为输入,并返回测试数据的预测标签列表。以下是详细说明:
- 函数参数:
model:这是SVC类(支持向量分类器)的一个实例,已经在一个数据集上进行了训练。假设该模型知道如何根据其在训练阶段学到的模式对新实例进行分类。X_test:一个列表或类似数组的对象,包含测试数据集的特征(输入变量)。这些是模型将为其预测标签的未见示例。
- 进行预测:在函数内部,使用
X_test作为参数调用model的predict方法。predict方法将学习到的模型应用于测试集中的每个实例,以估计它们的类别标签。它不需要真实标签(y_test),只需要输入特征。 - 返回预测结果:然后,函数将这些估计的标签作为列表返回。返回列表中的每个元素对应于
X_test数据集中相应实例的预测类别标签。
评估模型
通过计算准确率得分并显示分类报告来评估模型。
## 在同一个文件中继续
if __name__ == "__main__":
## 加载并拆分数据
X_train, X_test, y_train, y_test = load_and_split_data()
## 创建并训练支持向量机模型
svm_model = create_and_train_SVM(X_train, y_train)
## 进行预测
predictions = make_predictions(svm_model, X_test)
## 评估模型
accuracy = accuracy_score(y_test, predictions)
print(f"准确率:{accuracy:.2f}")
## 显示分类报告
print("分类报告:")
print(classification_report(y_test, predictions))
现在,从终端运行脚本:
python iris_classification_svm.py
输出应该是:
准确率: 1.00
分类报告:
精确率 召回率 F1值 支持度
0 1.00 1.00 1.00 10
1 1.00 1.00 1.00 9
2 1.00 1.00 1.00 11
准确率 1.00 30
宏平均 1.00 1.00 1.00 30
加权平均 1.00 1.00 1.00 30
通过遵循这些步骤,你已经完成了使用支持向量分类器(SVC)模型对鸢尾花数据集进行分类的项目。
总结
恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。



