差異

2017-08-30 59 views
3

由於從標題我想知道是什麼差異

StratifiedKFold與參數洗牌之差=真

StratifiedKFold(n_splits=10, shuffle=True, random_state=0) 

StratifiedShuffleSplit

StratifiedShuffleSplit(n_splits=10, test_size=’default’, train_size=None, random_state=0) 

和使用StratifiedShuffleSplit

+1

一個是k重迭代器,其將分割數據k次,和其它分裂僅單個時間在StratifiedShuffleSplit –

+0

MMM可以設置分割數...從sklearn網頁:StratifiedShuffleSplit:該交叉驗證對象是StratifiedKFold和ShuffleSplit的合併,它返回分層隨機倍。通過保留每個班級的樣本百分比來製作摺疊。 – gabboshow

+0

啊哈,是的,是我不好。但是它仍然寫在StratifiedShuffleSplit文檔中,它指出:「這個交叉驗證對象是StratifiedKFold和ShuffleSplit的合併,它返回分層的隨機摺疊,摺疊是通過保留每個類的樣本的百分比來完成的。」 –

回答

9

的優點是什麼?在KFolds中,每個測試集都不應該重疊,即使是隨機播放。與KFolds和洗牌,數據在開始混洗一次,然後分割成期望分割的數量。測試數據總是其中的一個分組,火車數據是其餘部分。

在ShuffleSplit,數據被混洗的每個時間,然後分裂。這意味着測試集可能會在分割之間重疊。

爲差異的一個例子見該塊。請注意ShuffleSplit測試集中元素的重疊。

splits = 5 

tx = range(10) 
ty = [0] * 5 + [1] * 5 

from sklearn.model_selection import StratifiedShuffleSplit, StratifiedKFold 
from sklearn import datasets 

kfold = StratifiedKFold(n_splits=splits, shuffle=True, random_state=42) 
shufflesplit = StratifiedShuffleSplit(n_splits=splits, random_state=42, test_size=2) 

print("KFold") 
for train_index, test_index in kfold.split(tx, ty): 
    print("TRAIN:", train_index, "TEST:", test_index) 

print("Shuffle Split") 
for train_index, test_index in shufflesplit.split(tx, ty): 
    print("TRAIN:", train_index, "TEST:", test_index) 

輸出:

KFold 
TRAIN: [0 2 3 4 5 6 7 9] TEST: [1 8] 
TRAIN: [0 1 2 3 5 7 8 9] TEST: [4 6] 
TRAIN: [0 1 3 4 5 6 8 9] TEST: [2 7] 
TRAIN: [1 2 3 4 6 7 8 9] TEST: [0 5] 
TRAIN: [0 1 2 4 5 6 7 8] TEST: [3 9] 
Shuffle Split 
TRAIN: [8 4 1 0 6 5 7 2] TEST: [3 9] 
TRAIN: [7 0 3 9 4 5 1 6] TEST: [8 2] 
TRAIN: [1 2 5 6 4 8 9 0] TEST: [3 7] 
TRAIN: [4 6 7 8 3 5 1 2] TEST: [9 0] 
TRAIN: [7 2 6 5 4 3 0 9] TEST: [1 8] 

至於何時使用它們,我傾向於使用KFolds任何交叉驗證,我用ShuffleSplit具有用於我的列車/試驗組分割的2分割。但我相信這兩者都有其他用例。