您好,欢迎您来到国盈网!
官网首页 小额贷款 购房贷款 抵押贷款 银行贷款 贷款平台 贷款知识 区块链

国盈网 > 小额贷款 > 交叉验证是干嘛的,交叉验证的使用步骤

交叉验证是干嘛的,交叉验证的使用步骤

小额贷款 岑岑 本站原创

交叉验证是一种统计方法或重采样程序,用于评估机器学习模型在有限数据样本上的性能。它在建立机器学习模型中起着关键作用。通过比较和选择适合于特定预测建模问题的模型,评估这些模型的预测性能。这个过程不仅限于模型的训练阶段,还涉及到在新数据集(测试数据)上评估模型的性能。使用交叉验证的主要动机是在拟合模型时将其保留在一个训练数据集中,以便更全面地了解模型的泛化能力和鲁棒性。该方法有助于降低过拟合风险,提高模型的可靠性和泛化性能。

交叉验证的主要目的是防止过拟合,提高模型的泛化能力。

当模型在训练数据上表现良好,但在新的未知数据上表现不佳时,我们面临过拟合的问题。过拟合意味着模型过于依赖训练数据,不能很好地推广到从未见过的新数据。

通常,我们使用训练-测试分割的方法来评估模型的性能。同一数据集分为训练集和测试集。模型在训练集上学习参数,最终的性能评估在模型从未见过的测试集上进行。

除了训练测试集之外,还有一个重要的组件是验证集。验证集用于尝试超参数的不同组合,并进行多个模型训练来调整超参数。这有助于优化模型的性能,以更好地适应未知数据。

为了实现这种划分,我们可以使用Scikit中的train_test_split()函数——学会调用两次,将整个数据集划分为训练集、测试集和验证集。该方法有助于更全面地评价模型的性能和泛化能力。

从sklearn.model_selection导入train_test_splitX_train,X_rem,y_train,y_rem = train_test_split(X,Y,train_size=0.70)X_valid,X_test,y_valid,Y _ test = train _ test _ split (x _ rem,y_rem,test _ size = 0.15)在机器学习的实际过程中,不是按照上述方式创建单个验证集,而是将训练集(有时是整个数据集)分成多个折叠(子集),并且我们在不同的迭代中改变验证折叠。平均每次迭代的评估分数,以获得更稳健的模型评估分数,这是交叉验证。

它被不同的分割和折叠方法命名为不同的交叉验证技术。交叉验证方法的选择取决于具体问题的规模、性质和数据。

1.保留验证(培训和测试分离)/坚持验证(培训-测试分离)

数据分段策略的最简单形式。我们只是将整个数据集分成训练和测试部分。我们在训练集上拟合模型,并在测试集上评估模型。在这种情况下,测试被集成到一个验证集中。

当数据集很小时,大约70-80%的实例应该分配给训练集。当数据集非常大时,大约95-98%的实例应该分配给训练集。根据经验,分配给模型训练的数据越多,模型越好!

来自sklearn。model _ selection导入train _ test _ split _ train,x _ test,y _ train,y _ test = train _ test _ split (x,y,train _ size = 0.80)保留验证法存在一些不足。

保留验证不适用于不平衡的数据集。分类数据集可能遭受类别不平衡。因此,训练集可能包含同一类的所有实例,并且该模型将不具有对新的看不见的数据的概括能力。保留验证可能会产生很大的差异和不一致的结果。这是因为分割是在数据点的不同组合上完成的,训练集不会完全代表原始数据集。2.k倍交叉验证/k倍交叉验证

这是数据科学家最流行和最常用的交叉验证技术。在K折叠交叉验证中,原始数据集或训练数据集被分成K个折叠(子集)。然后,我们训练模型k次(迭代),得到k次性能估计。在每次迭代中,我们使用一个折叠(验证折叠)来评估模型,剩余的k-1个折叠用于训练模型。我们还在每次迭代中改变验证折叠,以更好地表示数据集。对每次迭代中记录的k个性能估计进行平均,以获得更稳健的模型评估分数。

from sklearn.linear_model导入LogisticRegression from sk learn . model _ selection导入KFold,cross _ val _ score lor = LogisticRegression()k fold _ validation = k fold(10)# init k results的编号=cross_val_score(lor,X,y,cv = k fold _ validation)print(& # 39;每个数据分割10个结果:& # 39;,结果)打印(& # 39;模型的平均精度:& # 39;,'{:. 2f } % & # 39;的主要缺点。格式(NP。均值(结果)* 100) K倍交叉验证是将数据随机分成若干倍,对于不平衡数据集表现不佳。

3.分层K重交叉验证/分层K重交叉验证

这类似于K-fold交叉验证,但是不同之处在于每个fold保留了整个数据集中类标签实例的百分比。因此,分层K-fold交叉验证对于类不平衡数据集是非常有效的。

我们可以使用Scikit-learn StratifiedKFold()函数来执行层次K-fold交叉验证。折叠数在n_splits参数中指定。

来自sklearn。模型_选择导入Stratifiedkfold SKF = Stratifiedkfold(n _ splits = 5,shuffle = true) SKF。Split (x) # x表示整个数据集4。留一交叉试验/留一交叉验证(LOOCV)。

LOOCV是K重交叉检验的一个特例,其中k=n(数据点总数)。在LOOCV,一个数据点被用作验证折叠,剩余的n-1个折叠被用作训练集。总迭代次数也等于n。

可以使用sci kit-leave one out()函数执行LOOCV。

来自sklearn。model _ selection import leave one out Loo = leave one out()Loo。Split (x) # x表示整个数据集5。留p-out交叉验证。

留p-out交叉验证的工作方式与K-fold CV完全相同,但每个fold都有P个数据点,而不是将数据集分成K个fold。在每次迭代中,P个数据点被用作验证集,剩余的np个数据点被用于训练模型。

我们举个例子区分k倍CV,留一个CV,留p-out CV。假设我们的数据集中有100个数据点。

在K倍交叉检验中,如果k=5,则每个折叠中有20 (100/5)个数据点。在简历中,每个文件夹中只有一个数据点。在留p-出CV中,如果p=5,则每个折叠中有5个数据点。您可以使用scikit-learnleavepour()函数来执行Leave-p-out CV。

来自sklearn。model _ selection import LeavePoutlpo = LeavePout(5)LPO。拆分(x) 6。蒙特卡洛(随机排列)交叉验证/蒙特卡洛(随机许可)交叉验证。

蒙特卡罗交叉验证(Monte Carlo CV)将数据集分为训练集和验证集,类似于保留验证,但通过多次重复这个过程(迭代)来提高鲁棒性。与保留验证一样,我们需要指定用作训练集和/或验证集的原始数据集的百分比。

分裂的迭代次数也可以定义为一个超参数。更多的迭代可以带来更好的性能,但也会增加计算成本。

因为蒙特卡罗CV在每次迭代中会被随机划分,所以同一个数据点可能会多次出现在测试折叠中。这和K折CV不一样!

来自sklearn。Model _ SelectionImport洗牌拆分MC =洗牌拆分(n _ splits = 10,test _ size = 0.15) MC。Split (x) # x表示整个数据集7。时序交叉验证/时序交叉验证。

上述交叉验证方法可能不适合评估时间序列模型,因为时间序列数据中数据的顺序非常重要。这就是引入时间序列交叉验证的原因。

在时序交叉验证中,折叠是由前向链接创建的。我们从一小部分数据开始作为训练文件夹,然后使用数据的一个更小的子集作为验证文件夹。验证折叠将随着时间的推移逐渐扩展,之前的验证折叠将在下一次迭代中合并到训练折叠中。

我们可以使用Scikit-learn中的TimeSeriesSplit()函数来执行时间序列交叉验证。分区的数量可以由超参数n_splits指定。该方法考虑了时间序列数据的自然流动,使评价模型的性能更加可靠。

来自sklearn。模型_选择导入时间序列分割TSCV =时间序列分割(n _ splits = 5) TSCV。Split (x)交叉验证是评估机器学习模型性能的关键方法,可以防止过拟合,提高泛化能力。常见的技术包括保留验证、K-fold交叉验证、分级K-fold交叉验证、留一交叉验证、留p-out交叉验证、蒙特卡罗交叉验证和时间序列交叉验证。这些方法通过多次迭代,综合考虑训练和验证,获得更稳健的模型评估。选择合适的方法取决于问题的规模、性质和数据。

温馨提示:注:内容来源均采集于互联网,不要轻信任何,后果自负,本站不承担任何责任。若本站收录的信息无意侵犯了贵司版权,请给我们来信(j7hr0a@163.com),我们会及时处理和回复。

原文地址"交叉验证是干嘛的,交叉验证的使用步骤":http://www.guoyinggangguan.com/xedk/256519.html

微信扫描二维码关注官方微信
▲长按图片识别二维码