From fd1ecf3f8a67273555f35aaa61d34d9ff1224607 Mon Sep 17 00:00:00 2001 From: batukav Date: Wed, 27 Aug 2025 13:41:37 +0200 Subject: [PATCH 1/4] allow groups to be explicitely passed to train_test_group_split --- scikit_mol/splitter.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/scikit_mol/splitter.py b/scikit_mol/splitter.py index 8f5e10b..5c87524 100644 --- a/scikit_mol/splitter.py +++ b/scikit_mol/splitter.py @@ -262,7 +262,10 @@ def train_test_group_split( *arrays : sequence of indexables with same length / shape[0] Allowed inputs are lists, numpy arrays, scipy-sparse matrices or pandas dataframes. The last array must be the `groups` - array. + array, unless groups variable is set. + + groups : sequence of indexables with the same length / shape[0] + Same as *arrays. We allow users to explicity set the groups. test_size : float or int, default=None If float, should be between 0.0 and 1.0 and represent the proportion @@ -298,16 +301,20 @@ def train_test_group_split( splitting : list, length=2 * len(arrays) List containing train-test split of inputs. """ + + if groups is not None: + arrays = arrays + (groups,) n_arrays = len(arrays) - if n_arrays < 2: - raise ValueError( - "At least two arrays are required as input (e.g., X, groups)." - ) + if n_arrays < 3: + raise ValueError("At least two arrays are required as input (e.g., X, groups).") arrays = indexable(*arrays) - groups = arrays[-1] n_samples = _num_samples(arrays[0]) + + assert ( + len(groups) == n_samples + ), f"groups and input arrays should have the same length {len(groups)} != {n_samples}" n_train, n_test = _validate_shuffle_split( n_samples, test_size, train_size, default_test_size=0.25 ) From d6b3a9cacac2bd0cdbab744dde88a8e9582cd1a8 Mon Sep 17 00:00:00 2001 From: batukav Date: Wed, 27 Aug 2025 13:41:43 +0200 Subject: [PATCH 2/4] code formatting --- scikit_mol/splitter.py | 91 +++++++++++++++++++++++++++++------------- 1 file changed, 64 insertions(+), 27 deletions(-) diff --git a/scikit_mol/splitter.py b/scikit_mol/splitter.py index 5c87524..f093a7e 100644 --- a/scikit_mol/splitter.py +++ b/scikit_mol/splitter.py @@ -23,10 +23,10 @@ def __init__( n_splits: int = 5, *, test_size: float or int = 0.2, - train_size: float or int=None, + train_size: float or int = None, random_state: int = None, sample_weighted: bool = False, - suppress_warnings: bool = False + suppress_warnings: bool = False, ): super().__init__( n_splits=n_splits, @@ -41,11 +41,16 @@ def __init__( if self.sample_weighted: warnings.warn( f"sample_weighted = True. During the test split, groups with more samples will be prioritized", - UserWarning, - ) + UserWarning, + ) + + def _iter_indices( + self, + X: Union[List, np.ndarray, pd.Series], + y: Union[List, np.ndarray, pd.Series], + groups: Union[List, np.ndarray, pd.Series], + ): - def _iter_indices(self, X: Union[List, np.ndarray, pd.Series], y: Union[List, np.ndarray, pd.Series], groups: Union[List, np.ndarray, pd.Series]): - if y is None: raise ValueError( "StratifiedGroupShuffleSplit requires 'y' for stratification." @@ -117,7 +122,9 @@ def _iter_indices(self, X: Union[List, np.ndarray, pd.Series], y: Union[List, np pool_size = min(5, len(safe_candidates)) candidate_pool = [cand["id"] for cand in safe_candidates[:pool_size]] if self.sample_weighted: - weights = [group_info[group_idx]["size"] for group_idx in candidate_pool] + weights = [ + group_info[group_idx]["size"] for group_idx in candidate_pool + ] best_group = rng.choice(candidate_pool, p=weights) else: best_group = rng.choice(candidate_pool) @@ -155,7 +162,9 @@ def _iter_indices(self, X: Union[List, np.ndarray, pd.Series], y: Union[List, np if valid_overshoot_candidates: # Randomly choose from the valid overshooting groups - best_overshoot_group_id = rng.choice(valid_overshoot_candidates) + best_overshoot_group_id = rng.choice( + valid_overshoot_candidates + ) test_groups.append(best_overshoot_group_id) test_indices = ( @@ -164,21 +173,27 @@ def _iter_indices(self, X: Union[List, np.ndarray, pd.Series], y: Union[List, np else [] ) if len(test_indices) == 0: - raise RuntimeError(f"Given the dataset, no train/test split could be found. Try increasing test_size") + raise RuntimeError( + f"Given the dataset, no train/test split could be found. Try increasing test_size" + ) all_indices = np.arange(n_samples) train_indices = np.setdiff1d(all_indices, test_indices, assume_unique=True) - + if isinstance(self.test_size, float): - + requested_test_size_ratio = self.test_size else: requested_test_size_ratio = self.test_size / n_samples - - test_size_error = np.abs(len(test_indices)/n_samples - requested_test_size_ratio) - + + test_size_error = np.abs( + len(test_indices) / n_samples - requested_test_size_ratio + ) + if not self.suppress_warnings: - if test_size_error > 0.05: # 5% deviation - warnings.warn(f"Requested and calculated test sizes differ by {test_size_error*100:.2f}%") + if test_size_error > 0.05: # 5% deviation + warnings.warn( + f"Requested and calculated test sizes differ by {test_size_error*100:.2f}%" + ) yield train_indices, test_indices @@ -220,27 +235,36 @@ def _check_split_viability(self, n_test, unique_groups, group_counts): if group_count >= n_test: n_groups += 1 too_large_groups[group_id] = group_count - if len(too_large_groups) > 0 and not self.suppress_warnings and n_groups < len(unique_groups): + if ( + len(too_large_groups) > 0 + and not self.suppress_warnings + and n_groups < len(unique_groups) + ): warnings.warn( - f''' + f""" Some groups are too large for the test set and will never be present in the test set: {too_large_groups}.\n If you want a group to be able to be present in the test set, test_size >= group_size. - ''', + """, UserWarning, ) - elif len(too_large_groups) > 0 and not self.suppress_warnings and n_groups == len(unique_groups): + elif ( + len(too_large_groups) > 0 + and not self.suppress_warnings + and n_groups == len(unique_groups) + ): warnings.warn( - ''' + """ "Warning: All available groups are larger than the target test size. The algorithm will still try to select a group that overshoots the target, which may lead to a larger than requested test set, or an completely empty test set." - ''', + """, UserWarning, ) - + def train_test_group_split( *arrays, + groups=None, test_size=None, train_size=None, random_state=None, @@ -343,7 +367,9 @@ def train_test_group_split( else: # stratify is None CVClass = GroupShuffleSplit - cv = CVClass(n_splits=1, test_size=n_test, train_size=n_train, random_state=random_state) + cv = CVClass( + n_splits=1, test_size=n_test, train_size=n_train, random_state=random_state + ) train, test = next(cv.split(X=arrays[0], y=y_for_split, groups=groups)) @@ -387,7 +413,16 @@ class GroupSplitCV: Whether to perform stratified sampling. If True, the `y` parameter in the `split` method is used for stratification. """ - def __init__(self, n_splits=5, *, test_size=0.2, train_size=None, random_state=None, stratify=False): + + def __init__( + self, + n_splits=5, + *, + test_size=0.2, + train_size=None, + random_state=None, + stratify=False, + ): self.n_splits = n_splits self.test_size = test_size self.train_size = train_size @@ -422,7 +457,9 @@ def split(self, X, y=None, groups=None): """ if self.stratify: if y is None: - raise ValueError("The 'y' parameter should not be None when stratify=True.") + raise ValueError( + "The 'y' parameter should not be None when stratify=True." + ) cv = StratifiedGroupShuffleSplit( n_splits=self.n_splits, test_size=self.test_size, @@ -441,4 +478,4 @@ def split(self, X, y=None, groups=None): def get_n_splits(self, X=None, y=None, groups=None): """Returns the number of splitting iterations in the cross-validator.""" - return self.n_splits \ No newline at end of file + return self.n_splits From 0f06dd3e53b66d9c345121180d2501e134871fa1 Mon Sep 17 00:00:00 2001 From: batukav Date: Wed, 27 Aug 2025 13:57:44 +0200 Subject: [PATCH 3/4] fix print_report bug causing overlapping groups. Rerun the downstream analysis using the subset.csv --- ...upShuffleSplit_and_MurckoTransformer.ipynb | 475 +++++++++--------- 1 file changed, 232 insertions(+), 243 deletions(-) diff --git a/scikit_mol/notebooks/StratifiedGroupShuffleSplit_and_MurckoTransformer.ipynb b/scikit_mol/notebooks/StratifiedGroupShuffleSplit_and_MurckoTransformer.ipynb index 1e81cb3..86674b8 100644 --- a/scikit_mol/notebooks/StratifiedGroupShuffleSplit_and_MurckoTransformer.ipynb +++ b/scikit_mol/notebooks/StratifiedGroupShuffleSplit_and_MurckoTransformer.ipynb @@ -303,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -312,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -327,7 +327,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -389,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -414,12 +414,12 @@ " print(f\"Test groups and their counts: {groups_test_counts}\")\n", " print(f\"Train size: {len(y[train_index])}\")\n", " print(f\"Test size: {len(y[test_index])}\")\n", - " print(f\"Overlapping groups in train and test splits: {len(set(groups_balanced[train_index]).intersection(set(groups_balanced[test_index])))}\\n\")\n" + " print(f\"Overlapping groups in train and test splits: {len(set(groups[train_index]).intersection(set(groups[test_index])))}\\n\")\n" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -431,7 +431,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -447,35 +447,35 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([318, 331, 351]))\n", - "Unique groups and their counts in the full dataset: (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([ 80, 99, 122, 102, 114, 91, 105, 92, 99, 96]))\n", + "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([349, 331, 320]))\n", + "Unique groups and their counts in the full dataset: (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([ 79, 104, 114, 105, 84, 105, 91, 112, 99, 107]))\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([255, 268, 267]))\n", - "Test y and their counts: (array([0, 1, 2]), array([63, 63, 84]))\n", - "Train set class label distribution: [0.32278481 0.33924051 0.33797468]\n", - "Test set class label distribution: [0.3 0.3 0.4]\n", - "Train groups and their counts:: (array([0, 1, 2, 3, 5, 6, 7, 8]), array([ 80, 99, 122, 102, 91, 105, 92, 99]))\n", - "Test groups and their counts: (array([4, 9]), array([114, 96]))\n", - "Train size: 790\n", - "Test size: 210\n", + "Train y and their counts: (array([0, 1, 2]), array([265, 275, 256]))\n", + "Test y and their counts: (array([0, 1, 2]), array([84, 56, 64]))\n", + "Train set class label distribution: [0.33291457 0.34547739 0.32160804]\n", + "Test set class label distribution: [0.41176471 0.2745098 0.31372549]\n", + "Train groups and their counts:: (array([0, 1, 2, 3, 4, 6, 7, 9]), array([ 79, 104, 114, 105, 84, 91, 112, 107]))\n", + "Test groups and their counts: (array([5, 8]), array([105, 99]))\n", + "Train size: 796\n", + "Test size: 204\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([260, 255, 287]))\n", - "Test y and their counts: (array([0, 1, 2]), array([58, 76, 64]))\n", - "Train set class label distribution: [0.32418953 0.31795511 0.35785536]\n", - "Test set class label distribution: [0.29292929 0.38383838 0.32323232]\n", - "Train groups and their counts:: (array([0, 2, 3, 4, 5, 6, 7, 9]), array([ 80, 122, 102, 114, 91, 105, 92, 96]))\n", - "Test groups and their counts: (array([1, 8]), array([99, 99]))\n", - "Train size: 802\n", - "Test size: 198\n", + "Train y and their counts: (array([0, 1, 2]), array([272, 272, 247]))\n", + "Test y and their counts: (array([0, 1, 2]), array([77, 59, 73]))\n", + "Train set class label distribution: [0.34386852 0.34386852 0.31226296]\n", + "Test set class label distribution: [0.36842105 0.28229665 0.3492823 ]\n", + "Train groups and their counts:: (array([0, 2, 3, 4, 6, 7, 8, 9]), array([ 79, 114, 105, 84, 91, 112, 99, 107]))\n", + "Test groups and their counts: (array([1, 5]), array([104, 105]))\n", + "Train size: 791\n", + "Test size: 209\n", "Overlapping groups in train and test splits: 0\n", "\n" ] @@ -492,36 +492,36 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([932, 39, 29]))\n", - "Unique groups and their counts in the full dataset: (array([0, 1]), array([ 70, 930]))\n", + "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([930, 37, 33]))\n", + "Unique groups and their counts in the full dataset: (array([0, 1]), array([ 75, 925]))\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([64, 3, 3]))\n", - "Test y and their counts: (array([0, 1, 2]), array([868, 36, 26]))\n", - "Train set class label distribution: [0.91428571 0.04285714 0.04285714]\n", - "Test set class label distribution: [0.93333333 0.03870968 0.02795699]\n", - "Train groups and their counts:: (array([0]), array([70]))\n", - "Test groups and their counts: (array([1]), array([930]))\n", - "Train size: 70\n", - "Test size: 930\n", - "Overlapping groups in train and test splits: 10\n", + "Train y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", + "Test y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", + "Train set class label distribution: [0.94666667 0.04 0.01333333]\n", + "Test set class label distribution: [0.92864865 0.03675676 0.03459459]\n", + "Train groups and their counts:: (array([0]), array([75]))\n", + "Test groups and their counts: (array([1]), array([925]))\n", + "Train size: 75\n", + "Test size: 925\n", + "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([868, 36, 26]))\n", - "Test y and their counts: (array([0, 1, 2]), array([64, 3, 3]))\n", - "Train set class label distribution: [0.93333333 0.03870968 0.02795699]\n", - "Test set class label distribution: [0.91428571 0.04285714 0.04285714]\n", - "Train groups and their counts:: (array([1]), array([930]))\n", - "Test groups and their counts: (array([0]), array([70]))\n", - "Train size: 930\n", - "Test size: 70\n", - "Overlapping groups in train and test splits: 10\n", + "Train y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", + "Test y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", + "Train set class label distribution: [0.92864865 0.03675676 0.03459459]\n", + "Test set class label distribution: [0.94666667 0.04 0.01333333]\n", + "Train groups and their counts:: (array([1]), array([925]))\n", + "Test groups and their counts: (array([0]), array([75]))\n", + "Train size: 925\n", + "Test size: 75\n", + "Overlapping groups in train and test splits: 0\n", "\n" ] } @@ -543,36 +543,36 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([932, 39, 29]))\n", - "Unique groups and their counts in the full dataset: (array([0, 1]), array([ 70, 930]))\n", + "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([930, 37, 33]))\n", + "Unique groups and their counts in the full dataset: (array([0, 1]), array([ 75, 925]))\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([64, 3, 3]))\n", - "Test y and their counts: (array([0, 1, 2]), array([868, 36, 26]))\n", - "Train set class label distribution: [0.91428571 0.04285714 0.04285714]\n", - "Test set class label distribution: [0.93333333 0.03870968 0.02795699]\n", - "Train groups and their counts:: (array([0]), array([70]))\n", - "Test groups and their counts: (array([1]), array([930]))\n", - "Train size: 70\n", - "Test size: 930\n", - "Overlapping groups in train and test splits: 10\n", + "Train y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", + "Test y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", + "Train set class label distribution: [0.94666667 0.04 0.01333333]\n", + "Test set class label distribution: [0.92864865 0.03675676 0.03459459]\n", + "Train groups and their counts:: (array([0]), array([75]))\n", + "Test groups and their counts: (array([1]), array([925]))\n", + "Train size: 75\n", + "Test size: 925\n", + "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([868, 36, 26]))\n", - "Test y and their counts: (array([0, 1, 2]), array([64, 3, 3]))\n", - "Train set class label distribution: [0.93333333 0.03870968 0.02795699]\n", - "Test set class label distribution: [0.91428571 0.04285714 0.04285714]\n", - "Train groups and their counts:: (array([1]), array([930]))\n", - "Test groups and their counts: (array([0]), array([70]))\n", - "Train size: 930\n", - "Test size: 70\n", - "Overlapping groups in train and test splits: 10\n", + "Train y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", + "Test y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", + "Train set class label distribution: [0.92864865 0.03675676 0.03459459]\n", + "Test set class label distribution: [0.94666667 0.04 0.01333333]\n", + "Train groups and their counts:: (array([1]), array([925]))\n", + "Test groups and their counts: (array([0]), array([75]))\n", + "Train size: 925\n", + "Test size: 75\n", + "Overlapping groups in train and test splits: 0\n", "\n" ] } @@ -593,47 +593,47 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "(array([0, 1]), array([ 70, 930]))\n", - "Full dataset class label distribution: [0.932 0.039 0.029]\n", + "(array([0, 1]), array([ 75, 925]))\n", + "Full dataset class label distribution: [0.93 0.037 0.033]\n", "\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([583, 24, 20]))\n", - "Test y and their counts: (array([0, 1, 2]), array([349, 15, 9]))\n", - "Train set class label distribution: [0.92982456 0.03827751 0.03189793]\n", - "Test set class label distribution: [0.93565684 0.04021448 0.02412869]\n", - "Train groups and their counts:: (array([2, 4, 5, 6, 8, 9]), array([122, 114, 91, 105, 99, 96]))\n", - "Test groups and their counts: (array([0, 1, 3, 7]), array([ 80, 99, 102, 92]))\n", - "Train size: 627\n", - "Test size: 373\n", + "Train y and their counts: (array([0, 1, 2]), array([587, 20, 19]))\n", + "Test y and their counts: (array([0, 1, 2]), array([343, 17, 14]))\n", + "Train set class label distribution: [0.93769968 0.03194888 0.03035144]\n", + "Test set class label distribution: [0.9171123 0.04545455 0.03743316]\n", + "Train groups and their counts:: (array([1, 2, 4, 5, 7, 9]), array([104, 114, 84, 105, 112, 107]))\n", + "Test groups and their counts: (array([0, 3, 6, 8]), array([ 79, 105, 91, 99]))\n", + "Train size: 626\n", + "Test size: 374\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([657, 26, 16]))\n", - "Test y and their counts: (array([0, 1, 2]), array([275, 13, 13]))\n", - "Train set class label distribution: [0.93991416 0.03719599 0.02288984]\n", - "Test set class label distribution: [0.91362126 0.04318937 0.04318937]\n", - "Train groups and their counts:: (array([0, 1, 2, 3, 6, 7, 8]), array([ 80, 99, 122, 102, 105, 92, 99]))\n", - "Test groups and their counts: (array([4, 5, 9]), array([114, 91, 96]))\n", - "Train size: 699\n", - "Test size: 301\n", + "Train y and their counts: (array([0, 1, 2]), array([643, 24, 23]))\n", + "Test y and their counts: (array([0, 1, 2]), array([287, 13, 10]))\n", + "Train set class label distribution: [0.93188406 0.03478261 0.03333333]\n", + "Test set class label distribution: [0.92580645 0.04193548 0.03225806]\n", + "Train groups and their counts:: (array([0, 1, 3, 5, 6, 8, 9]), array([ 79, 104, 105, 105, 91, 99, 107]))\n", + "Test groups and their counts: (array([2, 4, 7]), array([114, 84, 112]))\n", + "Train size: 690\n", + "Test size: 310\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 2\n", - "Train y and their counts: (array([0, 1, 2]), array([624, 28, 22]))\n", - "Test y and their counts: (array([0, 1, 2]), array([308, 11, 7]))\n", - "Train set class label distribution: [0.92581602 0.04154303 0.03264095]\n", - "Test set class label distribution: [0.94478528 0.03374233 0.02147239]\n", - "Train groups and their counts:: (array([0, 1, 3, 4, 5, 7, 9]), array([ 80, 99, 102, 114, 91, 92, 96]))\n", - "Test groups and their counts: (array([2, 6, 8]), array([122, 105, 99]))\n", - "Train size: 674\n", - "Test size: 326\n", + "Train y and their counts: (array([0, 1, 2]), array([630, 30, 24]))\n", + "Test y and their counts: (array([0, 1, 2]), array([300, 7, 9]))\n", + "Train set class label distribution: [0.92105263 0.04385965 0.03508772]\n", + "Test set class label distribution: [0.94936709 0.0221519 0.02848101]\n", + "Train groups and their counts:: (array([0, 2, 3, 4, 6, 7, 8]), array([ 79, 114, 105, 84, 91, 112, 99]))\n", + "Test groups and their counts: (array([1, 5, 9]), array([104, 105, 107]))\n", + "Train size: 684\n", + "Test size: 316\n", "Overlapping groups in train and test splits: 0\n", "\n" ] @@ -653,45 +653,45 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "(array([0, 1]), array([ 70, 930]))\n", + "(array([0, 1]), array([ 75, 925]))\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([223, 234, 238]))\n", - "Test y and their counts: (array([0, 1, 2]), array([ 95, 97, 113]))\n", - "Train set class label distribution: [0.32086331 0.33669065 0.34244604]\n", - "Test set class label distribution: [0.31147541 0.31803279 0.3704918 ]\n", - "Train groups and their counts:: (array([0, 1, 2, 3, 5, 6, 9]), array([ 80, 99, 122, 102, 91, 105, 96]))\n", - "Test groups and their counts: (array([4, 7, 8]), array([114, 92, 99]))\n", - "Train size: 695\n", - "Test size: 305\n", + "Train y and their counts: (array([0, 1, 2]), array([240, 242, 224]))\n", + "Test y and their counts: (array([0, 1, 2]), array([109, 89, 96]))\n", + "Train set class label distribution: [0.33994334 0.3427762 0.31728045]\n", + "Test set class label distribution: [0.3707483 0.30272109 0.32653061]\n", + "Train groups and their counts:: (array([0, 2, 3, 4, 5, 7, 9]), array([ 79, 114, 105, 84, 105, 112, 107]))\n", + "Test groups and their counts: (array([1, 6, 8]), array([104, 91, 99]))\n", + "Train size: 706\n", + "Test size: 294\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([204, 207, 217]))\n", - "Test y and their counts: (array([0, 1, 2]), array([114, 124, 134]))\n", - "Train set class label distribution: [0.32484076 0.32961783 0.3455414 ]\n", - "Test set class label distribution: [0.30645161 0.33333333 0.36021505]\n", - "Train groups and their counts:: (array([2, 4, 6, 7, 8, 9]), array([122, 114, 105, 92, 99, 96]))\n", - "Test groups and their counts: (array([0, 1, 3, 5]), array([ 80, 99, 102, 91]))\n", - "Train size: 628\n", - "Test size: 372\n", + "Train y and their counts: (array([0, 1, 2]), array([216, 179, 193]))\n", + "Test y and their counts: (array([0, 1, 2]), array([133, 152, 127]))\n", + "Train set class label distribution: [0.36734694 0.30442177 0.32823129]\n", + "Test set class label distribution: [0.32281553 0.36893204 0.30825243]\n", + "Train groups and their counts:: (array([1, 3, 4, 5, 6, 8]), array([104, 105, 84, 105, 91, 99]))\n", + "Test groups and their counts: (array([0, 2, 7, 9]), array([ 79, 114, 112, 107]))\n", + "Train size: 588\n", + "Test size: 412\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 2\n", - "Train y and their counts: (array([0, 1, 2]), array([209, 221, 247]))\n", - "Test y and their counts: (array([0, 1, 2]), array([109, 110, 104]))\n", - "Train set class label distribution: [0.30871492 0.32644018 0.3648449 ]\n", - "Test set class label distribution: [0.3374613 0.34055728 0.32198142]\n", - "Train groups and their counts:: (array([0, 1, 3, 4, 5, 7, 8]), array([ 80, 99, 102, 114, 91, 92, 99]))\n", - "Test groups and their counts: (array([2, 6, 9]), array([122, 105, 96]))\n", - "Train size: 677\n", - "Test size: 323\n", + "Train y and their counts: (array([0, 1, 2]), array([242, 241, 223]))\n", + "Test y and their counts: (array([0, 1, 2]), array([107, 90, 97]))\n", + "Train set class label distribution: [0.3427762 0.34135977 0.31586402]\n", + "Test set class label distribution: [0.36394558 0.30612245 0.32993197]\n", + "Train groups and their counts:: (array([0, 1, 2, 6, 7, 8, 9]), array([ 79, 104, 114, 91, 112, 99, 107]))\n", + "Test groups and their counts: (array([3, 4, 5]), array([105, 84, 105]))\n", + "Train size: 706\n", + "Test size: 294\n", "Overlapping groups in train and test splits: 0\n", "\n" ] @@ -709,48 +709,48 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "(array([0, 1]), array([ 70, 930]))\n", + "(array([0, 1]), array([ 75, 925]))\n", "\n", - "Full dataset class label distribution: [0.932 0.039 0.029]\n", + "Full dataset class label distribution: [0.93 0.037 0.033]\n", "\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([666, 27, 18]))\n", - "Test y and their counts: (array([0, 1, 2]), array([266, 12, 11]))\n", - "Train set class label distribution: [0.93670886 0.03797468 0.02531646]\n", - "Test set class label distribution: [0.92041522 0.04152249 0.03806228]\n", - "Train groups and their counts:: (array([0, 2, 3, 4, 6, 7, 9]), array([ 80, 122, 102, 114, 105, 92, 96]))\n", - "Test groups and their counts: (array([1, 5, 8]), array([99, 91, 99]))\n", - "Train size: 711\n", - "Test size: 289\n", + "Train y and their counts: (array([0, 1, 2]), array([608, 21, 18]))\n", + "Test y and their counts: (array([0, 1, 2]), array([322, 16, 15]))\n", + "Train set class label distribution: [0.93972179 0.0324575 0.02782071]\n", + "Test set class label distribution: [0.9121813 0.04532578 0.04249292]\n", + "Train groups and their counts:: (array([1, 2, 3, 5, 7, 9]), array([104, 114, 105, 105, 112, 107]))\n", + "Test groups and their counts: (array([0, 4, 6, 8]), array([79, 84, 91, 99]))\n", + "Train size: 647\n", + "Test size: 353\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([625, 26, 17]))\n", - "Test y and their counts: (array([0, 1, 2]), array([307, 13, 12]))\n", - "Train set class label distribution: [0.93562874 0.03892216 0.0254491 ]\n", - "Test set class label distribution: [0.9246988 0.03915663 0.03614458]\n", - "Train groups and their counts:: (array([0, 1, 3, 5, 6, 7, 8]), array([ 80, 99, 102, 91, 105, 92, 99]))\n", - "Test groups and their counts: (array([2, 4, 9]), array([122, 114, 96]))\n", - "Train size: 668\n", - "Test size: 332\n", + "Train y and their counts: (array([0, 1, 2]), array([628, 27, 20]))\n", + "Test y and their counts: (array([0, 1, 2]), array([302, 10, 13]))\n", + "Train set class label distribution: [0.93037037 0.04 0.02962963]\n", + "Test set class label distribution: [0.92923077 0.03076923 0.04 ]\n", + "Train groups and their counts:: (array([0, 3, 4, 5, 6, 7, 8]), array([ 79, 105, 84, 105, 91, 112, 99]))\n", + "Test groups and their counts: (array([1, 2, 9]), array([104, 114, 107]))\n", + "Train size: 675\n", + "Test size: 325\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 2\n", - "Train y and their counts: (array([0, 1, 2]), array([573, 25, 23]))\n", - "Test y and their counts: (array([0, 1, 2]), array([359, 14, 6]))\n", - "Train set class label distribution: [0.92270531 0.04025765 0.03703704]\n", - "Test set class label distribution: [0.94722955 0.03693931 0.01583113]\n", - "Train groups and their counts:: (array([1, 2, 4, 5, 8, 9]), array([ 99, 122, 114, 91, 99, 96]))\n", - "Test groups and their counts: (array([0, 3, 6, 7]), array([ 80, 102, 105, 92]))\n", - "Train size: 621\n", - "Test size: 379\n", + "Train y and their counts: (array([0, 1, 2]), array([624, 26, 28]))\n", + "Test y and their counts: (array([0, 1, 2]), array([306, 11, 5]))\n", + "Train set class label distribution: [0.92035398 0.03834808 0.04129794]\n", + "Test set class label distribution: [0.95031056 0.03416149 0.01552795]\n", + "Train groups and their counts:: (array([0, 1, 2, 4, 6, 8, 9]), array([ 79, 104, 114, 84, 91, 99, 107]))\n", + "Test groups and their counts: (array([3, 5, 7]), array([105, 105, 112]))\n", + "Train size: 678\n", + "Test size: 322\n", "Overlapping groups in train and test splits: 0\n", "\n" ] @@ -768,47 +768,47 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "(array([0, 1]), array([ 70, 930]))\n", + "(array([0, 1]), array([ 75, 925]))\n", "\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([64, 3, 3]))\n", - "Test y and their counts: (array([0, 1, 2]), array([868, 36, 26]))\n", - "Train set class label distribution: [0.91428571 0.04285714 0.04285714]\n", - "Test set class label distribution: [0.93333333 0.03870968 0.02795699]\n", - "Train groups and their counts:: (array([0]), array([70]))\n", - "Test groups and their counts: (array([1]), array([930]))\n", - "Train size: 70\n", - "Test size: 930\n", - "Overlapping groups in train and test splits: 10\n", + "Train y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", + "Test y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", + "Train set class label distribution: [0.92864865 0.03675676 0.03459459]\n", + "Test set class label distribution: [0.94666667 0.04 0.01333333]\n", + "Train groups and their counts:: (array([1]), array([925]))\n", + "Test groups and their counts: (array([0]), array([75]))\n", + "Train size: 925\n", + "Test size: 75\n", + "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([932, 39, 29]))\n", + "Train y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", + "Test y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", + "Train set class label distribution: [0.94666667 0.04 0.01333333]\n", + "Test set class label distribution: [0.92864865 0.03675676 0.03459459]\n", + "Train groups and their counts:: (array([0]), array([75]))\n", + "Test groups and their counts: (array([1]), array([925]))\n", + "Train size: 75\n", + "Test size: 925\n", + "Overlapping groups in train and test splits: 0\n", + "\n", + "Split: 2\n", + "Train y and their counts: (array([0, 1, 2]), array([930, 37, 33]))\n", "Test y and their counts: (array([], dtype=int64), array([], dtype=int64))\n", - "Train set class label distribution: [0.932 0.039 0.029]\n", + "Train set class label distribution: [0.93 0.037 0.033]\n", "Test set class label distribution: []\n", - "Train groups and their counts:: (array([0, 1]), array([ 70, 930]))\n", + "Train groups and their counts:: (array([0, 1]), array([ 75, 925]))\n", "Test groups and their counts: (array([], dtype=int64), array([], dtype=int64))\n", "Train size: 1000\n", "Test size: 0\n", "Overlapping groups in train and test splits: 0\n", - "\n", - "Split: 2\n", - "Train y and their counts: (array([0, 1, 2]), array([868, 36, 26]))\n", - "Test y and their counts: (array([0, 1, 2]), array([64, 3, 3]))\n", - "Train set class label distribution: [0.93333333 0.03870968 0.02795699]\n", - "Test set class label distribution: [0.91428571 0.04285714 0.04285714]\n", - "Train groups and their counts:: (array([1]), array([930]))\n", - "Test groups and their counts: (array([0]), array([70]))\n", - "Train size: 930\n", - "Test size: 70\n", - "Overlapping groups in train and test splits: 10\n", "\n" ] } @@ -854,47 +854,47 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Groups and their counts: (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([ 80, 99, 122, 102, 114, 91, 105, 92, 99, 96]))\n", - "Full dataset class label distribution: [0.932 0.039 0.029]\n", + "Groups and their counts: (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([ 79, 104, 114, 105, 84, 105, 91, 112, 99, 107]))\n", + "Full dataset class label distribution: [0.93 0.037 0.033]\n", "\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([768, 32, 24]))\n", - "Test y and their counts: (array([0, 1, 2]), array([164, 7, 5]))\n", - "Train set class label distribution: [0.93203883 0.03883495 0.02912621]\n", - "Test set class label distribution: [0.93181818 0.03977273 0.02840909]\n", - "Train groups and their counts:: (array([1, 2, 3, 4, 5, 6, 7, 8]), array([ 99, 122, 102, 114, 91, 105, 92, 99]))\n", - "Test groups and their counts: (array([0, 9]), array([80, 96]))\n", - "Train size: 824\n", - "Test size: 176\n", + "Train y and their counts: (array([0, 1, 2]), array([753, 30, 26]))\n", + "Test y and their counts: (array([0, 1, 2]), array([177, 7, 7]))\n", + "Train set class label distribution: [0.93077874 0.03708282 0.03213844]\n", + "Test set class label distribution: [0.92670157 0.03664921 0.03664921]\n", + "Train groups and their counts:: (array([1, 2, 3, 4, 5, 6, 8, 9]), array([104, 114, 105, 84, 105, 91, 99, 107]))\n", + "Test groups and their counts: (array([0, 7]), array([ 79, 112]))\n", + "Train size: 809\n", + "Test size: 191\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([732, 29, 21]))\n", - "Test y and their counts: (array([0, 1, 2]), array([200, 10, 8]))\n", - "Train set class label distribution: [0.93606138 0.0370844 0.02685422]\n", - "Test set class label distribution: [0.91743119 0.04587156 0.03669725]\n", - "Train groups and their counts:: (array([0, 1, 3, 4, 5, 6, 7, 8]), array([ 80, 99, 102, 114, 91, 105, 92, 99]))\n", - "Test groups and their counts: (array([2, 9]), array([122, 96]))\n", - "Train size: 782\n", - "Test size: 218\n", + "Train y and their counts: (array([0, 1, 2]), array([735, 28, 26]))\n", + "Test y and their counts: (array([0, 1, 2]), array([195, 9, 7]))\n", + "Train set class label distribution: [0.93155894 0.03548796 0.03295311]\n", + "Test set class label distribution: [0.92417062 0.04265403 0.03317536]\n", + "Train groups and their counts:: (array([0, 1, 2, 3, 4, 5, 6, 9]), array([ 79, 104, 114, 105, 84, 105, 91, 107]))\n", + "Test groups and their counts: (array([7, 8]), array([112, 99]))\n", + "Train size: 789\n", + "Test size: 211\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 2\n", - "Train y and their counts: (array([0, 1, 2]), array([733, 32, 22]))\n", - "Test y and their counts: (array([0, 1, 2]), array([199, 7, 7]))\n", - "Train set class label distribution: [0.93138501 0.04066074 0.02795426]\n", - "Test set class label distribution: [0.9342723 0.03286385 0.03286385]\n", - "Train groups and their counts:: (array([0, 1, 2, 3, 5, 6, 7, 9]), array([ 80, 99, 122, 102, 91, 105, 92, 96]))\n", - "Test groups and their counts: (array([4, 8]), array([114, 99]))\n", - "Train size: 787\n", - "Test size: 213\n", + "Train y and their counts: (array([0, 1, 2]), array([748, 29, 25]))\n", + "Test y and their counts: (array([0, 1, 2]), array([182, 8, 8]))\n", + "Train set class label distribution: [0.93266833 0.0361596 0.03117207]\n", + "Test set class label distribution: [0.91919192 0.04040404 0.04040404]\n", + "Train groups and their counts:: (array([0, 1, 3, 5, 6, 7, 8, 9]), array([ 79, 104, 105, 105, 91, 112, 99, 107]))\n", + "Test groups and their counts: (array([2, 4]), array([114, 84]))\n", + "Train size: 802\n", + "Test size: 198\n", "Overlapping groups in train and test splits: 0\n", "\n" ] @@ -938,30 +938,18 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Groups and their counts: (array([0, 1]), array([500, 500]))\n", - "Full dataset class label distribution: [0.932 0.039 0.029]\n", + "Groups and their counts: (array([0, 1]), array([512, 488]))\n", + "Full dataset class label distribution: [0.93 0.037 0.033]\n", "\n" ] }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/peptid/Local_Documents/personal/git_repos/scikit_mol_bkav/scikit_mol/notebooks/../splitter.py:232: UserWarning: \n", - " \"Warning: All available groups are larger than the target test size. \n", - " The algorithm will still try to select a group that overshoots the target, \n", - " which may lead to a larger than requested test set, or an completely empty test set.\"\n", - " \n", - " warnings.warn(\n" - ] - }, { "ename": "RuntimeError", "evalue": "Given the dataset, no train/test split could be found. Try increasing test_size", @@ -969,7 +957,7 @@ "traceback": [ "\u001b[31m---------------------------------------------------------------------------\u001b[39m", "\u001b[31mRuntimeError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[24]\u001b[39m\u001b[32m, line 13\u001b[39m\n\u001b[32m 11\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mGroups and their counts: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mgroups_counts\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m 12\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mFull dataset class label distribution: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnp.unique(y_imbalanced,\u001b[38;5;250m \u001b[39mreturn_counts=\u001b[38;5;28;01mTrue\u001b[39;00m)[\u001b[32m1\u001b[39m]/\u001b[38;5;28mlen\u001b[39m(y_imbalanced)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m---> \u001b[39m\u001b[32m13\u001b[39m \u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrain_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtest_index\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43menumerate\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43msgss\u001b[49m\u001b[43m.\u001b[49m\u001b[43msplit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_imbalanced\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgroups_balanced\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[32m 14\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mcontinue\u001b[39;49;00m\n", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[31]\u001b[39m\u001b[32m, line 14\u001b[39m\n\u001b[32m 12\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mGroups and their counts: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mgroups_counts\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m 13\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mFull dataset class label distribution: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnp.unique(y_imbalanced,\u001b[38;5;250m \u001b[39mreturn_counts=\u001b[38;5;28;01mTrue\u001b[39;00m)[\u001b[32m1\u001b[39m]/\u001b[38;5;28mlen\u001b[39m(y_imbalanced)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m---> \u001b[39m\u001b[32m14\u001b[39m \u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrain_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtest_index\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43menumerate\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43msgss\u001b[49m\u001b[43m.\u001b[49m\u001b[43msplit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_imbalanced\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgroups_balanced\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[32m 15\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mcontinue\u001b[39;49;00m\n", "\u001b[36mFile \u001b[39m\u001b[32m~/Local_Documents/personal/git_repos/scikit_mol_bkav/scikit_mol/notebooks/../splitter.py:211\u001b[39m, in \u001b[36mStratifiedGroupShuffleSplit.split\u001b[39m\u001b[34m(self, X, y, groups)\u001b[39m\n\u001b[32m 185\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34msplit\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, y, groups=\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[32m 186\u001b[39m \u001b[38;5;250m \u001b[39m\u001b[33;03m\"\"\"Generates indices to split data into training and test set.\u001b[39;00m\n\u001b[32m 187\u001b[39m \n\u001b[32m 188\u001b[39m \u001b[33;03m Parameters\u001b[39;00m\n\u001b[32m (...)\u001b[39m\u001b[32m 209\u001b[39m \u001b[33;03m The testing set indices for that split.\u001b[39;00m\n\u001b[32m 210\u001b[39m \u001b[33;03m \"\"\"\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m211\u001b[39m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m._iter_indices(X, y, groups)\n", "\u001b[36mFile \u001b[39m\u001b[32m~/Local_Documents/personal/git_repos/scikit_mol_bkav/scikit_mol/notebooks/../splitter.py:167\u001b[39m, in \u001b[36mStratifiedGroupShuffleSplit._iter_indices\u001b[39m\u001b[34m(self, X, y, groups)\u001b[39m\n\u001b[32m 161\u001b[39m test_indices = (\n\u001b[32m 162\u001b[39m np.concatenate([group_info[g_idx][\u001b[33m\"\u001b[39m\u001b[33mindices\u001b[39m\u001b[33m\"\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m g_idx \u001b[38;5;129;01min\u001b[39;00m test_groups])\n\u001b[32m 163\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m test_groups\n\u001b[32m 164\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m []\n\u001b[32m 165\u001b[39m )\n\u001b[32m 166\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(test_indices) == \u001b[32m0\u001b[39m:\n\u001b[32m--> \u001b[39m\u001b[32m167\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mGiven the dataset, no train/test split could be found. Try increasing test_size\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m 168\u001b[39m all_indices = np.arange(n_samples)\n\u001b[32m 169\u001b[39m train_indices = np.setdiff1d(all_indices, test_indices, assume_unique=\u001b[38;5;28;01mTrue\u001b[39;00m)\n", "\u001b[31mRuntimeError\u001b[39m: Given the dataset, no train/test split could be found. Try increasing test_size" @@ -984,6 +972,7 @@ "\n", "from splitter import StratifiedGroupShuffleSplit\n", "\n", + "# We should get a RuntimeError because all the groups are larger than the defined split\n", "np.set_printoptions(legacy = '1.25')\n", "sgss = StratifiedGroupShuffleSplit(n_splits=3, test_size = 0.22, random_state=43)\n", "groups_counts = np.unique(groups_balanced, return_counts=True)\n", @@ -1005,7 +994,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -1032,7 +1021,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -1066,7 +1055,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -1082,7 +1071,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -1134,7 +1123,7 @@ " SLC6A4\n", " 4061\n", " FC1=CC([C@@H]2O[C@H](CC2)CN)=C(OC)C=C1\n", - " <rdkit.Chem.rdchem.Mol object at 0x1333ecc80>\n", + " <rdkit.Chem.rdchem.Mol object at 0x1341100b0>\n", " \n", " \n", " 1\n", @@ -1149,7 +1138,7 @@ " SLC6A4\n", " 4061\n", " FC1=CC(C2OC(CC2)CN)=C(OC)C=C1\n", - " <rdkit.Chem.rdchem.Mol object at 0x1333eccf0>\n", + " <rdkit.Chem.rdchem.Mol object at 0x134110120>\n", " \n", " \n", " 2\n", @@ -1164,7 +1153,7 @@ " SLC6A4\n", " 4061\n", " FC1=CC=C(C[C@H]2C[C@@H](N(CC2)CC=C)CCCNC(=O)NC...\n", - " <rdkit.Chem.rdchem.Mol object at 0x1333ecd60>\n", + " <rdkit.Chem.rdchem.Mol object at 0x134110190>\n", " \n", " \n", " 3\n", @@ -1179,7 +1168,7 @@ " SLC6A4\n", " 4061\n", " C=1C=C(C=CC1)C2=CC(=C(N2CC(C)C)C)C(NCCCN3CCN(C...\n", - " <rdkit.Chem.rdchem.Mol object at 0x1333ecdd0>\n", + " <rdkit.Chem.rdchem.Mol object at 0x134110200>\n", " \n", " \n", " 4\n", @@ -1194,7 +1183,7 @@ " SLC6A4\n", " 4061\n", " C1=CC=C2C(=C1)C=C(C(N(C3CCNCC3)C4CCC4)=O)C=C2\n", - " <rdkit.Chem.rdchem.Mol object at 0x1333ece40>\n", + " <rdkit.Chem.rdchem.Mol object at 0x134110270>\n", " \n", " \n", " ...\n", @@ -1224,7 +1213,7 @@ " SLC6A4\n", " 4061\n", " C=1C=CC(C(C=2C=CC=CC2)OCCN3CCN(CC3)C[C@@H](CC4...\n", - " <rdkit.Chem.rdchem.Mol object at 0x1334c80b0>\n", + " <rdkit.Chem.rdchem.Mol object at 0x1341df450>\n", " \n", " \n", " 7224\n", @@ -1239,7 +1228,7 @@ " SLC6A4\n", " 4061\n", " C=1C=CC(C(C=2C=CC=CC2)OCCN3CCN(CC3)C[C@H](CC4=...\n", - " <rdkit.Chem.rdchem.Mol object at 0x1334c8120>\n", + " <rdkit.Chem.rdchem.Mol object at 0x1341df4c0>\n", " \n", " \n", " 7225\n", @@ -1254,7 +1243,7 @@ " SLC6A4\n", " 4061\n", " C=1C=CC(C(C=2C=CC=CC2)OCCN3CCN(CC3)C[C@H](CC4=...\n", - " <rdkit.Chem.rdchem.Mol object at 0x1334c8190>\n", + " <rdkit.Chem.rdchem.Mol object at 0x1341df530>\n", " \n", " \n", " 7226\n", @@ -1269,7 +1258,7 @@ " SLC6A4\n", " 4061\n", " FC1=CC=C(C[C@H]2C[C@@H](N(CC2)C(=O)C)CCCNC(=O)...\n", - " <rdkit.Chem.rdchem.Mol object at 0x1334c8200>\n", + " <rdkit.Chem.rdchem.Mol object at 0x1341df5a0>\n", " \n", " \n", " 7227\n", @@ -1284,7 +1273,7 @@ " SLC6A4\n", " 4061\n", " C1CCCCC1(C2=CC=C(C(=C2)Cl)Cl)CN(CC)C\n", - " <rdkit.Chem.rdchem.Mol object at 0x1334c8270>\n", + " <rdkit.Chem.rdchem.Mol object at 0x1341df610>\n", " \n", " \n", "\n", @@ -1332,22 +1321,22 @@ "7227 4061 C1CCCCC1(C2=CC=C(C(=C2)Cl)Cl)CN(CC)C \n", "\n", " ROMol \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", "... ... \n", - "7223 \n", - "7224 \n", - "7225 \n", - "7226 \n", - "7227 \n", + "7223 \n", + "7224 \n", + "7225 \n", + "7226 \n", + "7227 \n", "\n", "[7228 rows x 12 columns]" ] }, - "execution_count": 28, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1419,12 +1408,12 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from splitter import train_test_group_split\n", - "x_train, x_test, y_train, y_test, groups_train, groups_test = train_test_group_split(data.ROMol, data.pXC50, data.scaffold_ID, stratify=True)" + "x_train, x_test, y_train, y_test, groups_train, groups_test = train_test_group_split(data.ROMol, data.pXC50, groups = data.scaffold_ID, stratify=True)" ] }, { From 106b42ab6c15368cd57c91ebd2235dd18b53a7cf Mon Sep 17 00:00:00 2001 From: batukav Date: Wed, 27 Aug 2025 14:02:08 +0200 Subject: [PATCH 4/4] update notebook --- ...upShuffleSplit_and_MurckoTransformer.ipynb | 764 ++++++++---------- 1 file changed, 350 insertions(+), 414 deletions(-) diff --git a/scikit_mol/notebooks/StratifiedGroupShuffleSplit_and_MurckoTransformer.ipynb b/scikit_mol/notebooks/StratifiedGroupShuffleSplit_and_MurckoTransformer.ipynb index 86674b8..51bab74 100644 --- a/scikit_mol/notebooks/StratifiedGroupShuffleSplit_and_MurckoTransformer.ipynb +++ b/scikit_mol/notebooks/StratifiedGroupShuffleSplit_and_MurckoTransformer.ipynb @@ -303,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -312,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -327,7 +327,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -389,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -419,7 +419,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -431,7 +431,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -447,35 +447,35 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([349, 331, 320]))\n", - "Unique groups and their counts in the full dataset: (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([ 79, 104, 114, 105, 84, 105, 91, 112, 99, 107]))\n", + "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([344, 334, 322]))\n", + "Unique groups and their counts in the full dataset: (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([114, 96, 77, 113, 91, 112, 98, 88, 103, 108]))\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([265, 275, 256]))\n", - "Test y and their counts: (array([0, 1, 2]), array([84, 56, 64]))\n", - "Train set class label distribution: [0.33291457 0.34547739 0.32160804]\n", - "Test set class label distribution: [0.41176471 0.2745098 0.31372549]\n", - "Train groups and their counts:: (array([0, 1, 2, 3, 4, 6, 7, 9]), array([ 79, 104, 114, 105, 84, 91, 112, 107]))\n", - "Test groups and their counts: (array([5, 8]), array([105, 99]))\n", - "Train size: 796\n", - "Test size: 204\n", + "Train y and their counts: (array([0, 1, 2]), array([277, 275, 261]))\n", + "Test y and their counts: (array([0, 1, 2]), array([67, 59, 61]))\n", + "Train set class label distribution: [0.34071341 0.33825338 0.32103321]\n", + "Test set class label distribution: [0.35828877 0.31550802 0.32620321]\n", + "Train groups and their counts:: (array([0, 2, 3, 5, 6, 7, 8, 9]), array([114, 77, 113, 112, 98, 88, 103, 108]))\n", + "Test groups and their counts: (array([1, 4]), array([96, 91]))\n", + "Train size: 813\n", + "Test size: 187\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([272, 272, 247]))\n", - "Test y and their counts: (array([0, 1, 2]), array([77, 59, 73]))\n", - "Train set class label distribution: [0.34386852 0.34386852 0.31226296]\n", - "Test set class label distribution: [0.36842105 0.28229665 0.3492823 ]\n", - "Train groups and their counts:: (array([0, 2, 3, 4, 6, 7, 8, 9]), array([ 79, 114, 105, 84, 91, 112, 99, 107]))\n", - "Test groups and their counts: (array([1, 5]), array([104, 105]))\n", - "Train size: 791\n", - "Test size: 209\n", + "Train y and their counts: (array([0, 1, 2]), array([276, 264, 259]))\n", + "Test y and their counts: (array([0, 1, 2]), array([68, 70, 63]))\n", + "Train set class label distribution: [0.34543179 0.33041302 0.32415519]\n", + "Test set class label distribution: [0.33830846 0.34825871 0.31343284]\n", + "Train groups and their counts:: (array([0, 1, 2, 3, 4, 5, 7, 9]), array([114, 96, 77, 113, 91, 112, 88, 108]))\n", + "Test groups and their counts: (array([6, 8]), array([ 98, 103]))\n", + "Train size: 799\n", + "Test size: 201\n", "Overlapping groups in train and test splits: 0\n", "\n" ] @@ -492,20 +492,20 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([930, 37, 33]))\n", + "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([928, 39, 33]))\n", "Unique groups and their counts in the full dataset: (array([0, 1]), array([ 75, 925]))\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", - "Test y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", - "Train set class label distribution: [0.94666667 0.04 0.01333333]\n", - "Test set class label distribution: [0.92864865 0.03675676 0.03459459]\n", + "Train y and their counts: (array([0, 1, 2]), array([70, 3, 2]))\n", + "Test y and their counts: (array([0, 1, 2]), array([858, 36, 31]))\n", + "Train set class label distribution: [0.93333333 0.04 0.02666667]\n", + "Test set class label distribution: [0.92756757 0.03891892 0.03351351]\n", "Train groups and their counts:: (array([0]), array([75]))\n", "Test groups and their counts: (array([1]), array([925]))\n", "Train size: 75\n", @@ -513,10 +513,10 @@ "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", - "Test y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", - "Train set class label distribution: [0.92864865 0.03675676 0.03459459]\n", - "Test set class label distribution: [0.94666667 0.04 0.01333333]\n", + "Train y and their counts: (array([0, 1, 2]), array([858, 36, 31]))\n", + "Test y and their counts: (array([0, 1, 2]), array([70, 3, 2]))\n", + "Train set class label distribution: [0.92756757 0.03891892 0.03351351]\n", + "Test set class label distribution: [0.93333333 0.04 0.02666667]\n", "Train groups and their counts:: (array([1]), array([925]))\n", "Test groups and their counts: (array([0]), array([75]))\n", "Train size: 925\n", @@ -543,20 +543,20 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([930, 37, 33]))\n", + "Unique y and their counts in the full dataset: (array([0, 1, 2]), array([928, 39, 33]))\n", "Unique groups and their counts in the full dataset: (array([0, 1]), array([ 75, 925]))\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", - "Test y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", - "Train set class label distribution: [0.94666667 0.04 0.01333333]\n", - "Test set class label distribution: [0.92864865 0.03675676 0.03459459]\n", + "Train y and their counts: (array([0, 1, 2]), array([70, 3, 2]))\n", + "Test y and their counts: (array([0, 1, 2]), array([858, 36, 31]))\n", + "Train set class label distribution: [0.93333333 0.04 0.02666667]\n", + "Test set class label distribution: [0.92756757 0.03891892 0.03351351]\n", "Train groups and their counts:: (array([0]), array([75]))\n", "Test groups and their counts: (array([1]), array([925]))\n", "Train size: 75\n", @@ -564,10 +564,10 @@ "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", - "Test y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", - "Train set class label distribution: [0.92864865 0.03675676 0.03459459]\n", - "Test set class label distribution: [0.94666667 0.04 0.01333333]\n", + "Train y and their counts: (array([0, 1, 2]), array([858, 36, 31]))\n", + "Test y and their counts: (array([0, 1, 2]), array([70, 3, 2]))\n", + "Train set class label distribution: [0.92756757 0.03891892 0.03351351]\n", + "Test set class label distribution: [0.93333333 0.04 0.02666667]\n", "Train groups and their counts:: (array([1]), array([925]))\n", "Test groups and their counts: (array([0]), array([75]))\n", "Train size: 925\n", @@ -593,7 +593,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -601,39 +601,39 @@ "output_type": "stream", "text": [ "(array([0, 1]), array([ 75, 925]))\n", - "Full dataset class label distribution: [0.93 0.037 0.033]\n", + "Full dataset class label distribution: [0.928 0.039 0.033]\n", "\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([587, 20, 19]))\n", - "Test y and their counts: (array([0, 1, 2]), array([343, 17, 14]))\n", - "Train set class label distribution: [0.93769968 0.03194888 0.03035144]\n", - "Test set class label distribution: [0.9171123 0.04545455 0.03743316]\n", - "Train groups and their counts:: (array([1, 2, 4, 5, 7, 9]), array([104, 114, 84, 105, 112, 107]))\n", - "Test groups and their counts: (array([0, 3, 6, 8]), array([ 79, 105, 91, 99]))\n", - "Train size: 626\n", - "Test size: 374\n", + "Train y and their counts: (array([0, 1, 2]), array([580, 31, 25]))\n", + "Test y and their counts: (array([0, 1, 2]), array([348, 8, 8]))\n", + "Train set class label distribution: [0.91194969 0.04874214 0.03930818]\n", + "Test set class label distribution: [0.95604396 0.02197802 0.02197802]\n", + "Train groups and their counts:: (array([0, 1, 3, 5, 6, 8]), array([114, 96, 113, 112, 98, 103]))\n", + "Test groups and their counts: (array([2, 4, 7, 9]), array([ 77, 91, 88, 108]))\n", + "Train size: 636\n", + "Test size: 364\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([643, 24, 23]))\n", - "Test y and their counts: (array([0, 1, 2]), array([287, 13, 10]))\n", - "Train set class label distribution: [0.93188406 0.03478261 0.03333333]\n", - "Test set class label distribution: [0.92580645 0.04193548 0.03225806]\n", - "Train groups and their counts:: (array([0, 1, 3, 5, 6, 8, 9]), array([ 79, 104, 105, 105, 91, 99, 107]))\n", - "Test groups and their counts: (array([2, 4, 7]), array([114, 84, 112]))\n", - "Train size: 690\n", - "Test size: 310\n", + "Train y and their counts: (array([0, 1, 2]), array([639, 24, 24]))\n", + "Test y and their counts: (array([0, 1, 2]), array([289, 15, 9]))\n", + "Train set class label distribution: [0.930131 0.0349345 0.0349345]\n", + "Test set class label distribution: [0.92332268 0.04792332 0.02875399]\n", + "Train groups and their counts:: (array([2, 3, 4, 5, 6, 7, 9]), array([ 77, 113, 91, 112, 98, 88, 108]))\n", + "Test groups and their counts: (array([0, 1, 8]), array([114, 96, 103]))\n", + "Train size: 687\n", + "Test size: 313\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 2\n", - "Train y and their counts: (array([0, 1, 2]), array([630, 30, 24]))\n", - "Test y and their counts: (array([0, 1, 2]), array([300, 7, 9]))\n", - "Train set class label distribution: [0.92105263 0.04385965 0.03508772]\n", - "Test set class label distribution: [0.94936709 0.0221519 0.02848101]\n", - "Train groups and their counts:: (array([0, 2, 3, 4, 6, 7, 8]), array([ 79, 114, 105, 84, 91, 112, 99]))\n", - "Test groups and their counts: (array([1, 5, 9]), array([104, 105, 107]))\n", - "Train size: 684\n", - "Test size: 316\n", + "Train y and their counts: (array([0, 1, 2]), array([637, 23, 17]))\n", + "Test y and their counts: (array([0, 1, 2]), array([291, 16, 16]))\n", + "Train set class label distribution: [0.94091581 0.03397341 0.02511078]\n", + "Test set class label distribution: [0.90092879 0.0495356 0.0495356 ]\n", + "Train groups and their counts:: (array([0, 1, 2, 4, 7, 8, 9]), array([114, 96, 77, 91, 88, 103, 108]))\n", + "Test groups and their counts: (array([3, 5, 6]), array([113, 112, 98]))\n", + "Train size: 677\n", + "Test size: 323\n", "Overlapping groups in train and test splits: 0\n", "\n" ] @@ -653,7 +653,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -662,36 +662,36 @@ "text": [ "(array([0, 1]), array([ 75, 925]))\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([240, 242, 224]))\n", - "Test y and their counts: (array([0, 1, 2]), array([109, 89, 96]))\n", - "Train set class label distribution: [0.33994334 0.3427762 0.31728045]\n", - "Test set class label distribution: [0.3707483 0.30272109 0.32653061]\n", - "Train groups and their counts:: (array([0, 2, 3, 4, 5, 7, 9]), array([ 79, 114, 105, 84, 105, 112, 107]))\n", - "Test groups and their counts: (array([1, 6, 8]), array([104, 91, 99]))\n", - "Train size: 706\n", - "Test size: 294\n", + "Train y and their counts: (array([0, 1, 2]), array([234, 241, 217]))\n", + "Test y and their counts: (array([0, 1, 2]), array([110, 93, 105]))\n", + "Train set class label distribution: [0.33815029 0.3482659 0.31358382]\n", + "Test set class label distribution: [0.35714286 0.30194805 0.34090909]\n", + "Train groups and their counts:: (array([2, 3, 4, 5, 7, 8, 9]), array([ 77, 113, 91, 112, 88, 103, 108]))\n", + "Test groups and their counts: (array([0, 1, 6]), array([114, 96, 98]))\n", + "Train size: 692\n", + "Test size: 308\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([216, 179, 193]))\n", - "Test y and their counts: (array([0, 1, 2]), array([133, 152, 127]))\n", - "Train set class label distribution: [0.36734694 0.30442177 0.32823129]\n", - "Test set class label distribution: [0.32281553 0.36893204 0.30825243]\n", - "Train groups and their counts:: (array([1, 3, 4, 5, 6, 8]), array([104, 105, 84, 105, 91, 99]))\n", - "Test groups and their counts: (array([0, 2, 7, 9]), array([ 79, 114, 112, 107]))\n", - "Train size: 588\n", - "Test size: 412\n", + "Train y and their counts: (array([0, 1, 2]), array([217, 203, 196]))\n", + "Test y and their counts: (array([0, 1, 2]), array([127, 131, 126]))\n", + "Train set class label distribution: [0.35227273 0.32954545 0.31818182]\n", + "Test set class label distribution: [0.33072917 0.34114583 0.328125 ]\n", + "Train groups and their counts:: (array([0, 1, 5, 6, 7, 9]), array([114, 96, 112, 98, 88, 108]))\n", + "Test groups and their counts: (array([2, 3, 4, 8]), array([ 77, 113, 91, 103]))\n", + "Train size: 616\n", + "Test size: 384\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 2\n", - "Train y and their counts: (array([0, 1, 2]), array([242, 241, 223]))\n", - "Test y and their counts: (array([0, 1, 2]), array([107, 90, 97]))\n", - "Train set class label distribution: [0.3427762 0.34135977 0.31586402]\n", - "Test set class label distribution: [0.36394558 0.30612245 0.32993197]\n", - "Train groups and their counts:: (array([0, 1, 2, 6, 7, 8, 9]), array([ 79, 104, 114, 91, 112, 99, 107]))\n", - "Test groups and their counts: (array([3, 4, 5]), array([105, 84, 105]))\n", - "Train size: 706\n", - "Test size: 294\n", + "Train y and their counts: (array([0, 1, 2]), array([237, 224, 231]))\n", + "Test y and their counts: (array([0, 1, 2]), array([107, 110, 91]))\n", + "Train set class label distribution: [0.34248555 0.32369942 0.33381503]\n", + "Test set class label distribution: [0.3474026 0.35714286 0.29545455]\n", + "Train groups and their counts:: (array([0, 1, 2, 3, 4, 6, 8]), array([114, 96, 77, 113, 91, 98, 103]))\n", + "Test groups and their counts: (array([5, 7, 9]), array([112, 88, 108]))\n", + "Train size: 692\n", + "Test size: 308\n", "Overlapping groups in train and test splits: 0\n", "\n" ] @@ -709,7 +709,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -718,39 +718,39 @@ "text": [ "(array([0, 1]), array([ 75, 925]))\n", "\n", - "Full dataset class label distribution: [0.93 0.037 0.033]\n", + "Full dataset class label distribution: [0.928 0.039 0.033]\n", "\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([608, 21, 18]))\n", - "Test y and their counts: (array([0, 1, 2]), array([322, 16, 15]))\n", - "Train set class label distribution: [0.93972179 0.0324575 0.02782071]\n", - "Test set class label distribution: [0.9121813 0.04532578 0.04249292]\n", - "Train groups and their counts:: (array([1, 2, 3, 5, 7, 9]), array([104, 114, 105, 105, 112, 107]))\n", - "Test groups and their counts: (array([0, 4, 6, 8]), array([79, 84, 91, 99]))\n", - "Train size: 647\n", - "Test size: 353\n", + "Train y and their counts: (array([0, 1, 2]), array([644, 21, 22]))\n", + "Test y and their counts: (array([0, 1, 2]), array([284, 18, 11]))\n", + "Train set class label distribution: [0.93740902 0.03056769 0.03202329]\n", + "Test set class label distribution: [0.90734824 0.05750799 0.03514377]\n", + "Train groups and their counts:: (array([0, 1, 2, 3, 4, 7, 9]), array([114, 96, 77, 113, 91, 88, 108]))\n", + "Test groups and their counts: (array([5, 6, 8]), array([112, 98, 103]))\n", + "Train size: 687\n", + "Test size: 313\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([628, 27, 20]))\n", - "Test y and their counts: (array([0, 1, 2]), array([302, 10, 13]))\n", - "Train set class label distribution: [0.93037037 0.04 0.02962963]\n", - "Test set class label distribution: [0.92923077 0.03076923 0.04 ]\n", - "Train groups and their counts:: (array([0, 3, 4, 5, 6, 7, 8]), array([ 79, 105, 84, 105, 91, 112, 99]))\n", - "Test groups and their counts: (array([1, 2, 9]), array([104, 114, 107]))\n", - "Train size: 675\n", - "Test size: 325\n", + "Train y and their counts: (array([0, 1, 2]), array([495, 24, 16]))\n", + "Test y and their counts: (array([0, 1, 2]), array([433, 15, 17]))\n", + "Train set class label distribution: [0.92523364 0.04485981 0.02990654]\n", + "Test set class label distribution: [0.9311828 0.03225806 0.03655914]\n", + "Train groups and their counts:: (array([0, 5, 6, 8, 9]), array([114, 112, 98, 103, 108]))\n", + "Test groups and their counts: (array([1, 2, 3, 4, 7]), array([ 96, 77, 113, 91, 88]))\n", + "Train size: 535\n", + "Test size: 465\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 2\n", - "Train y and their counts: (array([0, 1, 2]), array([624, 26, 28]))\n", - "Test y and their counts: (array([0, 1, 2]), array([306, 11, 5]))\n", - "Train set class label distribution: [0.92035398 0.03834808 0.04129794]\n", - "Test set class label distribution: [0.95031056 0.03416149 0.01552795]\n", - "Train groups and their counts:: (array([0, 1, 2, 4, 6, 8, 9]), array([ 79, 104, 114, 84, 91, 99, 107]))\n", - "Test groups and their counts: (array([3, 5, 7]), array([105, 105, 112]))\n", - "Train size: 678\n", - "Test size: 322\n", + "Train y and their counts: (array([0, 1, 2]), array([717, 33, 28]))\n", + "Test y and their counts: (array([0, 1, 2]), array([211, 6, 5]))\n", + "Train set class label distribution: [0.92159383 0.04241645 0.03598972]\n", + "Test set class label distribution: [0.95045045 0.02702703 0.02252252]\n", + "Train groups and their counts:: (array([1, 2, 3, 4, 5, 6, 7, 8]), array([ 96, 77, 113, 91, 112, 98, 88, 103]))\n", + "Test groups and their counts: (array([0, 9]), array([114, 108]))\n", + "Train size: 778\n", + "Test size: 222\n", "Overlapping groups in train and test splits: 0\n", "\n" ] @@ -768,7 +768,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -778,10 +778,10 @@ "(array([0, 1]), array([ 75, 925]))\n", "\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", - "Test y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", - "Train set class label distribution: [0.92864865 0.03675676 0.03459459]\n", - "Test set class label distribution: [0.94666667 0.04 0.01333333]\n", + "Train y and their counts: (array([0, 1, 2]), array([858, 36, 31]))\n", + "Test y and their counts: (array([0, 1, 2]), array([70, 3, 2]))\n", + "Train set class label distribution: [0.92756757 0.03891892 0.03351351]\n", + "Test set class label distribution: [0.93333333 0.04 0.02666667]\n", "Train groups and their counts:: (array([1]), array([925]))\n", "Test groups and their counts: (array([0]), array([75]))\n", "Train size: 925\n", @@ -789,26 +789,26 @@ "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([71, 3, 1]))\n", - "Test y and their counts: (array([0, 1, 2]), array([859, 34, 32]))\n", - "Train set class label distribution: [0.94666667 0.04 0.01333333]\n", - "Test set class label distribution: [0.92864865 0.03675676 0.03459459]\n", - "Train groups and their counts:: (array([0]), array([75]))\n", - "Test groups and their counts: (array([1]), array([925]))\n", - "Train size: 75\n", - "Test size: 925\n", - "Overlapping groups in train and test splits: 0\n", - "\n", - "Split: 2\n", - "Train y and their counts: (array([0, 1, 2]), array([930, 37, 33]))\n", + "Train y and their counts: (array([0, 1, 2]), array([928, 39, 33]))\n", "Test y and their counts: (array([], dtype=int64), array([], dtype=int64))\n", - "Train set class label distribution: [0.93 0.037 0.033]\n", + "Train set class label distribution: [0.928 0.039 0.033]\n", "Test set class label distribution: []\n", "Train groups and their counts:: (array([0, 1]), array([ 75, 925]))\n", "Test groups and their counts: (array([], dtype=int64), array([], dtype=int64))\n", "Train size: 1000\n", "Test size: 0\n", "Overlapping groups in train and test splits: 0\n", + "\n", + "Split: 2\n", + "Train y and their counts: (array([0, 1, 2]), array([70, 3, 2]))\n", + "Test y and their counts: (array([0, 1, 2]), array([858, 36, 31]))\n", + "Train set class label distribution: [0.93333333 0.04 0.02666667]\n", + "Test set class label distribution: [0.92756757 0.03891892 0.03351351]\n", + "Train groups and their counts:: (array([0]), array([75]))\n", + "Test groups and their counts: (array([1]), array([925]))\n", + "Train size: 75\n", + "Test size: 925\n", + "Overlapping groups in train and test splits: 0\n", "\n" ] } @@ -854,50 +854,58 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Groups and their counts: (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([ 79, 104, 114, 105, 84, 105, 91, 112, 99, 107]))\n", - "Full dataset class label distribution: [0.93 0.037 0.033]\n", + "Groups and their counts: (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([114, 96, 77, 113, 91, 112, 98, 88, 103, 108]))\n", + "Full dataset class label distribution: [0.928 0.039 0.033]\n", "\n", "Split: 0\n", - "Train y and their counts: (array([0, 1, 2]), array([753, 30, 26]))\n", - "Test y and their counts: (array([0, 1, 2]), array([177, 7, 7]))\n", - "Train set class label distribution: [0.93077874 0.03708282 0.03213844]\n", - "Test set class label distribution: [0.92670157 0.03664921 0.03664921]\n", - "Train groups and their counts:: (array([1, 2, 3, 4, 5, 6, 8, 9]), array([104, 114, 105, 84, 105, 91, 99, 107]))\n", - "Test groups and their counts: (array([0, 7]), array([ 79, 112]))\n", - "Train size: 809\n", - "Test size: 191\n", + "Train y and their counts: (array([0, 1, 2]), array([762, 30, 28]))\n", + "Test y and their counts: (array([0, 1, 2]), array([166, 9, 5]))\n", + "Train set class label distribution: [0.92926829 0.03658537 0.03414634]\n", + "Test set class label distribution: [0.92222222 0.05 0.02777778]\n", + "Train groups and their counts:: (array([0, 1, 3, 4, 5, 6, 7, 9]), array([114, 96, 113, 91, 112, 98, 88, 108]))\n", + "Test groups and their counts: (array([2, 8]), array([ 77, 103]))\n", + "Train size: 820\n", + "Test size: 180\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 1\n", - "Train y and their counts: (array([0, 1, 2]), array([735, 28, 26]))\n", - "Test y and their counts: (array([0, 1, 2]), array([195, 9, 7]))\n", - "Train set class label distribution: [0.93155894 0.03548796 0.03295311]\n", - "Test set class label distribution: [0.92417062 0.04265403 0.03317536]\n", - "Train groups and their counts:: (array([0, 1, 2, 3, 4, 5, 6, 9]), array([ 79, 104, 114, 105, 84, 105, 91, 107]))\n", - "Test groups and their counts: (array([7, 8]), array([112, 99]))\n", - "Train size: 789\n", - "Test size: 211\n", + "Train y and their counts: (array([0, 1, 2]), array([738, 34, 26]))\n", + "Test y and their counts: (array([0, 1, 2]), array([190, 5, 7]))\n", + "Train set class label distribution: [0.92481203 0.04260652 0.03258145]\n", + "Test set class label distribution: [0.94059406 0.02475248 0.03465347]\n", + "Train groups and their counts:: (array([1, 2, 3, 4, 5, 6, 8, 9]), array([ 96, 77, 113, 91, 112, 98, 103, 108]))\n", + "Test groups and their counts: (array([0, 7]), array([114, 88]))\n", + "Train size: 798\n", + "Test size: 202\n", "Overlapping groups in train and test splits: 0\n", "\n", "Split: 2\n", - "Train y and their counts: (array([0, 1, 2]), array([748, 29, 25]))\n", - "Test y and their counts: (array([0, 1, 2]), array([182, 8, 8]))\n", - "Train set class label distribution: [0.93266833 0.0361596 0.03117207]\n", - "Test set class label distribution: [0.91919192 0.04040404 0.04040404]\n", - "Train groups and their counts:: (array([0, 1, 3, 5, 6, 7, 8, 9]), array([ 79, 104, 105, 105, 91, 112, 99, 107]))\n", - "Test groups and their counts: (array([2, 4]), array([114, 84]))\n", - "Train size: 802\n", - "Test size: 198\n", + "Train y and their counts: (array([0, 1, 2]), array([596, 30, 22]))\n", + "Test y and their counts: (array([0, 1, 2]), array([848, 21, 20]))\n", + "Train set class label distribution: [0.91975309 0.0462963 0.03395062]\n", + "Test set class label distribution: [0.95388076 0.02362205 0.02249719]\n", + "Train groups and their counts:: (array([0, 3, 5, 6, 8, 9]), array([114, 113, 112, 98, 103, 108]))\n", + "Test groups and their counts: (array([1, 2, 4, 7]), array([ 96, 77, 364, 352]))\n", + "Train size: 648\n", + "Test size: 889\n", "Overlapping groups in train and test splits: 0\n", "\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/peptid/Local_Documents/personal/git_repos/scikit_mol_bkav/scikit_mol/notebooks/../splitter.py:194: UserWarning: Requested and calculated test sizes differ by 66.90%\n", + " warnings.warn(\n" + ] } ], "source": [ @@ -938,18 +946,30 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Groups and their counts: (array([0, 1]), array([512, 488]))\n", - "Full dataset class label distribution: [0.93 0.037 0.033]\n", + "Groups and their counts: (array([0, 1]), array([538, 462]))\n", + "Full dataset class label distribution: [0.928 0.039 0.033]\n", "\n" ] }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/peptid/Local_Documents/personal/git_repos/scikit_mol_bkav/scikit_mol/notebooks/../splitter.py:255: UserWarning: \n", + " \"Warning: All available groups are larger than the target test size. \n", + " The algorithm will still try to select a group that overshoots the target, \n", + " which may lead to a larger than requested test set, or an completely empty test set.\"\n", + " \n", + " warnings.warn(\n" + ] + }, { "ename": "RuntimeError", "evalue": "Given the dataset, no train/test split could be found. Try increasing test_size", @@ -957,9 +977,9 @@ "traceback": [ "\u001b[31m---------------------------------------------------------------------------\u001b[39m", "\u001b[31mRuntimeError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[31]\u001b[39m\u001b[32m, line 14\u001b[39m\n\u001b[32m 12\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mGroups and their counts: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mgroups_counts\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m 13\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mFull dataset class label distribution: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnp.unique(y_imbalanced,\u001b[38;5;250m \u001b[39mreturn_counts=\u001b[38;5;28;01mTrue\u001b[39;00m)[\u001b[32m1\u001b[39m]/\u001b[38;5;28mlen\u001b[39m(y_imbalanced)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m---> \u001b[39m\u001b[32m14\u001b[39m \u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrain_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtest_index\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43menumerate\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43msgss\u001b[49m\u001b[43m.\u001b[49m\u001b[43msplit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_imbalanced\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgroups_balanced\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[32m 15\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mcontinue\u001b[39;49;00m\n", - "\u001b[36mFile \u001b[39m\u001b[32m~/Local_Documents/personal/git_repos/scikit_mol_bkav/scikit_mol/notebooks/../splitter.py:211\u001b[39m, in \u001b[36mStratifiedGroupShuffleSplit.split\u001b[39m\u001b[34m(self, X, y, groups)\u001b[39m\n\u001b[32m 185\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34msplit\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, y, groups=\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[32m 186\u001b[39m \u001b[38;5;250m \u001b[39m\u001b[33;03m\"\"\"Generates indices to split data into training and test set.\u001b[39;00m\n\u001b[32m 187\u001b[39m \n\u001b[32m 188\u001b[39m \u001b[33;03m Parameters\u001b[39;00m\n\u001b[32m (...)\u001b[39m\u001b[32m 209\u001b[39m \u001b[33;03m The testing set indices for that split.\u001b[39;00m\n\u001b[32m 210\u001b[39m \u001b[33;03m \"\"\"\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m211\u001b[39m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m._iter_indices(X, y, groups)\n", - "\u001b[36mFile \u001b[39m\u001b[32m~/Local_Documents/personal/git_repos/scikit_mol_bkav/scikit_mol/notebooks/../splitter.py:167\u001b[39m, in \u001b[36mStratifiedGroupShuffleSplit._iter_indices\u001b[39m\u001b[34m(self, X, y, groups)\u001b[39m\n\u001b[32m 161\u001b[39m test_indices = (\n\u001b[32m 162\u001b[39m np.concatenate([group_info[g_idx][\u001b[33m\"\u001b[39m\u001b[33mindices\u001b[39m\u001b[33m\"\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m g_idx \u001b[38;5;129;01min\u001b[39;00m test_groups])\n\u001b[32m 163\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m test_groups\n\u001b[32m 164\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m []\n\u001b[32m 165\u001b[39m )\n\u001b[32m 166\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(test_indices) == \u001b[32m0\u001b[39m:\n\u001b[32m--> \u001b[39m\u001b[32m167\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mGiven the dataset, no train/test split could be found. Try increasing test_size\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m 168\u001b[39m all_indices = np.arange(n_samples)\n\u001b[32m 169\u001b[39m train_indices = np.setdiff1d(all_indices, test_indices, assume_unique=\u001b[38;5;28;01mTrue\u001b[39;00m)\n", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[24]\u001b[39m\u001b[32m, line 14\u001b[39m\n\u001b[32m 12\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mGroups and their counts: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mgroups_counts\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m 13\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mFull dataset class label distribution: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnp.unique(y_imbalanced,\u001b[38;5;250m \u001b[39mreturn_counts=\u001b[38;5;28;01mTrue\u001b[39;00m)[\u001b[32m1\u001b[39m]/\u001b[38;5;28mlen\u001b[39m(y_imbalanced)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m---> \u001b[39m\u001b[32m14\u001b[39m \u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrain_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtest_index\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43menumerate\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43msgss\u001b[49m\u001b[43m.\u001b[49m\u001b[43msplit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_imbalanced\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgroups_balanced\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[32m 15\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mcontinue\u001b[39;49;00m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Local_Documents/personal/git_repos/scikit_mol_bkav/scikit_mol/notebooks/../splitter.py:226\u001b[39m, in \u001b[36mStratifiedGroupShuffleSplit.split\u001b[39m\u001b[34m(self, X, y, groups)\u001b[39m\n\u001b[32m 200\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34msplit\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, y, groups=\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[32m 201\u001b[39m \u001b[38;5;250m \u001b[39m\u001b[33;03m\"\"\"Generates indices to split data into training and test set.\u001b[39;00m\n\u001b[32m 202\u001b[39m \n\u001b[32m 203\u001b[39m \u001b[33;03m Parameters\u001b[39;00m\n\u001b[32m (...)\u001b[39m\u001b[32m 224\u001b[39m \u001b[33;03m The testing set indices for that split.\u001b[39;00m\n\u001b[32m 225\u001b[39m \u001b[33;03m \"\"\"\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m226\u001b[39m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m._iter_indices(X, y, groups)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Local_Documents/personal/git_repos/scikit_mol_bkav/scikit_mol/notebooks/../splitter.py:176\u001b[39m, in \u001b[36mStratifiedGroupShuffleSplit._iter_indices\u001b[39m\u001b[34m(self, X, y, groups)\u001b[39m\n\u001b[32m 170\u001b[39m test_indices = (\n\u001b[32m 171\u001b[39m np.concatenate([group_info[g_idx][\u001b[33m\"\u001b[39m\u001b[33mindices\u001b[39m\u001b[33m\"\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m g_idx \u001b[38;5;129;01min\u001b[39;00m test_groups])\n\u001b[32m 172\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m test_groups\n\u001b[32m 173\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m []\n\u001b[32m 174\u001b[39m )\n\u001b[32m 175\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(test_indices) == \u001b[32m0\u001b[39m:\n\u001b[32m--> \u001b[39m\u001b[32m176\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[32m 177\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mGiven the dataset, no train/test split could be found. Try increasing test_size\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 178\u001b[39m )\n\u001b[32m 179\u001b[39m all_indices = np.arange(n_samples)\n\u001b[32m 180\u001b[39m train_indices = np.setdiff1d(all_indices, test_indices, assume_unique=\u001b[38;5;28;01mTrue\u001b[39;00m)\n", "\u001b[31mRuntimeError\u001b[39m: Given the dataset, no train/test split could be found. Try increasing test_size" ] } @@ -994,7 +1014,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -1021,11 +1041,11 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ - "full_set = True\n", + "full_set = False\n", "\n", "if full_set:\n", " csv_file = \"../../tests/data/SLC6A4_active_excape_export.csv\"\n", @@ -1055,7 +1075,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ @@ -1071,7 +1091,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -1096,94 +1116,46 @@ " \n", " \n", " Ambit_InchiKey\n", - " Original_Entry_ID\n", - " Entrez_ID\n", - " Activity_Flag\n", - " pXC50\n", - " DB\n", - " Original_Assay_ID\n", - " Tax_ID\n", - " Gene_Symbol\n", - " Ortholog_Group\n", " SMILES\n", + " pXC50\n", " ROMol\n", " \n", " \n", " \n", " \n", " 0\n", - " AZMKBJHIXZCVNL-BXKDBHETNA-N\n", - " 44590643\n", - " 6532\n", - " A\n", - " 5.68382\n", - " pubchem\n", - " 393260\n", - " 9606\n", - " SLC6A4\n", - " 4061\n", - " FC1=CC([C@@H]2O[C@H](CC2)CN)=C(OC)C=C1\n", - " <rdkit.Chem.rdchem.Mol object at 0x1341100b0>\n", + " RBCQCVSMIQCOMN-PCQZLOAONA-N\n", + " C12C([C@@H](OC(C=3C=CC(=CC3)F)C=4C=CC(=CC4)F)C...\n", + " 6.26000\n", + " <rdkit.Chem.rdchem.Mol object at 0x139a813f0>\n", " \n", " \n", " 1\n", - " AZMKBJHIXZCVNL-UHFFFAOYNA-N\n", - " 11492305\n", - " 6532\n", - " A\n", - " 5.16210\n", - " pubchem\n", - " 393258\n", - " 9606\n", - " SLC6A4\n", - " 4061\n", - " FC1=CC(C2OC(CC2)CN)=C(OC)C=C1\n", - " <rdkit.Chem.rdchem.Mol object at 0x134110120>\n", + " ALZTYVXVRZIERJ-UHFFFAOYNA-N\n", + " O(C1=NC=C2C(CN(CC2=C1)C)C3=CC=C(OC)C=C3)CCCN(C...\n", + " 7.18046\n", + " <rdkit.Chem.rdchem.Mol object at 0x139a1d540>\n", " \n", " \n", " 2\n", - " AZOHUEDNMOIDOC-GETDIYNLNA-N\n", - " 44419340\n", - " 6532\n", - " A\n", - " 6.66354\n", - " pubchem\n", - " 276059\n", - " 9606\n", - " SLC6A4\n", - " 4061\n", - " FC1=CC=C(C[C@H]2C[C@@H](N(CC2)CC=C)CCCNC(=O)NC...\n", - " <rdkit.Chem.rdchem.Mol object at 0x134110190>\n", + " MOEMPBAHOJKXBG-MRXNPFEDNA-N\n", + " O=S(=O)(N(CC=1C=CC2=CC=CC=C2C1)[C@@H]3CCNC3)C\n", + " 7.77000\n", + " <rdkit.Chem.rdchem.Mol object at 0x139a81460>\n", " \n", " \n", " 3\n", - " AZSKJKSQZWHDOK-VJSLDGLSNA-N\n", - " CHEMBL1080745\n", - " 6532\n", - " A\n", - " 6.96000\n", - " chembl20\n", - " 617082\n", - " 9606\n", - " SLC6A4\n", - " 4061\n", - " C=1C=C(C=CC1)C2=CC(=C(N2CC(C)C)C)C(NCCCN3CCN(C...\n", - " <rdkit.Chem.rdchem.Mol object at 0x134110200>\n", + " HEKGBDCRHYILPL-QWOVJGMINA-N\n", + " C1(=C2C(CCCC2O)=NC=3C1=CC=CC3)NCC=4C=CC(=CC4)Cl\n", + " 5.24000\n", + " <rdkit.Chem.rdchem.Mol object at 0x139a812a0>\n", " \n", " \n", " 4\n", - " AZTPZTRJVCAAMX-UHFFFAOYNA-N\n", - " CHEMBL578346\n", - " 6532\n", - " A\n", - " 8.00000\n", - " chembl20\n", - " 596934\n", - " 9606\n", - " SLC6A4\n", - " 4061\n", - " C1=CC=C2C(=C1)C=C(C(N(C3CCNCC3)C4CCC4)=O)C=C2\n", - " <rdkit.Chem.rdchem.Mol object at 0x134110270>\n", + " SNNRWIBSGBMYRF-UKRRQHHQNA-N\n", + " C1NC[C@@H](C1)[C@H](OC=2C=CC(=NC2C)OC)CC(C)C\n", + " 9.12000\n", + " <rdkit.Chem.rdchem.Mol object at 0x139a814d0>\n", " \n", " \n", " ...\n", @@ -1191,152 +1163,91 @@ " ...\n", " ...\n", " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", " \n", " \n", - " 7223\n", - " ZZHKHRXDQLQSFW-HHHXNRCGNA-N\n", - " CHEMBL282380\n", - " 6532\n", - " A\n", - " 5.74000\n", - " chembl20\n", - " 532580\n", - " 9606\n", - " SLC6A4\n", - " 4061\n", - " C=1C=CC(C(C=2C=CC=CC2)OCCN3CCN(CC3)C[C@@H](CC4...\n", - " <rdkit.Chem.rdchem.Mol object at 0x1341df450>\n", + " 195\n", + " PIKWEFAACQLYMF-UHFFFAOYNA-N\n", + " C1=CC=C2C=CC(=CC2=C1)C(N3N=NC(=N3)C=4C=CC=CC4)...\n", + " 6.60000\n", + " <rdkit.Chem.rdchem.Mol object at 0x139a86810>\n", " \n", " \n", - " 7224\n", - " ZZHKHRXDQLQSFW-MHZLTWQENA-N\n", - " CHEMBL28149\n", - " 25553\n", - " A\n", - " 5.67000\n", - " chembl20\n", - " 198050\n", - " 10116\n", - " SLC6A4\n", - " 4061\n", - " C=1C=CC(C(C=2C=CC=CC2)OCCN3CCN(CC3)C[C@H](CC4=...\n", - " <rdkit.Chem.rdchem.Mol object at 0x1341df4c0>\n", + " 196\n", + " AUZWJAMWJZUPHQ-UHFFFAOYNA-N\n", + " C(OC1=CC=C(C=C1)Cl)(C=2C=CC(=CC2)F)C3CNCCC3\n", + " 7.86000\n", + " <rdkit.Chem.rdchem.Mol object at 0x139a86880>\n", " \n", " \n", - " 7225\n", - " ZZHKHRXDQLQSFW-MHZLTWQENA-N\n", - " CHEMBL28149\n", - " 6532\n", - " A\n", - " 5.66000\n", - " chembl20\n", - " 532580\n", - " 9606\n", - " SLC6A4\n", - " 4061\n", - " C=1C=CC(C(C=2C=CC=CC2)OCCN3CCN(CC3)C[C@H](CC4=...\n", - " <rdkit.Chem.rdchem.Mol object at 0x1341df530>\n", + " 197\n", + " JCEWQICHOLLRDL-WUFINQPMNA-N\n", + " O(C1=CC=2[C@@H]3N(C[C@H](C2C=C1)C4=CC=C(N5N=CC...\n", + " 8.22185\n", + " <rdkit.Chem.rdchem.Mol object at 0x139a868f0>\n", " \n", " \n", - " 7226\n", - " ZZJGNQRWIXQQDJ-CPLJGATDNA-N\n", - " 44419306\n", - " 6532\n", - " A\n", - " 5.26241\n", - " pubchem\n", - " 276059\n", - " 9606\n", - " SLC6A4\n", - " 4061\n", - " FC1=CC=C(C[C@H]2C[C@@H](N(CC2)C(=O)C)CCCNC(=O)...\n", - " <rdkit.Chem.rdchem.Mol object at 0x1341df5a0>\n", + " 198\n", + " NGRIUVQYFBDXMT-JYAVWHMHNA-N\n", + " C1NC[C@@H]2[C@H]1[C@@]2(CCOCC)C3=CC(=C(C=C3)Cl)Cl\n", + " 9.30000\n", + " <rdkit.Chem.rdchem.Mol object at 0x139a86960>\n", " \n", " \n", - " 7227\n", - " ZZRHLICOWQQNJL-UHFFFAOYNA-N\n", - " CHEMBL1683875\n", - " 6532\n", - " A\n", - " 6.81000\n", - " chembl20\n", - " 726926\n", - " 9606\n", - " SLC6A4\n", - " 4061\n", - " C1CCCCC1(C2=CC=C(C(=C2)Cl)Cl)CN(CC)C\n", - " <rdkit.Chem.rdchem.Mol object at 0x1341df610>\n", + " 199\n", + " ZWLWOTHDIGRTNE-UHFFFAOYNA-N\n", + " C(C1=CC=NC=C1)(C2=CC=CC=C2)C3=CC=CC=C3\n", + " 5.94000\n", + " <rdkit.Chem.rdchem.Mol object at 0x139a869d0>\n", " \n", " \n", "\n", - "

7228 rows × 12 columns

\n", + "

200 rows × 4 columns

\n", "" ], "text/plain": [ - " Ambit_InchiKey Original_Entry_ID Entrez_ID Activity_Flag \\\n", - "0 AZMKBJHIXZCVNL-BXKDBHETNA-N 44590643 6532 A \n", - "1 AZMKBJHIXZCVNL-UHFFFAOYNA-N 11492305 6532 A \n", - "2 AZOHUEDNMOIDOC-GETDIYNLNA-N 44419340 6532 A \n", - "3 AZSKJKSQZWHDOK-VJSLDGLSNA-N CHEMBL1080745 6532 A \n", - "4 AZTPZTRJVCAAMX-UHFFFAOYNA-N CHEMBL578346 6532 A \n", - "... ... ... ... ... \n", - "7223 ZZHKHRXDQLQSFW-HHHXNRCGNA-N CHEMBL282380 6532 A \n", - "7224 ZZHKHRXDQLQSFW-MHZLTWQENA-N CHEMBL28149 25553 A \n", - "7225 ZZHKHRXDQLQSFW-MHZLTWQENA-N CHEMBL28149 6532 A \n", - "7226 ZZJGNQRWIXQQDJ-CPLJGATDNA-N 44419306 6532 A \n", - "7227 ZZRHLICOWQQNJL-UHFFFAOYNA-N CHEMBL1683875 6532 A \n", - "\n", - " pXC50 DB Original_Assay_ID Tax_ID Gene_Symbol \\\n", - "0 5.68382 pubchem 393260 9606 SLC6A4 \n", - "1 5.16210 pubchem 393258 9606 SLC6A4 \n", - "2 6.66354 pubchem 276059 9606 SLC6A4 \n", - "3 6.96000 chembl20 617082 9606 SLC6A4 \n", - "4 8.00000 chembl20 596934 9606 SLC6A4 \n", - "... ... ... ... ... ... \n", - "7223 5.74000 chembl20 532580 9606 SLC6A4 \n", - "7224 5.67000 chembl20 198050 10116 SLC6A4 \n", - "7225 5.66000 chembl20 532580 9606 SLC6A4 \n", - "7226 5.26241 pubchem 276059 9606 SLC6A4 \n", - "7227 6.81000 chembl20 726926 9606 SLC6A4 \n", + " Ambit_InchiKey \\\n", + "0 RBCQCVSMIQCOMN-PCQZLOAONA-N \n", + "1 ALZTYVXVRZIERJ-UHFFFAOYNA-N \n", + "2 MOEMPBAHOJKXBG-MRXNPFEDNA-N \n", + "3 HEKGBDCRHYILPL-QWOVJGMINA-N \n", + "4 SNNRWIBSGBMYRF-UKRRQHHQNA-N \n", + ".. ... \n", + "195 PIKWEFAACQLYMF-UHFFFAOYNA-N \n", + "196 AUZWJAMWJZUPHQ-UHFFFAOYNA-N \n", + "197 JCEWQICHOLLRDL-WUFINQPMNA-N \n", + "198 NGRIUVQYFBDXMT-JYAVWHMHNA-N \n", + "199 ZWLWOTHDIGRTNE-UHFFFAOYNA-N \n", "\n", - " Ortholog_Group SMILES \\\n", - "0 4061 FC1=CC([C@@H]2O[C@H](CC2)CN)=C(OC)C=C1 \n", - "1 4061 FC1=CC(C2OC(CC2)CN)=C(OC)C=C1 \n", - "2 4061 FC1=CC=C(C[C@H]2C[C@@H](N(CC2)CC=C)CCCNC(=O)NC... \n", - "3 4061 C=1C=C(C=CC1)C2=CC(=C(N2CC(C)C)C)C(NCCCN3CCN(C... \n", - "4 4061 C1=CC=C2C(=C1)C=C(C(N(C3CCNCC3)C4CCC4)=O)C=C2 \n", - "... ... ... \n", - "7223 4061 C=1C=CC(C(C=2C=CC=CC2)OCCN3CCN(CC3)C[C@@H](CC4... \n", - "7224 4061 C=1C=CC(C(C=2C=CC=CC2)OCCN3CCN(CC3)C[C@H](CC4=... \n", - "7225 4061 C=1C=CC(C(C=2C=CC=CC2)OCCN3CCN(CC3)C[C@H](CC4=... \n", - "7226 4061 FC1=CC=C(C[C@H]2C[C@@H](N(CC2)C(=O)C)CCCNC(=O)... \n", - "7227 4061 C1CCCCC1(C2=CC=C(C(=C2)Cl)Cl)CN(CC)C \n", + " SMILES pXC50 \\\n", + "0 C12C([C@@H](OC(C=3C=CC(=CC3)F)C=4C=CC(=CC4)F)C... 6.26000 \n", + "1 O(C1=NC=C2C(CN(CC2=C1)C)C3=CC=C(OC)C=C3)CCCN(C... 7.18046 \n", + "2 O=S(=O)(N(CC=1C=CC2=CC=CC=C2C1)[C@@H]3CCNC3)C 7.77000 \n", + "3 C1(=C2C(CCCC2O)=NC=3C1=CC=CC3)NCC=4C=CC(=CC4)Cl 5.24000 \n", + "4 C1NC[C@@H](C1)[C@H](OC=2C=CC(=NC2C)OC)CC(C)C 9.12000 \n", + ".. ... ... \n", + "195 C1=CC=C2C=CC(=CC2=C1)C(N3N=NC(=N3)C=4C=CC=CC4)... 6.60000 \n", + "196 C(OC1=CC=C(C=C1)Cl)(C=2C=CC(=CC2)F)C3CNCCC3 7.86000 \n", + "197 O(C1=CC=2[C@@H]3N(C[C@H](C2C=C1)C4=CC=C(N5N=CC... 8.22185 \n", + "198 C1NC[C@@H]2[C@H]1[C@@]2(CCOCC)C3=CC(=C(C=C3)Cl)Cl 9.30000 \n", + "199 C(C1=CC=NC=C1)(C2=CC=CC=C2)C3=CC=CC=C3 5.94000 \n", "\n", - " ROMol \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "... ... \n", - "7223 \n", - "7224 \n", - "7225 \n", - "7226 \n", - "7227 \n", + " ROMol \n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + ".. ... \n", + "195 \n", + "196 \n", + "197 \n", + "198 \n", + "199 \n", "\n", - "[7228 rows x 12 columns]" + "[200 rows x 4 columns]" ] }, - "execution_count": 35, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1360,7 +1271,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 44, "metadata": {}, "outputs": [], "source": [ @@ -1370,7 +1281,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ @@ -1380,7 +1291,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 46, "metadata": {}, "outputs": [], "source": [ @@ -1389,7 +1300,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ @@ -1399,7 +1310,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 48, "metadata": {}, "outputs": [], "source": [ @@ -1408,7 +1319,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0\n", + "1 1\n", + "2 2\n", + "3 3\n", + "4 4\n", + "Name: scaffold_ID, dtype: int64" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.scaffold_ID.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, "metadata": {}, "outputs": [], "source": [ @@ -1432,7 +1368,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 51, "metadata": {}, "outputs": [], "source": [ @@ -1478,12 +1414,12 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "from splitter import GroupSplitCV\n", - "cv_scaffold = GroupSplitCV(n_splits=5, test_size=0.2, random_state=random_state)\n" + "cv_scaffold = GroupSplitCV(n_splits=5, test_size=0.2, random_state=random_state)" ] }, { @@ -1495,14 +1431,14 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Runtime: 236.86\n" + "Runtime: 3.21\n" ] } ], @@ -1518,16 +1454,16 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.4337796417083567" + "0.4345305510316685" ] }, - "execution_count": 38, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } @@ -1556,14 +1492,14 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Runtime: 639.33\n" + "Runtime: 14.17\n" ] } ], @@ -1586,16 +1522,16 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'morganfingerprinttransformer__fpSize': 4096, 'ridge__alpha': 8}" + "{'morganfingerprinttransformer__fpSize': 1024, 'ridge__alpha': 4}" ] }, - "execution_count": 47, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } @@ -1606,16 +1542,16 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'morganfingerprinttransformer__fpSize': 4096, 'ridge__alpha': 8}" + "{'morganfingerprinttransformer__fpSize': 2048, 'ridge__alpha': 0.1}" ] }, - "execution_count": 48, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } @@ -1636,12 +1572,12 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 58, "metadata": {}, "outputs": [ { "data": { - "image/png": "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uZni4mJlZGSUKlVms1mxsbFKT08vd7+LFy+qVatWCgkJ0YMPPqhDhw6Vu21SUpICAwPtj5CQEIeyAgCA2sHh0nP8+HF16tSp3PUdO3bU8ePHHTr22bNnVVJScsNIjcViUU5OTpn7tGvXTikpKfrwww/1zjvvyGq16o477tD3339f5vYTJ05Ufn6+/ZGVleVQVgAAUDvUc3THq1ev6sqVK+Wuv3Llyk3XO1tMTIxiYmLsz++44w516NBBCxcu1IwZM27Y3tvbW97e3jWWDwAAuJbDIz0RERHaunVrueu3bNmi8PBwh44dHBwsDw+PG25jkZubq6ZNm1boGJ6enuratau++eYbhzIAAIC6xeHSM3ToUG3ZskUvv/yyiouL7cuvXr2qKVOmaMuWLRo2bJhDx/by8lJ0dLTS0tLsy6xWq9LS0kqN5txMSUmJvvzySzVr1syhDAAAoG5x+IrMV69e1YABA/T3v/9djRo1Uvv27SVJR44c0blz59S7d29t3bpVXl5eDgVbvXq14uPjtXDhQvXo0UPJycl6//33deTIEVksFo0YMUItWrRQUlKSJGn69Om6/fbb1aZNG/3444964403tGHDBmVkZCgyMvJXX48rMgMAUPtU5vPb4Tk9np6e2rJli/785z/r3Xfftd98NCIiQhMmTNC4cePk6enp6OE1ZMgQ5eXlafLkycrJyVFUVJRSU1Ptk5szMzNlNv97oOr8+fMaNWqUcnJydMsttyg6Olqff/55hQoPAACo+xwe6alrGOkBAKD2qZGRnrJcu3ZNH374oc6dO6f777+/wpOOAQAAqpvDE5nHjx+v7t2725/bbDb1799fjzzyiJ588kl16tRJJ06ccEpIAACAqnK49KSmpqp379725x9//LF27dqlF198Ue+++64kadasWVVPCAAA4AQOn97KysoqdRuKjz/+WL/5zW/sRefQoUNauXJl1RMCAAA4gcMjPcXFxapX79+dafv27aXuldW6dWudPn26aukAAACcxOHSExISYr/556FDh/Ttt9+qT58+9vVnzpyRn59f1RMCAAA4gcOntx599FHNmDFDZ86c0aFDhxQQEKB7773Xvv7AgQMO34YCAADA2Rwe6Zk4caJGjhyp9PR0mUwmLV++XA0bNpQk5efn66OPPlL//v2dlRMAAKBKquXihFarVRcuXJCvr2+Vrspc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pKdjx45as2aNJMlms2ndunUKCQlxTkoAAIAqcrj0xMbGau3atSopKZEkPfnkk0pNTVV4eLjatm2rbdu26fHHH3daUAAAgKpw+CvrEyZM0PDhw+1fUx8zZoyuXLmid955Rx4eHho1apTGjx/vtKB1RW5urvLz810dw/BOnTpV6k+4XmBgoCwWi6tjAKjDTLbK3EG0DisoKFBgYKDy8/MVEBBQLa+Rm5urPwwfoavFRdVyfKA28/Ty1jsrllN8AFRKZT6/HR7pKSkpsX9rCxWTn5+vq8VFuty6j6w+ga6OA7gN85V86du/Kz8/n9IDoNo4XHqaN2+u3//+9xoxYoSioqKcGKnus/oEytog2NUxAAAwFIcnMrdu3VrJycmKjo5Wly5dNGfOHOXm5jozGwAAgNM4XHrS09N17Ngx/e///q8uXLigF154QSEhIbrvvvv0wQcf2C9UCAAA4A4cLj2S1KZNG82YMUPffvuttm/fruHDh2v37t0aMmSImjZtqqeeespZOQEAAKqkSqXnl/r06aMlS5YoJydHixcvltVq1eLFi511eAAAgCpxeCJzWT799FMtX75c69at08WLFxUUFOTMwwMAADisyqXnyJEjWr58uVauXKnvv/9e9erV08CBAxUfH6/77rvPGRkBAACqzOHSM2/ePC1fvlwZGRmy2Wy67bbb9Pzzz2vYsGEKDubr2AAAwL04XHqeffZZNW3aVM8//7zi4+PVsWNHZ+YCAABwKodLz8aNGzVgwACZzU6bCw0AAFBtHC4999xzjzNzAAAAVCuGaQAAgCFQegAAgCFQegAAgCFQegAAgCFQegAAgCFQegAAgCFUqPSsWbNGzz33nFJSUnTt2rVS6377299WSzAAAABn+tXSM2/ePI0dO1aXLl3SG2+8oV69euncuXP29bt27arWgAAAAM5QodKzefNmLVq0SF9++aWioqLUr18/e/Gx2WzVHhIAAKCqfrX0nD59Wl26dJEk1atXTwsXLlS/fv1011136YcffpDJZKr2kAAAAFX1q6UnODhY3333Xallc+bM0V133aW77rrrhjk+AAAA7uhXS0///v21dOnSG5YnJyerb9++unLlSnXkkiTNnz9fYWFh8vHxUc+ePbV3795yt123bp26deumhg0bqkGDBoqKitKKFSuqLRsAAKhdfvWGo/PmzSt3NOcvf/mLXnjhBaeHkqTVq1crMTFRCxYsUM+ePZWcnKy4uDgdPXpUTZo0uWH7Ro0aadKkSWrfvr28vLz0t7/9TQkJCWrSpIni4uKqJSMAAKg9fnWkx8vLS76+vuWuDw0NdWqg6+bMmaNRo0YpISFBkZGRWrBggXx9fZWSklLm9n379tVDDz2kDh06KDw8XOPGjVPnzp21e/fuaskHAABqF7e8OGFxcbEyMjIUGxtrX2Y2mxUbG6v09PRf3d9msyktLU1Hjx7VnXfeWeY2RUVFKigoKPUAAAB1V6VLz4YNGzR48GANGDBA06ZN04ULF8rcbvfu3Xr++ecdCnX27FmVlJTIYrGUWm6xWJSTk1Pufvn5+fLz85OXl5d++9vfau7cubr77rvL3DYpKUmBgYH2R0hIiENZAQBA7fCrc3p+afXq1Ro2bJj92jzbtm3T+++/r88//1yBgYHavn273nvvPX300UfKy8uTJM2ePdv5qcvh7++vgwcP6uLFi0pLS1NiYqJat26tvn373rDtxIkTlZiYaH9eUFBA8QEAoA6rVOmZM2eOmjZtqpUrVyo8PFwff/yxXnzxRc2aNUvp6enatWuXbDabmjdvrieeeEL33XefQ6GCg4Pl4eGh3NzcUstzc3PVtGnTcvczm81q06aNJCkqKkqHDx9WUlJSmaXH29tb3t7eDuUDAAC1T6VKz9GjRzVhwgR7iRgzZowuXLigl19+WVarVU888YRGjx6t6OjoKoXy8vJSdHS00tLSNGjQIEmS1WpVWlqaxo4dW+HjWK1WFRUVVSlLdTBf/tHVEQC3wnsCQE2oVOkp6xTQgw8+qIkTJ2rChAl69dVXnRYsMTFR8fHx6tatm3r06KHk5GQVFhYqISFBkjRixAi1aNFCSUlJkn6ao9OtWzeFh4erqKhIGzdu1IoVK/TWW285LZOz1P9up6sjAABgOJUqPZJuuO1E48aNJUm9e/d2TqKfDRkyRHl5eZo8ebJycnIUFRWl1NRU++TmzMxMmc3/noddWFioMWPG6Pvvv1f9+vXVvn17vfPOOxoyZIhTcznD5d/cKWv9hq6OAbgN8+Uf+c8AgGpX6dLzySefKCAgQF27dlWLFi3sy6tjfszYsWPLPZ21Y8eOUs9feeUVvfLKK07PUB2s9RvK2iDY1TEAADCUSpee9957T6tWrZL00yhPZGSkTCaT9u/fr/bt26t58+ZODwkAAFBVlSo9+fn52r9/v/bv36+MjAzt379fO3fulM1m00svvaSXXnpJwcHB6tKli6KiotS1a1cNHTq0urIDAABUWKVKj7+/v/r06aM+ffrYlxUWFurgwYP2EpSRkaHt27dr27ZtMplMlB4AAOAWKn166z81aNBAvXr1Uq9evezLLl++rH/+85/av39/VQ8PAADgFFUuPWWpX7++br/9dt1+++3VcXgAAIBKc8sbjgIAADgbpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABgCpQcAABhCPVcHMCLzlXxXRwDcCu8JADWB0lODAgMD5enlLX37d1dHAdyOp5e3AgMDXR0DQB1G6alBFotF76xYrvx8/lfraqdOndLMmTM1adIktWrVytVxoJ/+U2CxWFwdA0AdRumpYRaLhX/Y3UirVq0UERHh6hgAgBrARGYAAGAIlB4AAGAIlB4AAGAIlB4AAGAIbl165s+fr7CwMPn4+Khnz57au3dvudsuXrxYvXv31i233KJbbrlFsbGxN90eAAAYi9uWntWrVysxMVFTpkzR/v371aVLF8XFxenMmTNlbr9jxw4NHTpU27dvV3p6ukJCQjRgwAD961//quHkAADAHblt6ZkzZ45GjRqlhIQERUZGasGCBfL19VVKSkqZ269cuVJjxoxRVFSU2rdvr//7v/+T1WpVWlpaDScHAADuyC1LT3FxsTIyMhQbG2tfZjabFRsbq/T09Aod49KlS7p69aoaNWpU5vqioiIVFBSUegAAgLrLLUvP2bNnVVJScsNF/CwWi3Jycip0jJdeeknNmzcvVZx+KSkpSYGBgfZHSEhIlXMDAAD35Zalp6pmzZqlVatWaf369fLx8Slzm4kTJyo/P9/+yMrKquGUAACgJrnlbSiCg4Pl4eGh3NzcUstzc3PVtGnTm+775ptvatasWdq2bZs6d+5c7nbe3t7y9vZ2Sl4AAOD+3HKkx8vLS9HR0aUmIV+flBwTE1Pufq+//rpmzJih1NRUdevWrSaiAgCAWsItR3okKTExUfHx8erWrZt69Oih5ORkFRYWKiEhQZI0YsQItWjRQklJSZKk1157TZMnT9a7776rsLAw+9wfPz8/+fn5ueznAAAA7sFtS8+QIUOUl5enyZMnKycnR1FRUUpNTbVPbs7MzJTZ/O+BqrfeekvFxcX67//+71LHmTJliqZOnVqT0QEAgBty29IjSWPHjtXYsWPLXLdjx45Sz0+ePFn9gQAAQK3llnN6AAAAnI3SAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADKGeqwOg9rly5YoyMzNdHaNKTp06VerP2i40NFQ+Pj6ujgEAbo3Sg0rLzMzU6NGjXR3DKWbOnOnqCE6xaNEiRUREuDoGALg1Sg8qLTQ0VIsWLXJ1DPxCaGioqyMAgNuj9KDSfHx8GFUAANQ6TGQGAACGQOkBAACGQOkBAACGQOkBAACGQOkBAACGQOkBAACGQOkBAACGQOkBAACGQOkBAACGQOkBAACGQOkBAACGQOkBAACGQOkBAACGwF3Wf2az2SRJBQUFLk4CAAAq6vrn9vXP8Zuh9PzswoULkqSQkBAXJwEAAJV14cIFBQYG3nQbk60i1cgArFarsrOz5e/vL5PJ5Oo4qGYFBQUKCQlRVlaWAgICXB0HgBPx/jYWm82mCxcuqHnz5jKbbz5rh5Gen5nNZrVs2dLVMVDDAgIC+EcRqKN4fxvHr43wXMdEZgAAYAiUHgAAYAiUHhiSt7e3pkyZIm9vb1dHAeBkvL9RHiYyAwAAQ2CkBwAAGAKlBwAAGAKlBwAAGAKlB4azYcMGtWnTRh4eHnruuefKXfZrwsLClJycfNNtTCaTNmzYUKW8ABw3cuRIDRo0yNUx4Ca4OCEM58knn1RCQoKeffZZ+fv7l7sMAFC3UHpgKBcvXtSZM2cUFxen5s2bl7sMQM0pLi6Wl5eXq2PAADi9Bbe0Zs0aderUSfXr11dQUJBiY2NVWFgoSUpJSVHHjh3l7e2tZs2aaezYsfb95syZo06dOqlBgwYKCQnRmDFjdPHiRUnSjh077KM4/fr1k8lkKneZJK1du9b+OmFhYZo9e/ZNMx8/flx33nmnfHx8FBkZqa1btzr71wLUCX379tXYsWP13HPPKTg4WHFxcTd970rS0qVL1bBhQ23evFkdOnSQn5+f7rnnHp0+fdq+TUlJiRITE9WwYUMFBQVp/PjxN9x5u6ioSM8++6yaNGkiHx8f/dd//Zf27dtnX79jxw6ZTCZt3rxZXbt2Vf369dWvXz+dOXNGmzZtUocOHRQQEKBhw4bp0qVL1f/LglNReuB2Tp8+raFDh+qxxx7T4cOHtWPHDj388MOy2Wx666239Mwzz2j06NH68ssv9dFHH6lNmzb2fc1ms/7yl7/o0KFDWrZsmT799FONHz9eknTHHXfo6NGjkn4qNKdPny53WUZGhh555BE9+uij+vLLLzV16lS9/PLLWrp0aZmZrVarHn74YXl5eWnPnj1asGCBXnrpper9RQG12LJly+Tl5aXPPvtMCxYsuOl797pLly7pzTff1IoVK7Rz505lZmbqhRdesK+fPXu2li5dqpSUFO3evVvnzp3T+vXrSx1j/PjxWrt2rZYtW6b9+/erTZs2iouL07lz50ptN3XqVM2bN0+ff/65srKy9Mgjjyg5OVnvvvuuPvnkE23ZskVz586tvl8QqocNcDMZGRk2SbaTJ0/esK558+a2SZMmVfhYH3zwgS0oKMj+/Pz58zZJtu3bt9902bBhw2x33313qWO9+OKLtsjISPvzVq1a2f785z/bbDabbfPmzbZ69erZ/vWvf9nXb9q0ySbJtn79+grnBYygT58+tq5du950m/9877799ts2SbZvvvnGvmz+/Pk2i8Vif96sWTPb66+/bn9+9epVW8uWLW0PPvigzWaz2S5evGjz9PS0rVy50r5NcXGxrXnz5vb9tm/fbpNk27Ztm32bpKQkmyTbiRMn7MuefPJJW1xcXCV/crgaIz1wO126dFH//v3VqVMnDR48WIsXL9b58+d15swZZWdnq3///uXuu23bNvXv318tWrSQv7+/hg8frh9++KHSw9CHDx9Wr169Si3r1auXjh8/rpKSkjK3DwkJKTUnKCYmplKvCRhJdHR0qecVee/6+voqPDzc/rxZs2Y6c+aMJCk/P1+nT59Wz5497evr1aunbt262Z+fOHFCV69eLfXe9vT0VI8ePXT48OFSeTp37mz/u8Vika+vr1q3bl1q2fXXRu1B6YHb8fDw0NatW7Vp0yZFRkZq7ty5ateunXJzc2+638mTJ3Xfffepc+fOWrt2rTIyMjR//nxJP02UBOA+GjRoYP97Rd+7np6epY5hMplumLPjLL98LZPJVOZrW63WanltVB9KD9ySyWRSr169NG3aNB04cEBeXl7aunWrwsLClJaWVuY+GRkZslqtmj17tm6//XZFREQoOzvbodfv0KGDPvvss1LLPvvsM0VERMjDw6PM7bOyskpNqvzHP/7h0GsDRuOM925gYKCaNWumPXv22Jddu3ZNGRkZ9ufh4eH2eUTXXb16Vfv27VNkZGTVfxC4Pb6yDrezZ88epaWlacCAAWrSpIn27NmjvLw8dejQQVOnTtVTTz2lJk2aaODAgbpw4YI+++wz/fGPf1SbNm109epVzZ07V/fff799gqQjnn/+eXXv3l0zZszQkCFDlJ6ernnz5umvf/1rmdvHxsYqIiJC8fHxeuONN1RQUKBJkyZV5dcAGIaz3rvjxo3TrFmz1LZtW7Vv315z5szRjz/+aF/foEEDPf3003rxxRfVqFEjhYaG6vXXX9elS5f0+OOPO/EngrtipAduJyAgQDt37tS9996riIgI/elPf9Ls2bM1cOBAxcfHKzk5WX/961/VsWNH3XfffTp+/Likn+YCzZkzR6+99ppuvfVWrVy5UklJSQ5luO222/T+++9r1apVuvXWWzV58mRNnz5dI0eOLHN7s9ms9evX6/Lly+rRo4eeeOIJzZw509FfAWAoznrvPv/88xo+fLji4+MVExMjf39/PfTQQ6W2mTVrln73u99p+PDhuu222/TNN99o8+bNuuWWW5z148CNmWzVdUIUAADAjTDSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSAwAADIHSA8BQ+vbtq+eee87+PCwsTMnJyS7LA6DmcO8tAIa2b9++Unf8NplMWr9+vQYNGuS6UACqBaUHgKE1btzY1REA1BBObwGoddasWaNOnTqpfv36CgoKUmxsrAoLCzVy5EgNGjRI06ZNU+PGjRUQEKCnnnpKxcXF5R7rl6e3wsLCJEkPPfSQTCaT/TmAuoGRHgC1yunTpzV06FC9/vrreuihh3ThwgXt2rVL1++dnJaWJh8fH+3YsUMnT55UQkKCgoKCKnTX+3379qlJkyZ6++23dc8998jDw6O6fxwANYjSA6BWOX36tK5du6aHH35YrVq1kiR16tTJvt7Ly0spKSny9fVVx44dNX36dL344ouaMWOGzOabD25fP9XVsGFDNW3atPp+CAAuwektALVKly5d1L9/f3Xq1EmDBw/W4sWLdf78+VLrfX197c9jYmJ08eJFZWVluSIuADdC6QFQq3h4eGjr1q3atGmTIiMjNXfuXLVr107fffedq6MBcHOUHgC1jslkUq9evTRt2jQdOHBAXl5eWr9+vSTpn//8py5fvmzf9h//+If8/PwUEhJSoWN7enqqpKSkWnIDcC1KD4BaZc+ePXr11Vf1xRdfKDMzU+vWrVNeXp46dOggSSouLtbjjz+ur7/+Whs3btSUKVM0duzYX53Pc11YWJjS0tKUk5NT6rQZgNqP0gOgVgkICNDOnTt17733KiIiQn/60580e/ZsDRw4UJLUv39/tW3bVnfeeaeGDBmiBx54QFOnTq3w8WfPnq2tW7cqJCREXbt2raafAoArmGzXv+cJALXcyJEj9eOPP2rDhg2ujgLADTHSAwAADIHSAwAADIHTWwAAwBAY6QEAAIZA6QEAAIZA6QEAAIZA6QEAAIZA6QEAAIZA6QEAAIZA6QEAAIZA6QEAAIbw/79SVse8MfA/AAAAAElFTkSuQmCC", + "image/png": "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ihUrlJaWpj179ig/P1/r16+vcIzJkyfrww8/1MqVK5WZmak2bdooJiZG+fn5FbabNWuWFi5cqC+++EJnz57VU089pZSUFL333nv65JNPtHXrVr3xxhs19wtCzbABbiYjI8MmyXbmzJnr1jVv3tw2ffr0mz7WBx98YGvcuLH9+aVLl2ySbDt27LjhsqFDh9r69u1b4ViTJk2yRUZG2p+HhYXZXn/9dZvNZrNt2bLFVq9ePdt3331nX79p0yabJNv69etvOi9gBj179rR16tTphtv852d3+fLlNkm2EydO2JctWrTIFhQUZH/erFkz2/z58+3Pr169amvZsqXtiSeesNlsNtuPP/5o8/T0tL377rv2bUpLS23Nmze377djxw6bJNv27dvt28ydO9cmyXby5En7smeffdYWExNTzXcOV2OkB24nKipKffr0UYcOHTRo0CAtXbpUly5d0vnz55WTk6M+ffpUue/27dvVp08ftWjRQn5+fho2bJi+//77ag9DHz58WN27d6+wrHv37jp+/LjKysoq3T4kJKTCnKBu3bpV6zUBM+ncuXOF5zfz2fX19VXr1q3tz5s1a6bz589LkgoKCnTu3Dl17drVvr5evXq699577c9Pnjypq1evVvhse3p6qkuXLjp8+HCFPHfffbf956CgIPn6+qpVq1YVlv3y2qg9KD1wO1arVdu2bdOmTZsUGRmpN954Q23btlVeXt4N9ztz5owee+wx3X333frwww+VkZGhRYsWSfp5oiQA99GgQQP7zzf72fX09KxwDIvFct2cHWf59WtZLJZKX7u8vLxGXhs1h9IDt2SxWNS9e3fNnj1bBw8elJeXl7Zt26bw8HClp6dXuk9GRobKy8u1YMEC3X///YqIiFBOTo6h12/Xrp0+//zzCss+//xzRUREyGq1Vrr92bNnK0yq/PLLLw29NmA2zvjsBgQEqFmzZtq3b5992bVr15SRkWF/3rp1a/s8ol9cvXpVBw4cUGRkpONvBG6Pr6zD7ezbt0/p6enq16+fmjZtqn379unChQtq166dZs2apeeee05NmzbVI488osuXL+vzzz/Xf//3f6tNmza6evWq3njjDfXv398+QdKIiRMn6r777tOrr76qwYMHa+/evVq4cKHefPPNSrePjo5WRESERowYoddee02FhYWaPn26I78GwDSc9dl98cUXNW/ePN1xxx268847lZycrB9++MG+vkGDBho3bpwmTZqk22+/XaGhoZo/f75++uknPfPMM058R3BXjPTA7fj7+2vXrl169NFHFRERoVdeeUULFizQI488ohEjRiglJUVvvvmm2rdvr8cee0zHjx+X9PNcoOTkZP3lL3/RXXfdpXfffVdz5841lOGee+7R3//+d61evVp33XWXZs6cqcTERI0cObLS7T08PLR+/XpduXJFXbp00ejRo5WUlGT0VwCYirM+uxMnTtSwYcM0YsQIdevWTX5+fnryyScrbDNv3jz94Q9/0LBhw3TPPffoxIkT2rJli2677TZnvR24MYutpk6IAgAAuBFGegAAgClQegAAgClQegAAgClQegAAgClQegAAgClQegAAgClQegAAgClQegAAgClQegCYSq9evfTSSy/Zn4eHhyslJcVleQDcOtx7C4CpHThwoMIdvy0Wi9avX68BAwa4LhSAGkHpAWBqTZo0cXUEALcIp7cA1Dpr165Vhw4dVL9+fTVu3FjR0dEqKirSyJEjNWDAAM2ePVtNmjSRv7+/nnvuOZWWllZ5rF+f3goPD5ckPfnkk7JYLPbnAOoGRnoA1Crnzp3TkCFDNH/+fD355JO6fPmydu/erV/unZyeni4fHx/t3LlTZ86cUWxsrBo3bnxTd70/cOCAmjZtquXLl+vhhx+W1Wqt6bcD4Bai9ACoVc6dO6dr165p4MCBCgsLkyR16NDBvt7Ly0tpaWny9fVV+/btlZiYqEmTJunVV1+Vh8eNB7d/OdXVqFEjBQcH19ybAOASnN4CUKtERUWpT58+6tChgwYNGqSlS5fq0qVLFdb7+vran3fr1k0//vijzp4964q4ANwIpQdArWK1WrVt2zZt2rRJkZGReuONN9S2bVudPn3a1dEAuDlKD4Bax2KxqHv37po9e7YOHjwoLy8vrV+/XpL0j3/8Q1euXLFv++WXX6phw4YKCQm5qWN7enqqrKysRnIDcC1KD4BaZd++fZozZ46++uorZWdna926dbpw4YLatWsnSSotLdUzzzyjb7/9Vp9++qkSEhIUFxf3m/N5fhEeHq709HTl5uZWOG0GoPaj9ACoVfz9/bVr1y49+uijioiI0CuvvKIFCxbokUcekST16dNHd9xxhx588EENHjxYjz/+uGbNmnXTx1+wYIG2bdumkJAQderUqYbeBQBXsNh++Z4nANRyI0eO1A8//KANGza4OgoAN8RIDwAAMAVKDwAAMAVObwEAAFNgpAcAAJgCpQcAAJgCpQcAAJgCpQcAAJgCpQcAAJgCpQcAAJgCpQcAAJgCpQcAAJjC/wdfjSBvpGNEDwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -1678,7 +1614,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 59, "metadata": {}, "outputs": [], "source": [ @@ -1689,19 +1625,19 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 60, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " Multiple Comparison of Means - Tukey HSD, FWER=0.05 \n", - "=====================================================\n", - "group1 group2 meandiff p-adj lower upper reject\n", - "-----------------------------------------------------\n", - "random scaffold -0.3827 0.0 -0.4249 -0.3404 True\n", - "-----------------------------------------------------\n" + " Multiple Comparison of Means - Tukey HSD, FWER=0.05 \n", + "======================================================\n", + "group1 group2 meandiff p-adj lower upper reject\n", + "------------------------------------------------------\n", + "random scaffold -0.1391 0.0165 -0.2503 -0.0279 True\n", + "------------------------------------------------------\n" ] } ], @@ -1722,12 +1658,12 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 61, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1752,7 +1688,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 62, "metadata": {}, "outputs": [ { @@ -1785,14 +1721,14 @@ " \n", " 0\n", " scaffold\n", - " 0.293215\n", - " 0.43378\n", + " 0.508007\n", + " 0.434531\n", " \n", " \n", " 1\n", " random\n", - " 0.660820\n", - " 0.43378\n", + " 0.652592\n", + " 0.416297\n", " \n", " \n", "\n", @@ -1800,11 +1736,11 @@ ], "text/plain": [ " split type validation score test score\n", - "0 scaffold 0.293215 0.43378\n", - "1 random 0.660820 0.43378" + "0 scaffold 0.508007 0.434531\n", + "1 random 0.652592 0.416297" ] }, - "execution_count": 53, + "execution_count": 62, "metadata": {}, "output_type": "execute_result" }