交叉验证与网格搜索

Python 机器学习 交叉验证网格搜索 Python 的机器学习项目中,交叉验证(Cross-Validation)和网格搜索(Grid Search)是两种重要的技术,通常用于模型选择和超参数优化。交叉验证网格搜索也是机器学习中常用的两种技术,可以有效地提高模型的性能。 阅读详情

交叉验证
    交叉验证(Crossvalidation)是一种评估统计分析、机器学习算法对独立于训练数据的数据集的泛化能力(generalize),能够避免过拟合问题。
    交叉验证一般要尽量满足:
    1)训练集的比例要足够多,一般大于一半
    2)训练集和测试集要均匀抽样

   交叉验证主要分成以下几类:

   1)Double cross-validation
Double cross-validation也称2-foldcross-validation(2-CV),作法是将数据集分成两个相等大小的子集,进行两回合的分类器训练。在第一回合中,一个子集作为训练集,另一个作为测试集;在第二回合中,则将训练集与测试集对换后,再次训练分类器,而其中我们比较关心的是两次测试集的识别率。不过在实际中2-CV并不常用,主要原因是训练集样本数太少,通常不足以代表母体样本的分布,导致测试阶段识别率容易出现明显落差。此外,2-CV中子集的变异度大,往往无法达到「实验过程必须可以被复制」的要求。

   2)k-folder cross-validation(k折交叉验证)
K-fold cross-validation (k-CV)则是Doublecross-validation的延伸,做法是将数据集分成k个子集,每个子集均做一次测试集,其余的作为训练集。k-CV交叉验证重复k次,每次选择一个子集作为测试集,并将k次的平均交叉验证识别率作为结果。
优点:所有的样本都被作为了训练集和测试集,每个样本都被验证一次。10-folder通常被使用。

   3)leave-one-out cross-validation(LOOCV留一验证法)
假设数据集中有n个样本,那LOOCV也就是n-CV,意思是每个样本单独作为一次测试集,剩余n-1个样本则做为训练集。
   优点:
   1)每一回合中几乎所有的样本皆用于训练model,因此最接近母体样本的分布,估测所得的generalizationerror比较可靠。 因此在实验数据集样本较少时,可以考虑使用LOOCV。
   2)实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
但LOOCV的缺点则是计算成本高,为需要建立的models数量与总样本数量相同,当总样本数量相当多时,LOOCV在实作上便有困难,除非每次训练model的速度很快,或是可以用平行化计算减少计算所需的时间。

   libsvm提供了 void svm_cross_validation(const struct svm_problem*prob, const struct svm_parameter *param, int nr_fold, double*target)方法,参数含义如下:

prob:待解决的分类问题,就是样本数据。
param:svm训练参数。
nr_fold:顾名思义就是k折交叉验证中的k,如果k=n的话就是留一法了。
target:预测值,如果是分类问题的话就是类别标签了。

参数选择
   使用svm,无论是libsvm还是svmlight,都需要对参数进行设置。以RBF核为例,在《APractical Guide to Support Vector Classication》一文中作者提到在RBF核中有2个参数:C和g。对于一个给定的问题,我们事先不知道C和g取多少最优,因此我们要进行模型选择(参数搜索)。这样做的目标是找到好的(C,g)参数对,使得分类器能够精确地预测未知的数据,比如测试集。需要注意的是在在训练集上追求高精确度可能是没用的(意指泛化能力)。根据前一部分所说的,衡量泛化能力要用到交叉验证。

    在文章中作者推荐使用“网格搜索”来寻找最优的C和g。所谓的网格搜索就是尝试各种可能的(C,g)对值,然后进行交叉验证,找出使交叉验证精确度最高的(C,g)对。“网格搜索”的方法很直观但是看起来有些原始。事实上有许多高级的算法,比如可以使用一些近似算法或启发式的搜索来降低复杂度。但是我们倾向于使用“网格搜索”这一简单的方法:
1)从心理上讲,不进行全面的参数搜索而是使用近似算法或启发式算法让人感觉不安全。
2)如果参数比较少,“网格搜索”的复杂度比高级算法高不了多少。
3)“网格搜索”可并行性高,因为每个(C, g)对是相互独立的。

说了那么大半天,其实“网格搜索”就是n层循环,n是参数个数,仍然以RBF核为例,编程实现如下:

for(double c=c_begin;c<c_end;c+=c_step)
{
for(double g=g_begin;g<g_end;g+=g_step)
{
//这里进行交叉验证,计算精确度。
}
}

通过上述两层循环找到最优的C和g就可以了。

使用Cross-Validation时常犯的错误
由于实验室许多研究都有用到evolutionary algorithms(EA)与classifiers,所使用的fitnessfunction中通常都有用到classifier的辨识率,然而把cross-validation用错的案例还不少。前面说过,只有trainingdata才可以用于model的建构,所以只有training data的辨识率才可以用在fitnessfunction中。而EA是训练过程用来调整model最佳参数的方法,所以只有在EA结束演化后,model参数已经固定了,这时候才可以使用testdata。(当然如果想造假的话就把测试集的数据参与进模型训练,这样得到的模型效果多少会好些,因为模型本身已经包含了测试集的先验知识,测试集对它来说不再是未知数据。)

那EA跟cross-validation要如何搭配呢?Cross-validation的本质是用来估测(estimate)某个classificationmethod对一组dataset的generalizationerror,不是用来设计classifier的方法,所以cross-validation不能用在EA的fitnessfunction中,因为与fitness function有关的样本都属于training set,那试问哪些样本才是testset呢?如果某个fitnessfunction中用了cross-validation的training或test辨识率,那么这样的实验方法已经不能称为cross-validation了。

EA与k-CV正确的搭配方法,是将dataset分成k等份的subsets后,每次取1份 subset作为testset,其余k-1份作为training set,并且将该组training set套用到EA的fitnessfunction计算中(至于该training set如何进一步利用则没有限制)。因此,正确的k-CV会进行共k次的EA演化,建立k个classifiers。而k-CV的test辨识率,则是k组testsets对应到EA训练所得的k个classifiers辨识率之平均值。

http://blog.sina.com.cn/s/blog_6871892f0100te8h.html

机器学习:网格搜索交叉验证 一、网格搜索 1. 超参数的定义 在机器学习中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。 比如在使用梯度下降法的神经网络中,学习率alpha就是一个超参数。 通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。 2.什么是网格搜索 了解了超参数的定义,网格搜索就可以很容易理解。 简单来讲,网格搜索是一种调参手段,一般是调超参数。它利用的是一种十分简单暴力的方法:穷举搜索。在所有候选的参数选择中,通过循环变脸,尝试每一种可能性,表现最好的参数就是 阅读详情

相关推荐

交叉验证网格搜索

交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成4份,其中一份作为验证集。然后经过4次(组)的测试,每次都更换不同的验证集。即得到4组模型的结果,取平均值作为最终结果。又称4折交叉验证。通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。

weixin_46870724的博客 1245

机器学习学习笔记之——模型评估改进之交叉验证网格搜索

交叉验证网格搜索 前面讨论了监督学习和无监督学习的基本原理,并探索了多种机器学习算法,本章我们深入学习模型评估参数选择。 我们将重点介绍监督方法,包括回归分类,因为在无监督学习中,模型评估选择通常是一个非常定性的过程。 到目前为止,为了评估我们的监督模型,我们使用 train_test_split 函数将数据集划分为训练集和测试集,在训练集上调用 fit 方法来构建模型,并且在测试集上用 score 方法来评估这个模型——对于分类问题而言,就是计算正确分类的样本所占的比例。下面是这个 过程的一个示例

前尘忆梦的博客 3250

【python机器学习 5-2】参数调整——交叉验证网格搜索

模型参数机器学习中有两种类型的模型参数,分为模型自身参数和超参数模型自身参数模型自身参数,通过样本学习得到的参数。 如:逻辑回归及神经网络中的权重及偏置的学习等超参数超参数是模型框架的参数,通常由手工设定。 如kmeans中的k,神经网络中的网络层数及每层的节点个数。调参调的都是k,c这样的超参数。调整参数我们知道进行机器学习最重要的就是调整参数得到好的学习模型,这里调整参数指的就是超参数

flora 8916

网格搜索交叉验证

网格搜索交叉验证

RayChiu757374816的博客 3164

机器学习——网格搜索交叉验证

机器学习——网格搜索交叉验证

qq_54000767的博客 3150

快速了解——交叉验证网格搜索 以及损失函数

了解交叉验证网格搜索,学习线性回归中的损失函数及其优化方法,包括梯度下降法、求方程法,内含具体API。

linxinyide的博客 1631

sklearn库之交叉验证网格搜索

文章目录一、交叉验证(主要用到sklearn.model_selection)1.1 k 折交叉验证1.2 分层k折交叉验证1.3 其他策略二、网格搜索2.1 简单网格搜索: 遍历法2.2 引入验证集2.3 带交叉验证网格搜索2.4 其他情况三、评估指标评分(主要用到sklearn.metrics)3.1 二分类指标(本节重点)3.2 多分类指标3.3 回归指标3.4 在模型选择中使用评估指标四、总结 主要内容 用途 交叉验证 一种更可靠的评估泛化性能的方法 网格

xylbill97的博客 2183

网格搜索调参法交叉验证

网格搜索调参法交叉验证 网格搜索定义: 网格搜索法是指定参数值的一种穷举搜索方法,通过将估计函数的参数通过交叉验证进行优化来得到最优的学习算法。 步骤: ·将各个参数可能的取值进行排列组合,列出所有可能的组合结果生成“网格”。 ·然后将各组合用于SVM训练,使用交叉验证对表现进行评估。 ·在拟合函数尝试了所有的参数组合后,返回一个合适的分类器,自动调整至最佳(性能度量)参...

小红花yu 1826

机器学习-交叉验证网格搜索(带案例)

八、交叉验证网格搜索 1.什么是交叉验证? 就是将拿到的训练数据,分成训练集和验证集,比如将一份数据分成4份,其中一份作为验证集。然后经过过4次测试,每次都更换不同的验证集。即得到4次模型的结果,取平均值作为最终结果。又称4折交叉验证。 2.为什么要做交叉验证交叉验证的目的:为了让被评估的模型更加准确可信。 问题:这个只是让被评估的模型更加准确可信,那么怎么选择或者调优参数呢? 3.什么是网...

王涛涛的博客 3990

什么是交叉验证?什么是网格搜索

目录1、什么是交叉验证(cross validation)1.1 分析1.2 为什么需要交叉验证2、什么是网格搜索(Grid Search)3、交叉验证网格搜索(模型选择调优)API: 1、什么是交叉验证(cross validation) 交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成4份,其中一份作为验证集。然后经过4次(组)的测试,每次都更换不同的验证集。即得到4组模型的结果,取平均值作为最终结果。又称4折交叉验证。 1.1 分析 我们知道数据分为训练集和测试集,但是为了.

Ma Sizhou 1463

交叉验证 网格搜索

1.交叉验证背景 在机器学习算法中,当数据量不充分时,需要对数据进行重复使用,就出现了交叉验证方法(Cross Validation),简称CV。交叉验证顾名思义就是重复使用数据,把数据分为训练集(Trading Set)、验证集(Validation Set)、测试集(Test Set),每次随机选出n组数据,用训练集训练出n个模型,测试集对n个模型进行评价,选出最终模型。 2.交叉验证方法...

hellocsz的博客 566

机器学习(四)之参数选择:交叉验证网格搜索

文章目录0 本文简介1 交叉验证1.1 思想和实现1.2 优缺点1.3 分层k折交叉验证1.4 留一法交叉验证1.5 打乱划分交叉验证1.6 分组交叉验证2 网格搜索2.1 简单网格搜索2.2 带交叉验证网格搜索 0 本文简介 主要介绍了在调参时用到的交叉验证网格搜索网格搜索是一种调节监督模型参数以获得最佳泛化性能的有效方法。 1 交叉验证 1.1 思想和实现 交叉验证(cross-vali...

snail9610的博客 6860

交叉验证网格搜索

之前我们训练模型的做法: 整个数据集分成两部分,一部分用于训练,一部分用于验证,训练集(training set)和测试集(test set)。 训练集和测试集的划分方法不够好,可能不能找到最好的模型参数。训练的数据量越大,训练出来的模型通常越好。 原理: 将所有数据集分成5份 不重复地每次取其中1份做测试集,其他4做训练集训练模型,之后计算该模型在测试集上的MSE 将5次的MSE取平均得到最后的MSE ...

FlatTiger的博客 2818

【Python机器学习】模型评估改进——带交叉验证网格搜索

由于带交叉验证网格搜索是一种常用的调参方法,因此scikit-learn提供了GridSearchCV类,它以估计器的形式实现了这种方法。要使用GridSearchCV类,我们首先要用一个字典指定要搜索的参数。然后GridSearchCV会执行所有必要的模型拟合。字典的键是我们想要尝试的参数设置。

weixin_39407597的博客 3163

sklearn-SVM 模型保存、交叉验证网格搜索

目录 一、sklearn-SVM 1、SVM模型训练 2、SVM模型参数输出 3、SVM模型保存读取 二、交叉验证网络搜索 1、交叉验证 1)、k折交叉验证(Standard Cross Validation) 2)、留一法交叉验证(leave-one-out) 3)、打乱划分交叉验证(shufflfle-split cross-validation) 2、交叉验证网络搜索 1)简单网格搜索: 遍历法 2)其他情况 一、sklearn-SVM 1、SVM模型训练 ...

知识搬运者 1万+

交叉验证(Cross-Validation)和网格搜索(Grid Search)

交叉验证是一种用于评估和验证机器学习模型性能的统计分析方法。其核心目标是在有限的数据样本下,尽可能地获得一个稳定且无偏的模型性能估计,即模拟模型在**未知数据(unseen data)**上的表现。它解决了传统“一次性划分”训练集和验证集(Hold-out Method)所带来的两个主要问题:交叉验证通过一种**重复使用(Resampling)**数据的策略,让每个数据子集都有机会同时扮演“训练集”和“验证集”的角色,从而得到更鲁棒的评估结果。K-折交叉验证交叉验证中最常用的一种形式。其流程如下:数据分割

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 1866

交叉验证网格搜索

交叉验证:对于网格中的每一个超参数组合,使用交叉验证来评估模型的性能。交叉验证是将数据集分成多个子集,然后对每个子集作为测试集,其余作为训练集,重复这个过程多次并计算模型的平均性能。这些超参数是模型的内部参数,不是通过训练数据直接学习得到的,而是通过调整来优化模型性能的参数。创建网格:基于这些超参数的范围,创建一个超参数的网格。最终模型训练:使用选定的最佳超参数组合在整个训练集上训练最终的模型。选择最佳组合:在所有交叉验证完成后,选择平均性能最好的超参数组合。# 使用最佳参数的模型进行预测。

2402_84568314的博客 761
上一篇: 计算机快捷键
下一篇: 通过SQL Server命令行启动及停止SQL服务的方法
Yaroo
博客等级 码龄11年 88粉丝 115原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值