本文共 2210 字,大约阅读时间需要 7 分钟。
交叉验证(Cross Validation)和网格搜索(Grid Search)是机器学习领域中的核心技术,广泛应用于模型性能评估与超参数优化。这两项技术分别通过不同的方法帮助数据科学家更好地理解模型性能及其对特定数据集的适应性。
交叉验证是一种数据驱动的模型评估方法,旨在衡量模型在未见过训练数据时的表现。它通过将数据集分割成多个子集(称为折叠或“folds”),并在每个子集上进行训练和测试,来评估模型的泛化能力。
数据分割
交叉验证主要有两种常用方式:K-fold交叉验证和留一交叉验证(Leave-One-Out Cross Validation)。模型评估
每次训练结束后,记录模型在对应测试集上的性能指标,包括但不限于准确率、F1分数、AUC-ROC曲线等。性能汇总
将所有折叠的性能指标累加并取平均值,以评估模型的整体性能。网格搜索是一种参数优化方法,通过遍历潜在的超参数组合来找到能够最大化模型性能的最佳配置。它通常与交叉验证结合使用,以确保找到的超参数组合在不同数据集上表现优异。
以下是使用 scikit-learn
库实现交叉验证和网格搜索的示例代码:
from sklearn.model_selection import GridSearchCVfrom sklearn.datasets import load_irisfrom sklearn.ensemble import RandomForestClassifier# 加载数据集iris = load_iris()X = iris.datay = iris.target# 定义超参数搜索空间param_grid = { 'n_estimators': [50, 100], 'max_depth': [None, 10], 'min_samples_split': [2, 5]}# 网格搜索并评估模型model = GridSearchCV(RandomForestClassifier(), param_grid=param_grid, cv=5, scoring='accuracy')model.fit(X, y)best_model = model.best_estimator_# 输出最佳模型的超参数和性能指标print("最佳模型超参数:", model.best_params_)print("模型性能:", model.best_score_)
加载数据集
使用load_iris()
加载鸢尾花数据集,提取特征矩阵 X
和标签向量 y
。定义超参数搜索空间
param_grid
中定义了需要优化的超参数及其可能取值范围。例如,n_estimators
是训练模型的次数,max_depth
是随机森林模型的最大树深度。网格搜索并评估模型
使用GridSearchCV
类执行网格搜索,指定 cv=5
进行5折交叉验证,scoring='accuracy'
根据准确率评估模型性能。获取最佳模型
model.fit(X, y)
培训模型,找到最佳超参数组合,best_model
中存储了性能最好的模型。输出结果
打印最佳模型的超参数和性能指标,model.best_params_
输出最优超参数,model.best_score_
输出对应的最佳性能评分。交叉验证和网格搜索是机器学习中不可或缺的技术,分别负责模型性能评估和超参数优化。通过交叉验证,数据科学家可以更可靠地评估模型的泛化能力;通过网格搜索,可以在大量的超参数组合中找到最佳配置,提升模型性能。这些技术的结合使用,使得模型开发和优化更加高效和精准。
转载地址:http://ukgfk.baihongyu.com/