Python留出法与鸢尾花数据集
在机器学习中,评估模型性能是一个至关重要的步骤。留出法(Hold-Out)是一种简单有效的模型评估技术,它通过将数据集划分为两个部分:训练集和测试集,来评估模型的表现。在这篇文章中,我们将讨论留出法的基本原理,并使用鸢尾花数据集作为示例。
留出法的基本原理
留出法简单来说就是将数据集分成两部分:训练集和测试集。模型在训练集上进行训练,然后在测试集上进行验证。这种方法的优点是简单易实施,缺点是模型的评估结果会受到划分的随机性的影响。
工作流程
留出法的基本工作流程如下:
stateDiagram
[*] --> 数据集准备
数据集准备 --> 划分数据集
划分数据集 --> 训练模型
训练模型 --> 验证模型
验证模型 --> [*]
鸢尾花数据集介绍
鸢尾花数据集(Iris Dataset)是一个经典的机器学习数据集,包含150个样本,每个样本有四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。这些样本属于三种不同的鸢尾花类型:山鸢尾、变色鸢尾和维吉尼亚鸢尾。
导入必要的库
为了使用鸢尾花数据集,我们需要导入一些必要的库,包括 pandas
、numpy
和 sklearn
。以下是导入这些库的代码:
import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
加载数据集
接下来,我们将加载鸢尾花数据集并将其转换为一个pandas DataFrame,以便于之后的操作:
# 加载数据集
iris = datasets.load_iris()
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
iris_df['species'] = iris.target
数据集划分
我们将数据集划分为训练集和测试集,通常使用70%到80%的数据用于训练,20%到30%的数据用于测试。我们使用 train_test_split
函数来完成这一任务:
# 划分数据集
X = iris_df[iris.feature_names]
y = iris_df['species']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
在上面的代码中,X
是特征集,y
是目标变量。test_size
参数表示测试集所占的比例,random_state
参数确保每次划分的一致性。
训练模型
在数据集划分完成后,我们可以选择一个机器学习算法进行训练。这里我们采用 K 最近邻(KNN)算法进行示范:
# 初始化KNN模型
knn = KNeighborsClassifier(n_neighbors=3)
# 训练模型
knn.fit(X_train, y_train)
验证模型
训练完成后,我们使用测试集来评估模型性能,然后输出模型的准确率:
# 进行预测
y_pred = knn.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'模型的准确率为: {accuracy:.2f}')
总结
通过以上步骤,我们成功利用留出法对鸢尾花数据集进行建模,并评估了模型的性能。留出法因其简单性而广受欢迎,但它也有一些局限性,例如对数据的随机划分可能会影响模型的评估结果。
如果数据集较小,推荐使用交叉验证,这样可以更充分地利用数据集,并提供更稳定的评估结果。
扩展阅读
- 交叉验证:了解如何使用 k-fold 交叉验证技术来提高模型评估的可靠性。
- 其他赛道:探索其他机器学习模型和更复杂的数据集,通过实践提高机器学习技能。
在机器学习的旅程中,留出法是一个很好的起点,但记住,技术始终在不断发展,了解更多方法会使你在这条路上走得更远。希望这篇文章能够助你一臂之力,激发你对数据科学和机器学习的热情!