45
45
from sklearn .feature_selection import f_classif , f_regression #TODO create a selectomixin using these?
46
46
from sklearn .discriminant_analysis import LinearDiscriminantAnalysis , QuadraticDiscriminantAnalysis
47
47
from sklearn .gaussian_process import GaussianProcessRegressor , GaussianProcessClassifier
48
- from sklearn .impute import SimpleImputer
48
+ from sklearn .experimental import enable_iterative_imputer
49
+ from sklearn .impute import SimpleImputer , IterativeImputer , KNNImputer
49
50
50
51
all_methods = [SGDClassifier , RandomForestClassifier , ExtraTreesClassifier , GradientBoostingClassifier , MLPClassifier , DecisionTreeClassifier , XGBClassifier , KNeighborsClassifier , SVC , LogisticRegression , LGBMClassifier , LinearSVC , GaussianNB , BernoulliNB , MultinomialNB , ExtraTreesRegressor , RandomForestRegressor , GradientBoostingRegressor , BaggingRegressor , DecisionTreeRegressor , KNeighborsRegressor , XGBRegressor , ZeroCount , ColumnOneHotEncoder , Binarizer , FastICA , FeatureAgglomeration , MaxAbsScaler , MinMaxScaler , Normalizer , Nystroem , PCA , PolynomialFeatures , RBFSampler , RobustScaler , StandardScaler , SelectFwe , SelectPercentile , VarianceThreshold , SGDRegressor , Ridge , Lasso , ElasticNet , Lars , LassoLars , LassoLarsCV , RidgeCV , SVR , LinearSVR , AdaBoostRegressor , GradientBoostingRegressor , RandomForestRegressor , BaggingRegressor , ExtraTreesRegressor , DecisionTreeRegressor , KNeighborsRegressor , ElasticNetCV ,
51
52
AdaBoostClassifier ,MLPRegressor ,
56
57
GaussianProcessClassifier , BaggingClassifier ,LGBMRegressor ,
57
58
Passthrough ,SkipTransformer ,
58
59
PassKBinsDiscretizer ,
59
- SimpleImputer ,
60
+ SimpleImputer , IterativeImputer , KNNImputer
60
61
]
61
62
62
63
124
125
"all_transformers" : ["transformers" , "scalers" ],
125
126
126
127
"arithmatic" : ["AddTransformer" , "mul_neg_1_Transformer" , "MulTransformer" , "SafeReciprocalTransformer" , "EQTransformer" , "NETransformer" , "GETransformer" , "GTTransformer" , "LETransformer" , "LTTransformer" , "MinTransformer" , "MaxTransformer" ],
127
- "imputers" : ["SimpleImputer" ],
128
+ "imputers" : ["SimpleImputer" , "IterativeImputer" , "KNNImputer" ],
128
129
"skrebate" : ["ReliefF" , "SURF" , "SURFstar" , "MultiSURF" ],
129
130
"genetic_encoders" : ["DominantEncoder" , "RecessiveEncoder" , "HeterosisEncoder" , "UnderDominanceEncoder" , "OverDominanceEncoder" ],
130
131
136
137
137
138
def get_configspace (name , n_classes = 3 , n_samples = 1000 , n_features = 100 , random_state = None ):
138
139
match name :
139
- case "SimpleImputer" :
140
- return imputers .simple_imputer_cs
141
140
142
141
#autoqtl_builtins.py
143
142
case "FeatureEncodingFrequencySelector" :
@@ -352,6 +351,12 @@ def get_configspace(name, n_classes=3, n_samples=1000, n_features=100, random_st
352
351
)
353
352
354
353
#imputers.py
354
+ case "SimpleImputer" :
355
+ return imputers .simple_imputer_cs
356
+ case "IterativeImputer" :
357
+ return imputers .get_IterativeImputer_config_space (n_features = n_features , random_state = random_state )
358
+ case "KNNImputer" :
359
+ return imputers .get_KNNImputer_config_space (n_samples = n_samples )
355
360
356
361
#mdr_configs.py
357
362
case "MDR" :
@@ -401,12 +406,12 @@ def get_configspace(name, n_classes=3, n_samples=1000, n_features=100, random_st
401
406
raise ValueError (f"Could not find configspace for { name } " )
402
407
403
408
404
- def get_search_space (name , n_classes = 3 , n_samples = 100 , n_features = 100 , random_state = None , return_choice_pipeline = True ):
409
+ def get_search_space (name , n_classes = 3 , n_samples = 100 , n_features = 100 , random_state = None , return_choice_pipeline = True , base_node = EstimatorNode ):
405
410
406
411
407
412
#if list of names, return a list of EstimatorNodes
408
413
if isinstance (name , list ) or isinstance (name , np .ndarray ):
409
- search_spaces = [get_search_space (n , n_classes = n_classes , n_samples = n_samples , n_features = n_features , random_state = random_state , return_choice_pipeline = False ) for n in name ]
414
+ search_spaces = [get_search_space (n , n_classes = n_classes , n_samples = n_samples , n_features = n_features , random_state = random_state , return_choice_pipeline = False , base_node = base_node ) for n in name ]
410
415
#remove Nones
411
416
search_spaces = [s for s in search_spaces if s is not None ]
412
417
@@ -417,12 +422,12 @@ def get_search_space(name, n_classes=3, n_samples=100, n_features=100, random_st
417
422
418
423
if name in GROUPNAMES :
419
424
name_list = GROUPNAMES [name ]
420
- return get_search_space (name_list , n_classes = n_classes , n_samples = n_samples , n_features = n_features , random_state = random_state , return_choice_pipeline = return_choice_pipeline )
425
+ return get_search_space (name_list , n_classes = n_classes , n_samples = n_samples , n_features = n_features , random_state = random_state , return_choice_pipeline = return_choice_pipeline , base_node = base_node )
421
426
422
- return get_node (name , n_classes = n_classes , n_samples = n_samples , n_features = n_features , random_state = random_state )
427
+ return get_node (name , n_classes = n_classes , n_samples = n_samples , n_features = n_features , random_state = random_state , base_node = base_node )
423
428
424
429
425
- def get_node (name , n_classes = 3 , n_samples = 100 , n_features = 100 , random_state = None ):
430
+ def get_node (name , n_classes = 3 , n_samples = 100 , n_features = 100 , random_state = None , base_node = EstimatorNode ):
426
431
427
432
#these are wrappers that take in another estimator as a parameter
428
433
# TODO Add AdaBoostRegressor, AdaBoostClassifier as wrappers? wrap a decision tree with different params?
@@ -443,43 +448,52 @@ def get_node(name, n_classes=3, n_samples=100, n_features=100, random_state=None
443
448
sfm_sp = get_configspace (name = "SelectFromModel" , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
444
449
ext = get_node ("ExtraTreesRegressor" , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
445
450
return WrapperPipeline (estimator_search_space = ext , method = SelectFromModel , space = sfm_sp )
446
-
451
+ # TODO Add IterativeImputer with more estimator methods
452
+ '''
453
+ if name == "IterativeImputer_learnedestimators":
454
+ iteative_sp = get_configspace(name="IterativeImputer", n_classes=n_classes, n_samples=n_samples, random_state=random_state)
455
+ regessor_searchspace = get_search_space(["LinearRegression", ..], n_classes=n_classes, n_samples=n_samples, random_state=random_state)
456
+ return WrapperPipeline(estimator_search_space=regressor_searchspace, method=ItartiveImputer, space=iteative_sp)
457
+ '''
447
458
#these are nodes that have special search spaces which require custom parsing of the hyperparameters
459
+ if name == "IterativeImputer" :
460
+ configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
461
+ return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = imputers .IterativeImputer_hyperparameter_parser )
448
462
if name == "RobustScaler" :
449
463
configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
450
- return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = transformers .robust_scaler_hyperparameter_parser )
464
+ return base_node (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = transformers .robust_scaler_hyperparameter_parser )
451
465
if name == "GradientBoostingClassifier" :
452
466
configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
453
- return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = classifiers .GradientBoostingClassifier_hyperparameter_parser )
467
+ return base_node (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = classifiers .GradientBoostingClassifier_hyperparameter_parser )
454
468
if name == "HistGradientBoostingClassifier" :
455
469
configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
456
- return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = classifiers .HistGradientBoostingClassifier_hyperparameter_parser )
470
+ return base_node (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = classifiers .HistGradientBoostingClassifier_hyperparameter_parser )
457
471
if name == "GradientBoostingRegressor" :
458
472
configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
459
- return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = regressors .GradientBoostingRegressor_hyperparameter_parser )
473
+ return base_node (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = regressors .GradientBoostingRegressor_hyperparameter_parser )
460
474
if name == "HistGradientBoostingRegressor" :
461
475
configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
462
- return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = regressors .HistGradientBoostingRegressor_hyperparameter_parser )
476
+ return base_node (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = regressors .HistGradientBoostingRegressor_hyperparameter_parser )
463
477
if name == "MLPClassifier" :
464
478
configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
465
- return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = classifiers .MLPClassifier_hyperparameter_parser )
479
+ return base_node (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = classifiers .MLPClassifier_hyperparameter_parser )
466
480
if name == "MLPRegressor" :
467
481
configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
468
- return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = regressors .MLPRegressor_hyperparameter_parser )
482
+ return base_node (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = regressors .MLPRegressor_hyperparameter_parser )
469
483
if name == "GaussianProcessRegressor" :
470
484
configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
471
- return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = regressors .GaussianProcessRegressor_hyperparameter_parser )
485
+ return base_node (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = regressors .GaussianProcessRegressor_hyperparameter_parser )
472
486
if name == "GaussianProcessClassifier" :
473
487
configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , random_state = random_state )
474
- return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = classifiers .GaussianProcessClassifier_hyperparameter_parser )
488
+ return base_node (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = classifiers .GaussianProcessClassifier_hyperparameter_parser )
475
489
if name == "FeatureAgglomeration" :
476
490
configspace = get_configspace (name , n_features = n_features )
477
- return EstimatorNode (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = transformers .FeatureAgglomeration_hyperparameter_parser )
491
+ return base_node (STRING_TO_CLASS [name ], configspace , hyperparameter_parser = transformers .FeatureAgglomeration_hyperparameter_parser )
478
492
479
493
configspace = get_configspace (name , n_classes = n_classes , n_samples = n_samples , n_features = n_features , random_state = random_state )
480
494
if configspace is None :
481
495
#raise warning
482
496
warnings .warn (f"Could not find configspace for { name } " )
483
497
return None
484
498
485
- return EstimatorNode (STRING_TO_CLASS [name ], configspace )
499
+ return base_node (STRING_TO_CLASS [name ], configspace )
0 commit comments