How can I save the model which is returned from the function regarding the defined method class? I would like to make the same wrapper for many classes similar to (in my case) Rocket class.
The code below produces an error: Can't pickle local object 'sktime_wrapper..SKtimeWrapper'
import pickle
from sktime.transformations.panel.rocket import Rocket
from sktime.datatypes._panel._convert import from_2d_array_to_nested
def sktime_wrapper(method_class):
class SKtimeWrapper(method_class):
def transform(self, X):
X = from_2d_array_to_nested(X)
return super().transform(X)
def fit(self, X, Y):
X = from_2d_array_to_nested(X)
return super().fit(X, Y)
return SKtimeWrapper
model = sktime_wrapper(Rocket)
with open('model.pkl','wb') as f:
pickle.dump(model, f)
In case when class is defined as top-level object, the pickle works just fine. The code below works like a charm and saves the model without any problem:
import pickle
from sktime.transformations.panel.rocket import Rocket
from sktime.datatypes._panel._convert import from_2d_array_to_nested
class SKtimeWrapper(Rocket):
def transform(self, X):
X = from_2d_array_to_nested(X)
return super().transform(X)
def fit(self, X, Y):
X = from_2d_array_to_nested(X)
return super().fit(X, Y)
model = SKtimeWrapper
with open('model.pkl','wb') as f:
pickle.dump(model, f)