一文学会sklearn中的交叉验证方法,cross_validate和KFlod实战案例

这篇具有很好参考价值的文章主要介绍了一文学会sklearn中的交叉验证方法,cross_validate和KFlod实战案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在机器学习中,我们经常需要评估模型的性能。而为了准确评估模型的性能,我们需要使用一种有效的评估方法。五折交叉验证(5-fold cross-validation)就是其中一种常用的模型评估方法,用于评估机器学习模型的性能和泛化能力。

在本文中,我们将介绍五折交叉验证的原理和实现方法,并探讨其在模型评估中的重要性。

sklearn实现交叉验证

数据集使用sklearn中常见的多分类数据,iris数据集。以下是导入库和数据的示例代码:

from sklearn import svm, datasets
from sklearn.model_selection import cross_val_score,cross_validate

# iris数据
X, y = datasets.load_iris(return_X_y=True)

# 设置参数搜索范围
param_grid = [
    {'kernel': ['linear', 'poly', 'rbf'], 'C': [0.1, 1.0, 10.0]},
]

# 进行网格搜索
grid_search = GridSearchCV(SVR(), param_grid, cv=5)
grid_search.fit(X, y)
best_params = grid_search.best_params_
print(best_params)
# {'C': 10.0, 'kernel': 'rbf'}

clf = SVR(kernel="rbf",C=10)

在上面代码中,我们使用iris数据集,对SVR模型进行网格搜索,找到合适的参数:{'C': 10.0, 'kernel': 'rbf'}
接下来我们在使用五折交叉验证对模型进行进一步评估。

第一种方法

使用cross_validate()方法进行验证,以下是示例代码:

# 多分类模型的评估指标
# 多分类模型的
scoring = ["f1_macro","precision_macro","recall_macro"]

cross_validate(clf, X, y, cv=5, scoring=scoring)

代码运行结果如下:

{'fit_time': array([0.00298905, 0.00498605, 0.00598025, 0.00199437, 0.0079782 ]),
 'score_time': array([0.00499058, 0.00897241, 0.00701547, 0.01296639, 0.01496029]),
 'test_f1_macro': array([0.96658312, 0.96658312, 0.96658312, 0.93333333, 1.        ]),
 'test_precision_macro': array([0.96969697, 0.96969697, 0.96969697, 0.93333333, 1.        ]),
 'test_recall_macro': array([0.96666667, 0.96666667, 0.96666667, 0.93333333, 1.        ])}
  • fit_time:模型训练时间
  • score_time:模型评估指标计算时间
  • test_f1_macro:- test_precision_macro:验证指标的test_f1_macro分数结果
  • test_precision_macro:验证指标的precision_macro分数结果
  • test_recall_macro:验证指标的recall_macro分数结果

第二种方法

使用KFlod和StratifiedKFold方法对数据进行交叉验证,两者的主要区别是,KFold是随机划分,对类别不均衡的数据,可能出现全是0标签,或者全是1标签的数据集。StratifiedKFold使用的是分层抽样,若数据集有4个类别,比例是2:3:3:2,则划分后的样本比例约是2:3:3:2。避免随机划分数据集出现的偶然性。

以下是用KFlod和StratifiedKFold方法对数据进行交叉验证的示例代码:

result = {
    'test_f1_macro':[],
    'test_precision_macro':[],
    'test_recall_macro':[]
}
for train, test in kfolder.split(X,y):
    X_train, X_test = X[train], X[test]
    y_train, y_test = y[train], y[test]
#      # 训练模型
    clf = clf.fit(X_train, y_train)

    # 在训练集上进行预测并计算R2和RMSE
    y_pred = clf.predict(X_test)
    
    f1 = f1_score( y_test, y_pred, average='macro' )
    p = precision_score(y_test, y_pred, average='macro')
    r = recall_score(y_test, y_pred, average='macro')
    result["test_f1_macro"].append(round(f1,2))
    result["test_precision_macro"].append(round(p,2))
    result["test_recall_macro"].append(round(r,2))
print(result)

代码运行结果如下:

{'test_f1_macro': [0.96, 0.97, 0.97, 0.97, 0.96],
 'test_precision_macro': [0.96, 0.97, 0.97, 0.97, 0.97],
 'test_recall_macro': [0.97, 0.97, 0.97, 0.97, 0.96]}

对比发现,使用第一种方法代码更简洁高效,第二种方法更加详细可控,找到你更喜欢的方式编程即可。

什么是五折交叉验证

在机器学习中,我们通常需要将数据集分为训练集和测试集。训练集用于训练模型,而测试集用于评估模型的性能。然而,使用一次性划分的训练集和测试集可能会导致模型在特定的数据集上表现良好,但在其他数据集上表现较差。这是由于模型可能过度拟合了训练集的特定模式,而无法泛化到其他数据集。

为了解决这个问题,五折交叉验证将数据集划分为五个相等大小的子集,其中四个子集用于训练模型,而剩下的一个子集用于测试模型。这个过程被重复五次,每次使用不同的子集作为测试集。最终,将五次测试结果的平均值作为模型的性能指标。

五折交叉验证的优点之一是可以更好地评估模型的泛化能力。通过使用多个不同的测试集,我们可以更准确地估计模型在未见过的数据上的性能。此外,五折交叉验证还可以更充分地利用数据集,因为每个样本都会在训练集和测试集中出现。

为什么要使用五折交叉验证

五折交叉验证有以下几个优点:

1. 减少过拟合:通过使用多个不同的训练集和测试集组合,可以减少模型对特定训练集的过拟合情况。

2. 更准确的评估模型性能:五折交叉验证可以提供更准确的模型性能评估,因为它使用了多个不同的测试集进行评估。

3. 更好的参数调优:通过使用五折交叉验证,我们可以更好地进行参数调优。我们可以在每一次交叉验证中使用不同的参数组合,并选择性能最好的参数组合。

如何使用五折交叉验证

使用五折交叉验证的步骤如下:

  1. 将数据集划分为五个相等大小的子集。

  2. 对于每一次交叉验证,选择其中的四个子集作为训练集,剩下的一个子集作为测试集。

  3. 使用训练集训练模型,并使用测试集评估模型的性能。

  4. 重复上述步骤五次,每次使用不同的子集作为测试集。

  5. 将五次评估的结果按照特定的计算方式计算作为最终的评估结果。

总结

五折交叉验证是一种常用的评估方法,它可以减少过拟合,提供更准确的模型性能评估,并帮助进行参数调优。在实际应用中,我们可以使用五折交叉验证来评估和改进我们的机器学习模型。文章来源地址https://www.toymoban.com/news/detail-647663.html

到了这里,关于一文学会sklearn中的交叉验证方法,cross_validate和KFlod实战案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习中的数学原理——模型评估与交叉验证

    惭愧惭愧!机器学习中的数学原理这个专栏已经很久没有更新了!前段时间一直在学习深度学习,paddlepaddle,刷题专栏跟新了,这个专栏就被打入冷宫了。这个专栏名为 白话机器学习中数学学习笔记 ,主要是用来分享一下我在 机器学习中的学习笔记及一些感悟,也希望对你

    2024年01月15日
    浏览(77)
  • Python 训练集、测试集以及验证集切分方法:sklearn及手动切分

    目录 方法一 方法二 需求目的:针对模型训练输入,按照6:2:2的比例进行训练集、测试集和验证集的划分。当前数据量约10万条。如果针对的是记录条数达上百万的数据集,可按照98:1:1的比例进行切分。 方法一:切分训练集和测试集,采用机器学习包sklearn中的train_test_split()函

    2024年02月04日
    浏览(21)
  • scikit-learn(sklearn)库中的网格搜索(Grid Search)自动化的方法来搜索最佳参数组合

    在机器学习中,调参是一个非常重要的步骤,它可以帮助我们找到最优的模型参数,从而提高模型的性能。然而,手动调参是一项繁琐且耗时的工作,因此,我们需要一种自动化的方法来搜索最佳参数组合。在这方面,scikit-learn(sklearn)库中的网格搜索(Grid Search)功能为我

    2024年02月11日
    浏览(27)
  • 手机怎么修改编辑PDF中的文字?两分钟教你学会编辑方法

    如何使用手机将PDF文件中的文字给编辑修改呢?大家在日常中使用PDF文件时离不开需要编辑文件中的内容,但是我们也不能保证身边时时刻刻都会有电脑,如果我们在没有电脑是情况下,遇到需要编辑一份PDF文件时该怎么办呢?这时候我们的手机就会派上重要的用场了,可以

    2024年02月13日
    浏览(23)
  • 一文带你搞懂sklearn.metrics混淆矩阵

    一般的二分类任务需要的评价指标有4个 accuracy precision recall f1-score 四个指标的计算公式如下   计算这些指标要涉及到下面这四个概念,而它们又构成了混淆矩阵 TP (True Positive) FP (False Positive) TN (True Negative) FN (False Negative) 混淆矩阵 预测值 0 1 实际值 0 TN FP 1 FN TP 这里我给出的

    2024年02月06日
    浏览(22)
  • 一文搞懂交叉编译,Windows和Linux的交叉编译

    在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(

    2024年02月07日
    浏览(39)
  • 【深度学习】实验04 交叉验证

    交叉验证是一种评估和选择机器学习模型性能的常用方法。它将数据集划分为训练集和验证集,并重复多次进行模型训练和性能评估,以获取更稳定和可靠的模型评估结果。 1.自定义划分 2.K折交叉验证 K-fold交叉验证是一种经典的模型选择方法,它主要用于评估机器学习模型

    2024年02月11日
    浏览(28)
  • 机器学习入门教学——交叉验证

    1、简介 交叉验证是在机器学习 建立模型和验证模型参数 时常用的办法,一般被用于评估一个机器学习模型的表现。更多的情况下,我们也用交叉验证来进行模型选择。 【注】在训练模型时,为了提高模型的质量,我们会将数据集划分为训练集、验证集和测试集。其中测试

    2024年02月09日
    浏览(19)
  • 使用交叉验证评估模型

    交叉验证(cross-validation)是一种常用的模型评估方法,在交叉验证中,数据被多次划分(多个训练集和测试集),在多个训练集和测试集上训练模型并评估。相对于单次划分训练集和测试集来说,交叉验证能够更准确、更全面地评估模型的性能。 本任务的主要实践内容:

    2023年04月13日
    浏览(15)
  • 【笔记】【机器学习基础】交叉验证

    交叉验证(cross-validation) 是一种 评估泛化性能 的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。在交叉验证中,数据被多次划分,并且需要训练多个模型。 最常用的交叉验证是 k 折交叉验证(k-fold cross-validation) ,其中 k 是由用户指定的数字,通常取

    2024年02月03日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包