Skip to content

Commit af41dc8

Browse files
author
kic
committed
add test for stacked models
1 parent 2b726fe commit af41dc8

File tree

8 files changed

+42
-5
lines changed

8 files changed

+42
-5
lines changed

pandas-ml-utils-torch/pandas_ml_utils_torch_test/test_pytorch_model.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from pandas_ml_common import naive_splitter
88
from pandas_ml_utils import pd, FeaturesAndLabels
99
from pandas_ml_utils.ml.model.base_model import AutoEncoderModel
10-
from pandas_ml_utils_test.ml.data.model.test_abstract_model import TestAbstractModel
10+
from pandas_ml_utils_test.ml.model.test_abstract_model import TestAbstractModel
1111
from pandas_ml_utils_torch import PytorchModel, PytorchAutoEncoderModel, PytorchNN
1212

1313

pandas-ml-utils/pandas_ml_utils/df_patching/model_patch.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,11 @@ def fit(self,
113113
trails = None
114114
model = model_provider()
115115
kwargs = merge_kwargs(model.features_and_labels.kwargs, model.kwargs, kwargs)
116-
typemap_fitting = {SubModelFeature: lambda df, model, **kwargs: model.fit(df, **kwargs), **self._type_mapping}
116+
117+
def fit_submodel(df, model, **kwargs):
118+
return model.fit(df, **kwargs)
119+
120+
typemap_fitting = {SubModelFeature: fit_submodel, **self._type_mapping}
117121
frames: FeaturesWithLabels = model.features_and_labels(
118122
df, extract_feature_labels_weights, type_map=typemap_fitting,
119123
splitter=splitter, filter=filter, cross_validation=cross_validation, epochs=epochs, batch_size=batch_size,

pandas-ml-utils/pandas_ml_utils/ml/model/base_model.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,10 @@ def __init__(self, name: str, model: Model):
265265
def fit(self, df: Typing.PatchedDataFrame, **kwargs):
266266
_log.info(f"fitting submodel: {self.name}")
267267
with df.model() as m:
268-
fit = m.fit(df, **kwargs)
268+
fit = m.fit(self.model, **kwargs)
269269
self.model = fit.model
270270

271+
_log.info(f"fitted submodel: {fit}")
271272
return self.predict(df, **kwargs)
272273

273274
def predict(self, df: Typing.PatchedDataFrame, **kwargs):

pandas-ml-utils/pandas_ml_utils_test/ml/data/model/test_abstract_model.py pandas-ml-utils/pandas_ml_utils_test/ml/model/test_abstract_model.py

+33-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from typing import Tuple
55

66
from pandas_ml_common import pd, np, naive_splitter, random_splitter
7-
from pandas_ml_utils import FeaturesAndLabels, Model
7+
from pandas_ml_utils import FeaturesAndLabels, Model, SubModelFeature
88
from pandas_ml_utils.ml.model.base_model import AutoEncoderModel
99

1010

@@ -229,6 +229,38 @@ def test_no_test_data(self):
229229
self.assertEqual(len(fit.training_summary.df), len(df))
230230
self.assertEqual(len(fit.test_summary.df), 0)
231231

232+
def test_stacked_models(self):
233+
"""given some toy classification data"""
234+
df = pd.DataFrame({
235+
"a": [1, 0, 1, 0, 1, 0, 1, 0, ],
236+
"b": [0, 0, 1, 1, 0, 0, 1, 1, ],
237+
"c": [1, 0, 0, 1, 1, 0, 0, 1, ]
238+
})
239+
240+
"""and a model"""
241+
model = self.provide_classification_model(
242+
FeaturesAndLabels(
243+
features=[
244+
"a",
245+
SubModelFeature("b", self.provide_classification_model(
246+
FeaturesAndLabels(features=["a", "b"], labels=["c"], label_type=int)
247+
))
248+
],
249+
labels=["c"],
250+
label_type=int
251+
)
252+
)
253+
254+
with self.assertLogs(level='INFO') as cm:
255+
with df.model() as m:
256+
m.fit(model)
257+
258+
self.assertIn("INFO:pandas_ml_utils.ml.model.base_model:fitting submodel: b", cm.output[0])
259+
self.assertIn(
260+
"INFO:pandas_ml_utils.ml.model.base_model:fitted submodel",
261+
[s for s in cm.output if s.startswith("INFO:pandas_ml_utils.ml.model.base_model:fitted")][0]
262+
)
263+
232264

233265
# Abstract methods
234266
def provide_batch_size_and_epoch(self) -> Tuple[int, int]:

pandas-ml-utils/pandas_ml_utils_test/ml/data/model/test_skmodel.py pandas-ml-utils/pandas_ml_utils_test/ml/model/test_skmodel.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from sklearn.datasets import make_regression, make_classification
66
from pandas_ml_common import np, pd, naive_splitter, stratified_random_splitter
77
from pandas_ml_utils.ml.model.base_model import AutoEncoderModel
8-
from pandas_ml_utils_test.ml.data.model.test_abstract_model import TestAbstractModel
8+
from pandas_ml_utils_test.ml.model.test_abstract_model import TestAbstractModel
99
from pandas_ml_utils import SkModel, SkAutoEncoderModel, FeaturesAndLabels, ClassificationSummary, RegressionSummary
1010
from pandas_ml_utils_test.config import DF_NOTES
1111

0 commit comments

Comments
 (0)