在机器学习领域,模型评估是一个至关重要的环节。一个好的评估方法能够帮助我们准确判断模型的性能,从而选择最合适的模型和参数。交叉验证就是一种常用且有效的模型评估技术,而 K 折交叉验证(K - Fold Cross - Validation)更是其中的经典方法。本文将深入介绍 K 折交叉验证的原理、优势,并通过实际代码演示其在 Python 中的应用。
K 折交叉验证的核心思想是将原始数据集划分为 K 个互不重叠的子集,每个子集的大小大致相同。然后,我们会进行 K 次训练和验证过程,在每一次过程中,我们会选择其中一个子集作为验证集,其余的 K - 1 个子集作为训练集。最后,将这 K 次验证的结果取平均值,作为模型的最终评估指标。
以下是一个 K = 5 时的简单示意图:
| 折数 | 训练集 | 验证集 |
| —— | —— | —— |
| 1 | 子集 2 - 5 | 子集 1 |
| 2 | 子集 1、3 - 5 | 子集 2 |
| 3 | 子集 1、2、4、5 | 子集 3 |
| 4 | 子集 1 - 3、5 | 子集 4 |
| 5 | 子集 1 - 4 | 子集 5 |
我们将使用 scikit - learn
库来进行 K 折交叉验证的演示。以下是一个使用鸢尾花数据集进行逻辑回归模型评估的示例:
from sklearn.datasets import load_iris
from sklearn.model_selection import KFold, cross_val_score
from sklearn.linear_model import LogisticRegression
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
# 创建逻辑回归模型
model = LogisticRegression(max_iter=1000)
# 设置 K 值
k = 5
kf = KFold(n_splits=k, shuffle=True, random_state=42)
# 进行 K 折交叉验证
scores = cross_val_score(model, X, y, cv=kf)
# 输出每次验证的得分和平均得分
print(f"每次验证的得分: {scores}")
print(f"平均得分: {scores.mean()}")
load_iris()
函数加载鸢尾花数据集,将特征数据存储在 X
中,标签数据存储在 y
中。LogisticRegression
,并设置最大迭代次数为 1000。KFold
类设置 K 值为 5,并设置 shuffle=True
表示在划分前对数据进行随机打乱,random_state=42
保证结果的可重复性。cross_val_score
函数进行 K 折交叉验证,返回每次验证的得分。K 折交叉验证是一种强大的模型评估方法,能够帮助我们更准确地评估模型的性能。通过本文的介绍和代码演示,你应该对 K 折交叉验证有了更深入的理解,并能够在实际项目中运用它来评估和选择模型。在实际应用中,我们可以根据数据集的大小和特点选择合适的 K 值,一般来说,K 取值为 5 或 10 是比较常见的选择。
希望本文对你理解 K 折交叉验证有所帮助,让你在机器学习的道路上更进一步!