GroupShuffleSplit#

classsklearn.model_selection.GroupShuffleSplit(n_splits=5,*,test_size=None,train_size=None,random_state=None)[source]#

Shuffle-Group(s)-Out cross-validation iterator.

Provides randomized train/test indices to split data according to athird-party provided group. This group information can be used to encodearbitrary domain specific stratifications of the samples as integers.

For instance the groups could be the year of collection of the samplesand thus allow for cross-validation against time-based splits.

The difference betweenLeavePGroupsOut andGroupShuffleSplit is thatthe former generates splits using all subsets of sizep unique groups,whereasGroupShuffleSplit generates a user-determined number of randomtest splits, each with a user-determined fraction of unique groups.

For example, a less computationally intensive alternative toLeavePGroupsOut(p=10) would beGroupShuffleSplit(test_size=10,n_splits=100).

Contrary to other cross-validation strategies, the random splitsdo not guarantee that test sets across all folds will be mutually exclusive,and might include overlapping samples. However, this is still very likely forsizeable datasets.

Note: The parameterstest_size andtrain_size refer to groups, andnot to samples as inShuffleSplit.

Read more in theUser Guide.

For visualisation of cross-validation behaviour andcomparison between common scikit-learn split methodsrefer toVisualizing cross-validation behavior in scikit-learn

Parameters:
n_splitsint, default=5

Number of re-shuffling & splitting iterations.

test_sizefloat, int, default=None

If float, should be between 0.0 and 1.0 and represent the proportionof groups to include in the test split (rounded up). If int,represents the absolute number of test groups. If None, the value isset to the complement of the train size. Iftrain_size is also None,it will be set to 0.2.

train_sizefloat or int, default=None

If float, should be between 0.0 and 1.0 and represent theproportion of the groups to include in the train split. Ifint, represents the absolute number of train groups. If None,the value is automatically set to the complement of the test size.

random_stateint, RandomState instance or None, default=None

Controls the randomness of the training and testing indices produced.Pass an int for reproducible output across multiple function calls.SeeGlossary.

See also

ShuffleSplit

Shuffles samples to create independent test/train sets.

LeavePGroupsOut

Train set leaves out all possible subsets ofp groups.

Examples

>>>importnumpyasnp>>>fromsklearn.model_selectionimportGroupShuffleSplit>>>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)>>>fori,(train_index,test_index)inenumerate(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()[source]#

Get metadata routing of this object.

Please checkUser Guide on how the routingmechanism works.

Returns:
routingMetadataRequest

AMetadataRequest encapsulatingrouting information.

get_n_splits(X=None,y=None,groups=None)[source]#

Returns the number of splitting iterations in the cross-validator.

Parameters:
Xobject

Always ignored, exists for compatibility.

yobject

Always ignored, exists for compatibility.

groupsobject

Always ignored, exists for compatibility.

Returns:
n_splitsint

Returns the number of splitting iterations in the cross-validator.

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

Configure whether metadata should be requested to be passed to thesplit method.

Note that this method is only relevant when this estimator is used as asub-estimator within ameta-estimator and metadata routing is enabledwithenable_metadata_routing=True (seesklearn.set_config).Please check theUser Guide on how the routingmechanism works.

The options for each parameter are:

  • True: metadata is requested, and passed tosplit if provided. The request is ignored if metadata is not provided.

  • False: metadata is not requested and the meta-estimator will not pass it tosplit.

  • None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str: metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default (sklearn.utils.metadata_routing.UNCHANGED) retains theexisting request. This allows you to change the request for someparameters and not others.

Added in version 1.3.

Parameters:
groupsstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing forgroups parameter insplit.

Returns:
selfobject

The updated object.

split(X,y=None,groups=None)[source]#

Generate indices to split data into training and test set.

Parameters:
Xarray-like of shape (n_samples, n_features)

Training data, wheren_samples is the number of samplesandn_features is the number of features.

yarray-like of shape (n_samples,), default=None

The target variable for supervised learning problems.

groupsarray-like of shape (n_samples,)

Group labels for the samples used while splitting the dataset intotrain/test set.

Yields:
trainndarray

The training set indices for that split.

testndarray

The testing set indices for that split.

Notes

Randomized CV splitters may return different results for each call ofsplit. You can make the results identical by settingrandom_stateto an integer.

Gallery examples#

Visualizing cross-validation behavior in scikit-learn

Visualizing cross-validation behavior in scikit-learn