正文参考:
3359 sci kit-learn.org/stable/modules/cross _ validation.html # stratified-k-fold
《python机器学习基础教程》和
是的,开始学习今天的cv!
本文需要一些CV的基础概念,以后看会更有收获。
在开始之前,我们必须先明确。
交叉验证不是构建可应用于新数据的模型的方法。 交叉检查不返回模型。 调用cv时,内部会构建多个模型,但交叉验证的目的只是评估给定算法在特定数据集上经过训练后泛化性能的好坏。
补充:以上内容没有问题,但在部分ML比赛中,会通过CV的内部模型进行预测。 也就是说,有可能使用内部模型。
我认为CV的学习途径应该是这样的:
必须知道k-folds(k层交叉验证)和stratified k-folds cv (分层k折cv )这两种重要方式。 而对于shufflesplit,它只是一种采用方式,称为随机抽样方式,或者上述两种基本方式的装饰。 当然,也可以保留一种方法,将cv分组,但这里只讨论上面的k-folds(k层交叉验证)和stratified k-folds cv (逐层k折cv )。
最基本的k形转弯交叉验证:
能看到。 在训练集中,被分为5等分。 注意是按顺序分开的。 之所以要强调这一点,是因为如果这样划分也有不妥的地方,稍后会提到。 之后,每次都有4个训练集,剩下的一个叫做验证集或训练集。
五个模型有五个结果:
froms klearn.model _ selectionimportcross _ val _ score clf=SVM.SVC (kernel=' linear ',C=1) scores=cross _ val
问题是它是按顺序分开的。 或者请看这张图:
这是sklearn官网的图,从图中可以看出,折中的各分很可能是同一类,也就是说没有意义。 因此,有shufflesplit和分层stratified交叉检查两种方式。 首先请看shuffle:
froms klearn.model _ selectionimportshufflesplitx=NP.arange (10 ) ss=shufflesplit(n_splits=5,test_size=
[ 9167305 ] [ 284 ] [ 2980674 ] [ 351 ] [ 4510697 ] [ 238 ] [ 2758034 ] [ 619 ] [ 410693 ] [ 527 ]可知本次分组中没有5次扰乱顺序的cv
官方网站也说ss是传统k折的好替代。 同时,他也可以避免种类的干扰,但是因为他是随机的,所以也有很大的可能产生和k-turn相似的结果。 我该怎么办? 如果我要求k周转中的训练集测试集的种类class尽可能均匀呢?
stratified来了。 stratified的直译也就是阶层的意思。
这张图清楚地显示了标准k成的不足。 正如您所看到的,每个训练集只有一种,但测试集是其他两种。 怎么能预测呢?
反过来说stratified。 不会发生这个问题。 这将确保每个折中类别之间的比率与整个数据集的比率相同。
显示stratified的官方网站代码和图示:
当然,这张图的意思和前面的图一样。 我觉得前面的照片更容易理解。
代码:
froms klearn.model _ selectionimportstratifiedkfoldx=NP.ones (10 ) y=[ 0,0,0,0,0,1,1,1,1 ] SKF=testesteststttesttttttestttestttttttttttifififififfffid
使用分层k形交叉验证而不是普通的k形交叉验证来评估分类器通常是一个好主意。 除了stratified之外,还可以使用shufflesplit。
对于回归问题,scikit-learn缺省使用标准的k形交集验证。 关于回归问题,有些问题也需要使用stratified,所以让我们来看看具体的要求。 例如,在最近参加的比赛中,我发现对于这场比赛,stratified是一个很好的选择,这场比赛是一个回归问题。