GroupShuffleSplit#

class sklearn.model_selection.GroupShuffleSplit(n_splits=5, *, test_size=None, train_size=None, random_state=None)[來源]#

Shuffle-Group(s)-Out 交叉驗證迭代器。

根據第三方提供的群組,提供隨機的訓練/測試索引以分割資料。此群組資訊可以用來將樣本的任意領域特定分層編碼為整數。

舉例來說,群組可以是樣本的採集年份,因此可以針對基於時間的分割進行交叉驗證。

LeavePGroupsOutGroupShuffleSplit 之間的差異在於,前者使用大小為 p 的所有唯一群組子集來產生分割,而 GroupShuffleSplit 則生成使用者定義數量的隨機測試分割,每個分割都有使用者定義的唯一群組比例。

例如,相較於 LeavePGroupsOut(p=10),計算量較小的替代方案會是 GroupShuffleSplit(test_size=10, n_splits=100)

與其他交叉驗證策略相反,隨機分割不保證所有摺疊中的測試集會互斥,並且可能包含重疊的樣本。然而,對於相當大的數據集來說,這種情況仍然很有可能發生。

注意:參數 test_sizetrain_size 是指群組,而不是像 ShuffleSplit 中那樣的樣本。

請在使用者指南中閱讀更多資訊。

有關交叉驗證行為的可視化以及常見 scikit-learn 分割方法之間的比較,請參考 在 scikit-learn 中視覺化交叉驗證行為

參數:
n_splitsint,預設值=5

重新洗牌和分割的迭代次數。

test_sizefloat, int, 預設值=None

如果為 float,則應介於 0.0 和 1.0 之間,表示測試分割中要包含的群組比例(向上取整)。如果為 int,則表示測試群組的絕對數量。如果為 None,則該值設定為訓練大小的補數。如果 train_size 也為 None,則會設定為 0.2。

train_sizefloat 或 int,預設值=None

如果為 float,則應介於 0.0 和 1.0 之間,表示訓練分割中要包含的群組比例。如果為 int,則表示訓練群組的絕對數量。如果為 None,則該值會自動設定為測試大小的補數。

random_stateint、RandomState 實例或 None,預設值=None

控制產生的訓練和測試索引的隨機性。傳遞 int 以便在多次函數呼叫中產生可重現的輸出。請參閱詞彙表

另請參閱

隨機劃分 (ShuffleSplit)

洗牌樣本以建立獨立的測試/訓練集。

留 P 分組交叉驗證 (LeavePGroupsOut)

訓練集會排除 p 個群組的所有可能子集。

範例

>>> import numpy as np
>>> from sklearn.model_selection import GroupShuffleSplit
>>> X = np.ones(shape=(8, 2))
>>> y = np.ones(shape=(8, 1))
>>> groups = np.array([1, 1, 2, 2, 2, 3, 3, 3])
>>> print(groups.shape)
(8,)
>>> gss = GroupShuffleSplit(n_splits=2, train_size=.7, random_state=42)
>>> gss.get_n_splits()
2
>>> print(gss)
GroupShuffleSplit(n_splits=2, random_state=42, test_size=None, train_size=0.7)
>>> for i, (train_index, test_index) in enumerate(gss.split(X, y, groups)):
...     print(f"Fold {i}:")
...     print(f"  Train: index={train_index}, group={groups[train_index]}")
...     print(f"  Test:  index={test_index}, group={groups[test_index]}")
Fold 0:
  Train: index=[2 3 4 5 6 7], group=[2 2 2 3 3 3]
  Test:  index=[0 1], group=[1 1]
Fold 1:
  Train: index=[0 1 5 6 7], group=[1 1 3 3 3]
  Test:  index=[2 3 4], group=[2 2 2]
get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查看使用者指南,了解路由機制如何運作。

回傳值:
routingMetadataRequest

一個封裝路由資訊的 MetadataRequest

get_n_splits(X=None, y=None, groups=None)[原始碼]#

回傳交叉驗證器中的分割迭代次數。

參數:
X物件

永遠忽略,為了相容性而存在。

y物件

永遠忽略,為了相容性而存在。

groups物件

永遠忽略,為了相容性而存在。

回傳值:
n_splitsint

回傳交叉驗證器中的分割迭代次數。

set_split_request(*, groups: bool | None | str = '$UNCHANGED$') GroupShuffleSplit[原始碼]#

請求傳遞到 split 方法的中繼資料。

請注意,此方法僅在 enable_metadata_routing=True 時才相關(請參閱 sklearn.set_config)。請參閱使用者指南,了解路由機制如何運作。

每個參數的選項如下:

  • True:請求元數據,如果提供,則傳遞給 split。如果未提供元數據,則忽略請求。

  • False:不請求元數據,並且元估計器不會將其傳遞給 split

  • None:不請求元數據,如果用戶提供元數據,則元估計器會引發錯誤。

  • str:元數據應以給定的別名而不是原始名稱傳遞給元估計器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的請求。這允許您更改某些參數的請求,而不更改其他參數。

在 1.3 版本中新增。

注意

此方法僅在將此估計器用作元估計器的子估計器時相關,例如在 Pipeline 中使用。否則,它不會產生任何影響。

參數:
groupsstr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

用於 splitgroups 參數的元數據路由。

回傳值:
self物件

更新後的物件。

split(X, y=None, groups=None)[原始碼]#

產生索引,將數據分割成訓練集和測試集。

參數:
X形狀為 (n_samples, n_features) 的類陣列

訓練數據,其中 n_samples 是樣本數,而 n_features 是特徵數。

y形狀為 (n_samples,) 的類陣列,預設值為 None

用於監督式學習問題的目標變數。

groups形狀為 (n_samples,) 的類陣列

在將數據集分割為訓練/測試集時使用的樣本組標籤。

產生:
trainndarray

該分割的訓練集索引。

testndarray

該分割的測試集索引。

注意事項

隨機化交叉驗證分割器可能會在每次調用 split 時返回不同的結果。您可以通過將 random_state 設置為整數來使結果相同。