Skip to content

readme examples does not work because Inferencer.pre_fit() got an unexpected keyword argument (offset) #34

@timothee-clemessy

Description

@timothee-clemessy

Trying to run the examples from the readme :

from yaglm.toy_data import sample_sparse_lin_reg

from yaglm.GlmTuned import GlmCV, GlmTrainMetric

from yaglm.config.loss import Huber
from yaglm.config.penalty import Lasso, GroupLasso
from yaglm.config.flavor import Adaptive, NonConvex

from yaglm.metrics.info_criteria import InfoCriteria
from yaglm.infer.Inferencer import Inferencer
from yaglm.infer.lin_reg_noise_var import ViaRidge


# sample sparse linear regression data
X, y, _ = sample_sparse_lin_reg(n_samples=100, n_features=10)

# fit a lasso penalty tuned via cross-validation with the 1se rule
GlmCV(loss='lin_reg',
      penalty=Lasso(),  # specify penalty with config object
      select_rule='1se'
      ).fit(X, y)

# fit an adaptive lasso tuned via cross-validation
# initialized with a lasso tuned with cross-validation
GlmCV(loss='lin_reg',
      penalty=Lasso(flavor=Adaptive()),
      initializer='default'
      ).fit(X, y)

# fit an adaptive lasso and tuned via EBIC
# estimate the noise variance via a ridge-regression method
GlmTrainMetric(loss='lin_reg',
               penalty=Lasso(flavor=Adaptive()),

               inferencer=Inferencer(scale=ViaRidge()),  # noise variance estimator
               scorer=InfoCriteria(crit='ebic')  # Info criteria
               ).fit(X, y)

raises the following errors :

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In [11], line 37
     25 GlmCV(loss='lin_reg',
     26       penalty=Lasso(flavor=Adaptive()),
     27       initializer='default'
     28       ).fit(X, y)
     30 # fit an adaptive lasso and tuned via EBIC
     31 # estimate the noise variance via a ridge-regression method
     32 GlmTrainMetric(loss='lin_reg',
     33                penalty=Lasso(flavor=Adaptive()),
     34 
     35                inferencer=Inferencer(scale=ViaRidge()),  # noise variance estimator
     36                scorer=InfoCriteria(crit='ebic')  # Info criteria
---> 37                ).fit(X, y)

File ~/opt/anaconda3/envs/automated_reliability_tests/lib/python3.10/site-packages/yaglm-_0.3.3_-py3.10.egg/yaglm/GlmTuned.py:341, in GlmTrainMetric.fit(self, X, y, sample_weight, offsets)
    334 start_time = time()
    336 ##############################################
    337 # setup, preprocess, and prefitting routines #
    338 ##############################################
    339 pro_data, raw_data, pre_pro_out, \
    340     configs, solver, init_data, inferencer = \
--> 341     self.setup_and_prefit(X=X, y=y,
    342                           sample_weight=sample_weight,
    343                           offsets=offsets)
    345 # store inferencer
    346 self.inferencer_ = inferencer

File ~/opt/anaconda3/envs/automated_reliability_tests/lib/python3.10/site-packages/yaglm-_0.3.3_-py3.10.egg/yaglm/base.py:429, in BaseGlm.setup_and_prefit(self, X, y, sample_weight, offsets)
    425 raw_data = {'X': X, 'y': y,
    426             'sample_weight': sample_weight, 'offsets': offsets}
    428 # run any prefitting inference
--> 429 inferencer = self.run_prefit_inference(**raw_data)
    431 # preproceess X, y
    432 pro_data, pre_pro_out = self.preprocess(**raw_data, copy=True)

File ~/opt/anaconda3/envs/automated_reliability_tests/lib/python3.10/site-packages/yaglm-_0.3.3_-py3.10.egg/yaglm/base.py:718, in BaseGlm.run_prefit_inference(self, X, y, sample_weight, offsets)
    715 if self.inferencer is not None:
    716     # TODO: do we want to do a copy here?
    717     inferencer = deepcopy(self.inferencer)
--> 718     inferencer.pre_fit(estimator=self, X=X, y=y,
    719                        sample_weight=sample_weight,
    720                        offsets=offsets)
    721     return inferencer
    723 else:

TypeError: Inferencer.pre_fit() got an unexpected keyword argument 'offset

Indeed, l718 in base.py a call to pre_fit of an inferencer is passed using an offset argument :

            inferencer.pre_fit(estimator=self, X=X, y=y,
                               sample_weight=sample_weight,
                               offsets=offsets)

while inferencer pre_fit methods does not accept offsets parameter yet according to l45 in Inferencer.py

def pre_fit(self, estimator, X, y, sample_weight=None):

I see that a commit adding offset have been merged recently so I guess it is related.

I hope it helps,

Thanks a lot for the package and I hope the project goes on !

Best regards,

Timothée

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions