@@ -150,8 +150,8 @@ class LeaveOneOut(_PartitionIterator):
150
150
domain-specific stratification of the dataset.
151
151
"""
152
152
153
- def _iter_test_indices (self ):
154
- return range (self .n )
153
+ def _iter_test_indices (self , y ):
154
+ return range (self ._sample_size ( y ) )
155
155
156
156
def __repr__ (self ):
157
157
return '%s.%s(n=%i)' % (
@@ -161,6 +161,7 @@ def __repr__(self):
161
161
)
162
162
163
163
def __len__ (self ):
164
+ # TODO: remove?
164
165
return self .n
165
166
166
167
@@ -208,12 +209,14 @@ class LeavePOut(_PartitionIterator):
208
209
TRAIN: [0 1] TEST: [2 3]
209
210
"""
210
211
211
- def __init__ (self , n , p , indices = None ):
212
+ def __init__ (self , n = None , p = None , indices = None ):
212
213
super (LeavePOut , self ).__init__ (n , indices )
214
+ if p is None :
215
+ raise ValueError ("LeavePOut: must supply p" )
213
216
self .p = p
214
217
215
- def _iter_test_indices (self ):
216
- for comb in combinations (range (self .n ), self .p ):
218
+ def _iter_test_indices (self , y ):
219
+ for comb in combinations (range (self ._sample_size ( y ) ), self .p ):
217
220
yield np .array (comb )
218
221
219
222
def __repr__ (self ):
@@ -225,6 +228,7 @@ def __repr__(self):
225
228
)
226
229
227
230
def __len__ (self ):
231
+ # TODO: remove?
228
232
return int (factorial (self .n ) / factorial (self .n - self .p )
229
233
/ factorial (self .p ))
230
234
@@ -512,16 +516,20 @@ class LeaveOneLabelOut(_PartitionIterator):
512
516
513
517
"""
514
518
515
- def __init__ (self , labels , indices = None ):
516
- super (LeaveOneLabelOut , self ).__init__ (len (labels ), indices )
517
- # We make a copy of labels to avoid side-effects during iteration
518
- self .labels = np .array (labels , copy = True )
519
- self .unique_labels = np .unique (labels )
520
- self .n_unique_labels = len (self .unique_labels )
519
+ def __init__ (self , labels = None , indices = None ):
520
+ n = None if labels is None else len (labels )
521
+ super (LeaveOneLabelOut , self ).__init__ (n , indices )
522
+ self .labels = labels
521
523
522
- def _iter_test_masks (self ):
523
- for i in self .unique_labels :
524
- yield self .labels == i
524
+ def _iter_test_masks (self , y ):
525
+ labels = self .labels if y is None else y
526
+ # We make a copy of labels to avoid side-effects during iteration
527
+ labels = np .array (labels , copy = True )
528
+ unique_labels = np .unique (labels )
529
+ n_unique_labels = len (unique_labels )
530
+ for i in unique_labels :
531
+ print ("yielding" , labels == i )
532
+ yield labels == i
525
533
526
534
def __repr__ (self ):
527
535
return '%s.%s(labels=%s)' % (
@@ -531,6 +539,7 @@ def __repr__(self):
531
539
)
532
540
533
541
def __len__ (self ):
542
+ # TODO: remove?
534
543
return self .n_unique_labels
535
544
536
545
@@ -585,21 +594,27 @@ class LeavePLabelOut(_PartitionIterator):
585
594
[5 6]] [1] [2 1]
586
595
"""
587
57AE
596
588
- def __init__ (self , labels , p , indices = None ):
589
- # We make a copy of labels to avoid side-effects during iteration
590
- super (LeavePLabelOut , self ).__init__ (len ( labels ) , indices )
591
- self . labels = np . array ( labels , copy = True )
592
- self . unique_labels = np . unique ( labels )
593
- self . n_unique_labels = len ( self . unique_labels )
597
+ def __init__ (self , labels = None , p = None , indices = None ):
598
+ n = None if labels is None else len ( labels )
599
+ super (LeavePLabelOut , self ).__init__ (n , indices )
600
+ if p is None :
601
+ raise ValueError ( "LeavePLabelOut: must supply p" )
602
+
594
603
self .p = p
604
+ self .labels = labels
595
605
596
- def _iter_test_masks (self ):
597
- comb = combinations (range (self .n_unique_labels ), self .p )
606
+ def _iter_test_masks (self , y ):
607
+ labels = self .labels if y is None else y
608
+ # We make a copy of labels to avoid side-effects during iteration
609
+ labels = np .array (labels , copy = True )
610
+ unique_labels = np .unique (labels )
611
+ n_unique_labels = len (unique_labels )
612
+ comb = combinations (range (n_unique_labels ), self .p )
598
613
for idx in comb :
599
- test_index = self ._empty_mask ()
614
+ test_index = self ._empty_mask (labels )
600
615
idx = np .array (idx )
601
- for l in self . unique_labels [idx ]:
602
- test_index [self . labels == l ] = True
616
+ for l in unique_labels [idx ]:
617
+ test_index [labels == l ] = True
603
618
yield test_index
604
619
605
620
def __repr__ (self ):
0 commit comments