Skip to content

OSError: could not get source code #191

@jmrichardson

Description

@jmrichardson

Hello,

I am getting the following error when trying to follow along this article:

https://towardsdatascience.com/hyperparameter-hunter-feature-engineering-958966818b6e

exp_1 = CVExperiment(AdaBoostRegressor, feature_engineer=[euclidean_norm])
<18:12:03> Uncaught exception!   OSError: could not get source code
Traceback (most recent call last):
  File "D:\Anaconda3\envs\autoquant\lib\code.py", line 91, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
  File "D:\Anaconda3\envs\autoquant\lib\site-packages\hyperparameter_hunter\experiment_core.py", line 165, in __call__
    return super().__call__(*args, **kwargs)
  File "D:\Anaconda3\envs\autoquant\lib\site-packages\hyperparameter_hunter\experiments.py", line 752, in __init__
    target_metric=target_metric,
  File "D:\Anaconda3\envs\autoquant\lib\site-packages\hyperparameter_hunter\experiments.py", line 598, in __init__
    target_metric=target_metric,
  File "D:\Anaconda3\envs\autoquant\lib\site-packages\hyperparameter_hunter\experiments.py", line 251, in __init__
    self.feature_engineer = FeatureEngineer(self.feature_engineer)
  File "D:\Anaconda3\envs\autoquant\lib\site-packages\hyperparameter_hunter\feature_engineering.py", line 915, in __init__
    self.add_step(step)
  File "D:\Anaconda3\envs\autoquant\lib\site-packages\hyperparameter_hunter\feature_engineering.py", line 1024, in add_step
    self._steps.append(self._to_step(step, stage=stage, name=name))
  File "D:\Anaconda3\envs\autoquant\lib\site-packages\hyperparameter_hunter\feature_engineering.py", line 1051, in _to_step
    return EngineerStep(step, name=name, stage=stage, do_validate=self.do_validate)
  File "D:\Anaconda3\envs\autoquant\lib\site-packages\hyperparameter_hunter\feature_engineering.py", line 508, in __init__
    self.params = params
  File "D:\Anaconda3\envs\autoquant\lib\site-packages\hyperparameter_hunter\feature_engineering.py", line 643, in params
    self._params = value if value is not None else get_engineering_step_params(self.f)
  File "D:\Anaconda3\envs\autoquant\lib\site-packages\hyperparameter_hunter\feature_engineering.py", line 1170, in get_engineering_step_params
    source_code = getsource(f)
  File "D:\Anaconda3\envs\autoquant\lib\inspect.py", line 973, in getsource
    lines, lnum = getsourcelines(object)
  File "D:\Anaconda3\envs\autoquant\lib\inspect.py", line 955, in getsourcelines
    lines, lnum = findsource(object)
  File "D:\Anaconda3\envs\autoquant\lib\inspect.py", line 786, in findsource
    raise OSError('could not get source code')
OSError: could not get source code

Here is the code:

from hyperparameter_hunter.utils.learning_utils import get_boston_data
from hyperparameter_hunter import Environment, CVExperiment
from sklearn.ensemble import AdaBoostRegressor
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.preprocessing import StandardScaler, QuantileTransformer

def standard_scale(train_inputs, non_train_inputs):
    s = StandardScaler()
    train_inputs[train_inputs.columns] = s.fit_transform(train_inputs.values)
    non_train_inputs[train_inputs.columns] = s.transform(non_train_inputs.values)
    return train_inputs, non_train_inputs

def euclidean_norm(all_inputs):
    all_inputs["euclidean_norm"] = all_inputs.agg(
        lambda row: np.sqrt(np.sum([np.square(_) for _ in row])), axis="columns",
    )
    return all_inputs

def quantile_transform(train_targets, non_train_targets):
    t = QuantileTransformer(output_distribution="normal", n_quantiles=100)
    train_targets[train_targets.columns] = t.fit_transform(train_targets.values)
    non_train_targets[train_targets.columns] = t.transform(non_train_targets.values)
    return train_targets, non_train_targets, t

env = Environment(
    train_dataset=get_boston_data(),
    results_path="HyperparameterHunterAssets",
    holdout_dataset=lambda train, _: train_test_split(train, test_size=0.1, random_state=1),
    target_column="DIS",
    metrics={"mae": "median_absolute_error"},
    cv_type="KFold",
    cv_params=dict(n_splits=5, random_state=1),
)

exp_0 = CVExperiment(AdaBoostRegressor, model_init_params={})

exp_1 = CVExperiment(AdaBoostRegressor, feature_engineer=[euclidean_norm])

CVExperiment exp_0 works but not exp_1

Thanks for any help.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions