K折交叉驗證
模塊 |
---|---
sklearn.model_selection.KFold |
sklearn.model_selection.GroupKFold |
sklearn.model_selection.StratifiedKFold |
核心思想
- 將全部訓(xùn)練集S劃分成k個不相交的子集吼拥,假設(shè)S中訓(xùn)練樣例的個數(shù)為m隔显,那么每一個子集有m/k個訓(xùn)練樣例框仔,相應(yīng)的子集成為{s1, s2, s3...,sk}乞封。
- 每次從分好的子集里面酥诽,拿出一個作為測試集匙隔,其他k-1個作為訓(xùn)練集爽锥。
- 在k-1個訓(xùn)練集上訓(xùn)練處學習器模型涌韩。
- 把這個模型放到測試集上,得到分類率氯夷。
- 計算k次求得的分類率的平均值臣樱,作為該模型或者假設(shè)函數(shù)的真實分類率。
這個方法充分利用了所有的樣本腮考,但是計算繁瑣雇毫,需要訓(xùn)練k次,測試k次踩蔚。
留一法
模塊 |
---|---
sklearn.model_selection.LeaveOneOut |
sklearn.model_selection.LeaveOneGroupOut |
sklearn.model_selection.LeavePOut |
sklearn.model_selection.LeavePGroupsOut |
核心思想
留一法驗證(Leave-one-out,L00):假設(shè)有N個樣本棚放,將每一個樣本作為測試樣本,其他N-1個樣本作為訓(xùn)練樣本馅闽。這樣得到N個分類器飘蚯,N個測試結(jié)果馍迄。用這N個結(jié)果的平均值來衡量模型的性能。
如果LOO與k-fold CV比較局骤,LOO在N個樣本上簡歷N個模型而不是K個攀圈。更進一步,N個模型的每一個都是在N-1個樣本上訓(xùn)練得峦甩,而不(k-1)n/k赘来。兩種方法中,假定k不是很大并且k<<N凯傲。LOO比k-old更加耗時犬辰。
留P法驗證(Leave-p-out):有N個樣本,將每p個樣本作為測試樣本冰单,其他N-P個樣本作為訓(xùn)練樣本忧风,這樣得到Cnp個訓(xùn)練測試對。當P>1時球凰,測試集將會發(fā)生重疊,當P=1時腿宰,就變成了留一法呕诉。
隨機劃分法
模塊 |
---|---
sklearn.model_selection.ShuffleSplit |
sklearn.model_selection.GroupShuffleSplit |
sklearn.model_selection.StratifiedShuffleSplit |
核心思想
ShuffleSplit迭代器產(chǎn)生指定數(shù)量的獨立的train / test 數(shù)據(jù)集劃分。首先對樣本全體隨機打亂吃度,然后在劃分出 train / test 對甩挫。可是使用隨機數(shù)種子randon_state來控制隨機數(shù)序列發(fā)生器使得運算結(jié)果可重現(xiàn)椿每。
ShuffleSplit是KFold交叉驗證的比較好的替代伊者,它允許更好的控制迭代次數(shù)和train / test樣本比例。
StratifiedShuffleSplit是ShuffleSplit的一個變體间护,返回分層劃分亦渗,也就是在創(chuàng)建劃分的時候要保證每個劃分中類的樣本比例與整體數(shù)據(jù)集中的原始比例保持一致。