def import_from_sklearn_pipeline(sklearn_pipeline): #For all pipeline steps, identify equivalent lale wrappers if present, #if not, call make operator on sklearn classes and create a lale pipeline. def get_equivalent_lale_op(sklearn_obj): module_name = "lale.lib.sklearn" from sklearn.base import clone from lale.operators import make_operator class_name = sklearn_obj.__class__.__name__ module = importlib.import_module(module_name) try: class_ = getattr(module, class_name) except AttributeError: class_ = make_operator(sklearn_obj, name=class_name) class_ = class_(**sklearn_obj.get_params()) class_._impl._sklearn_model = copy.deepcopy(sklearn_obj) return class_ from sklearn.pipeline import FeatureUnion, Pipeline from sklearn.base import BaseEstimator from lale.operators import make_pipeline, make_union if isinstance(sklearn_pipeline, Pipeline): nested_pipeline_steps = sklearn_pipeline.named_steps.values() nested_pipeline_lale_objects = [import_from_sklearn_pipeline(nested_pipeline_step) for nested_pipeline_step in nested_pipeline_steps] lale_op_obj = make_pipeline(*nested_pipeline_lale_objects) elif isinstance(sklearn_pipeline, FeatureUnion): transformer_list = sklearn_pipeline.transformer_list concat_predecessors = [import_from_sklearn_pipeline(transformer[1]) for transformer in transformer_list] lale_op_obj = make_union(*concat_predecessors) else: lale_op_obj = get_equivalent_lale_op(sklearn_pipeline) return lale_op_obj
def test_pca_nys_lr(self): from lale.operators import make_union nys = Nystroem(n_components=15) pca = PCA(n_components=10) lr = LogisticRegression(random_state=42) trainable = make_union(nys, pca) >> lr digits = sklearn.datasets.load_digits() trained = trainable.fit(digits.data, digits.target) predicted = trained.predict(digits.data)
def import_from_sklearn_pipeline(sklearn_pipeline, fitted=True): #For all pipeline steps, identify equivalent lale wrappers if present, #if not, call make operator on sklearn classes and create a lale pipeline. def get_equivalent_lale_op(sklearn_obj, fitted): module_names = ["lale.lib.sklearn", "lale.lib.autoai_libs"] from lale.operators import make_operator, TrainedIndividualOp lale_wrapper_found = False class_name = sklearn_obj.__class__.__name__ for module_name in module_names: module = importlib.import_module(module_name) try: class_ = getattr(module, class_name) lale_wrapper_found = True break except AttributeError: continue else: class_ = make_operator(sklearn_obj, name=class_name) if not fitted: #If fitted is False, we do not want to return a Trained operator. lale_op = class_ else: lale_op = TrainedIndividualOp(class_._name, class_._impl, class_._schemas) class_ = lale_op(**sklearn_obj.get_params()) if lale_wrapper_found: class_._impl_instance()._wrapped_model = copy.deepcopy(sklearn_obj) else: # If there is no lale wrapper, there is no _wrapped_model class_._impl = copy.deepcopy(sklearn_obj) return class_ from sklearn.pipeline import FeatureUnion, Pipeline from sklearn.base import BaseEstimator from lale.operators import make_pipeline, make_union if isinstance(sklearn_pipeline, Pipeline): nested_pipeline_steps = sklearn_pipeline.named_steps.values() nested_pipeline_lale_objects = [ import_from_sklearn_pipeline(nested_pipeline_step, fitted=fitted) for nested_pipeline_step in nested_pipeline_steps ] lale_op_obj = make_pipeline(*nested_pipeline_lale_objects) elif isinstance(sklearn_pipeline, FeatureUnion): transformer_list = sklearn_pipeline.transformer_list concat_predecessors = [ import_from_sklearn_pipeline(transformer[1], fitted=fitted) for transformer in transformer_list ] lale_op_obj = make_union(*concat_predecessors) else: lale_op_obj = get_equivalent_lale_op(sklearn_pipeline, fitted=fitted) return lale_op_obj
def test_concat_with_hyperopt2(self): from lale.operators import make_pipeline, make_union from lale.lib.lale import Hyperopt pca = PCA(n_components=3) nys = Nystroem(n_components=10) concat = ConcatFeatures() lr = LogisticRegression(random_state=42, C=0.1) trainable = make_pipeline(make_union(pca, nys), lr) clf = Hyperopt(estimator=trainable, max_evals=2) from sklearn.datasets import load_iris iris_data = load_iris() clf.fit(iris_data.data, iris_data.target) clf.predict(iris_data.data)
def import_from_sklearn_pipeline(sklearn_pipeline, fitted=True): #For all pipeline steps, identify equivalent lale wrappers if present, #if not, call make operator on sklearn classes and create a lale pipeline. def get_equivalent_lale_op(sklearn_obj, fitted): #Validate that the sklearn_obj is a valid sklearn-compatible object if sklearn_obj is None or not hasattr(sklearn_obj, 'get_params'): raise ValueError( "The input pipeline has a step that is not scikit-learn compatible." ) module_names = ["lale.lib.sklearn", "lale.lib.autoai_libs"] from lale.operators import TrainedIndividualOp, make_operator lale_wrapper_found = False class_name = sklearn_obj.__class__.__name__ for module_name in module_names: module = importlib.import_module(module_name) try: class_ = getattr(module, class_name) lale_wrapper_found = True break except AttributeError: continue else: class_ = make_operator(sklearn_obj, name=class_name) if not fitted: #If fitted is False, we do not want to return a Trained operator. lale_op = class_ else: lale_op = TrainedIndividualOp(class_._name, class_._impl, class_._schemas) orig_hyperparams = sklearn_obj.get_params() higher_order = False for hp_name, hp_val in orig_hyperparams.items(): higher_order = higher_order or hasattr(hp_val, 'get_params') if higher_order: hyperparams = {} for hp_name, hp_val in orig_hyperparams.items(): if hasattr(hp_val, 'get_params'): nested_op = get_equivalent_lale_op(hp_val, fitted) hyperparams[hp_name] = nested_op else: hyperparams[hp_name] = hp_val else: hyperparams = orig_hyperparams class_ = lale_op(**hyperparams) if lale_wrapper_found: wrapped_model = copy.deepcopy(sklearn_obj) class_._impl_instance()._wrapped_model = wrapped_model else: # If there is no lale wrapper, there is no _wrapped_model class_._impl = copy.deepcopy(sklearn_obj) return class_ from sklearn.base import BaseEstimator from sklearn.pipeline import FeatureUnion, Pipeline from lale.operators import make_pipeline, make_union if isinstance(sklearn_pipeline, Pipeline): nested_pipeline_steps = sklearn_pipeline.named_steps.values() nested_pipeline_lale_objects = [ import_from_sklearn_pipeline(nested_pipeline_step, fitted=fitted) for nested_pipeline_step in nested_pipeline_steps ] lale_op_obj = make_pipeline(*nested_pipeline_lale_objects) elif isinstance(sklearn_pipeline, FeatureUnion): transformer_list = sklearn_pipeline.transformer_list concat_predecessors = [ import_from_sklearn_pipeline(transformer[1], fitted=fitted) for transformer in transformer_list ] lale_op_obj = make_union(*concat_predecessors) else: lale_op_obj = get_equivalent_lale_op(sklearn_pipeline, fitted=fitted) return lale_op_obj