Save the model
Let's take a look at the following code snippet in the train_iid method:
# Save the model info into MongoDB
model_info_id = ModelInfo.save(
name=self.name,
target=request.target,
model=model,
encoders=encoders,
time_components=components,
feature_types=request.feature_types,
mongo=self.mongo,
gridfs=self.gridfs,
collection=self.collection,
)
And in model_info.py, the save method for ModelInfo is defined as:
@classmethod
def save(
cls,
name: str,
target: Column,
model: Union[LinearRegression, LogisticRegression],
encoders: Dict[str, LabelEncoder],
time_components: List[str],
feature_types: List[Column],
mongo: MongoInstance,
gridfs: GridFS,
collection: Collection,
) -> str:
model_id = save_sklearn_stuff(model, gridfs)
saved_encoders = {k: save_sklearn_stuff(v, gridfs) for k, v in encoders.items()}
model_info = cls(
name=name,
target=target,
model_id=model_id,
encoder_ids=saved_encoders,
time_components=time_components,
feature_types=feature_types,
)
doc = model_info.dict()
for field in model_info.encrypted_fields:
if doc.get(field) is None:
raise ExodusError(f'field = "{field}" is not a valid key for ModelInfo')
doc[field] = mongo.encrypt(doc[field])
return str(collection.insert_one(doc).inserted_id)
The save method returns a stringified ObjectId, which you should pass back to the user so that they can identify the model that was just trained.
The save method can be split into 3 parts:
- Saving
scikit-learnstuff - Creating a
ModelInfoinstance - Encrypting the
ModelInfoinstance and storing it into MongoDB