Source code for omegaml.runtimes.mixins.modelmixin

  1import logging
  2import sys
  3import warnings
  4from uuid import uuid4
  5
  6from omegaml.util import is_dataframe, is_ndarray, is_series
  7
  8logger = logging.getLogger(__file__)
  9
 10
[docs] 11class ModelMixin: 12 """mixin methods to OmegaModelProxy""" 13
[docs] 14 def fit(self, Xname, Yname=None, **kwargs): 15 """ 16 fit the model 17 18 Calls :code:`.fit(X, Y, **kwargs)`. If instead of dataset names actual data 19 is given, the data is stored using _fitX/fitY prefixes and a unique 20 name. 21 22 After fitting, a new model version is stored with its attributes 23 fitX and fitY pointing to the datasets, as well as the sklearn 24 version used. 25 26 :param Xname: name of X dataset or data 27 :param Yname: name of Y dataset or data 28 :return: the model (self) or the string representation (python clients) 29 """ 30 omega_fit = self.task('omegaml.tasks.omega_fit') 31 Xname = self._ensure_data_is_stored(Xname, prefix='_fitX') 32 if Yname is not None: 33 Yname = self._ensure_data_is_stored(Yname, prefix='_fitY') 34 return omega_fit.delay(self.modelname, Xname, Yname=Yname, **kwargs)
35
[docs] 36 def partial_fit(self, Xname, Yname=None, **kwargs): 37 """ 38 update the model 39 40 Calls :code:`.partial_fit(X, Y, **kwargs)`. If instead of dataset names actual 41 data is given, the data is stored using _fitX/fitY prefixes and 42 a unique name. 43 44 After fitting, a new model version is stored with its attributes 45 fitX and fitY pointing to the datasets, as well as the sklearn 46 version used. 47 48 :param Xname: name of X dataset or data 49 :param Yname: name of Y dataset or data 50 :return: the model (self) or the string representation (python clients) 51 """ 52 omega_fit = self.task('omegaml.tasks.omega_partial_fit') 53 Xname = self._ensure_data_is_stored(Xname, prefix='_fitX') 54 if Yname is not None: 55 Yname = self._ensure_data_is_stored(Yname, prefix='_fitY') 56 return omega_fit.delay(self.modelname, Xname, Yname=Yname, **kwargs)
57
[docs] 58 def transform(self, Xname, rName=None, **kwargs): 59 """ 60 transform X 61 62 Calls :code:`.transform(X, **kwargs)`. If rName is given the result is 63 stored as object rName 64 65 :param Xname: name of the X dataset 66 :param rName: name of the resulting dataset (optional) 67 :return: the data returned by .transform, or the metadata of the rName 68 dataset if rName was given 69 """ 70 omega_transform = self.task('omegaml.tasks.omega_transform') 71 Xname = self._ensure_data_is_stored(Xname) 72 return omega_transform.delay(self.modelname, Xname, rName=rName, **kwargs)
73
[docs] 74 def fit_transform(self, Xname, Yname=None, rName=None, **kwargs): 75 """ 76 fit & transform X 77 78 Calls :code:`.fit_transform(X, Y, **kwargs)`. If rName is given the result is 79 stored as object rName 80 81 :param Xname: name of the X dataset 82 :param Yname: name of the Y dataset 83 :param rName: name of the resulting dataset (optional) 84 :return: the data returned by .fit_transform, or the metadata of the rName 85 dataset if rName was given 86 """ 87 88 omega_fit_transform = self.task('omegaml.tasks.omega_fit_transform') 89 Xname = self._ensure_data_is_stored(Xname) 90 if Yname is not None: 91 Yname = self._ensure_data_is_stored(Yname) 92 return omega_fit_transform.delay(self.modelname, Xname, Yname=Yname, rName=rName, **kwargs)
93
[docs] 94 def predict(self, Xpath_or_data, rName=None, **kwargs): 95 """ 96 predict 97 98 Calls :code:`.predict(X)`. If rName is given the result is 99 stored as object rName 100 101 :param Xname: name of the X dataset 102 :param rName: name of the resulting dataset (optional) 103 :return: the data returned by .predict, or the metadata of the rName 104 dataset if rName was given 105 """ 106 omega_predict = self.task('omegaml.tasks.omega_predict') 107 Xname = self._ensure_data_is_stored(Xpath_or_data) 108 return omega_predict.delay(self.modelname, Xname, rName=rName, **kwargs)
109
[docs] 110 def predict_proba(self, Xpath_or_data, rName=None, **kwargs): 111 """ 112 predict probabilities 113 114 Calls :code:`.predict_proba(X)`. If rName is given the result is 115 stored as object rName 116 117 :param Xname: name of the X dataset 118 :param rName: name of the resulting dataset (optional) 119 :return: the data returned by .predict_proba, or the metadata of the rName 120 dataset if rName was given 121 """ 122 omega_predict_proba = self.task('omegaml.tasks.omega_predict_proba') 123 Xname = self._ensure_data_is_stored(Xpath_or_data) 124 return omega_predict_proba.delay(self.modelname, Xname, rName=rName, **kwargs)
125
[docs] 126 def complete(self, Xname, rName=None, **kwargs): 127 """ 128 complete 129 130 Calls :code:`.complete(X)`. If rName is given the result is 131 stored as object rName 132 133 :param Xname: name of the X dataset 134 :param rName: name of the resulting dataset (optional) 135 :return: the data returned by .complete, or the metadata of the rName 136 dataset if rName was given 137 """ 138 omega_complete = self.task('omegaml.tasks.omega_complete') 139 Xname = self._ensure_data_is_stored(Xname) 140 return omega_complete.delay(self.modelname, Xname, rName=rName, **kwargs)
141 142 def invoke(self, Xname, rName=None, **kwargs): 143 omega_invoke = self.task('omegaml.tasks.omega_invoke') 144 Xname = self._ensure_data_is_stored(Xname, as_payload=True) 145 return omega_invoke.delay(self.modelname, Xname, rName=rName, **kwargs) 146 147 def transcribe(self, Xname, rName=None, **kwargs): 148 omega_transcribe = self.task('omegaml.tasks.omega_transcribe') 149 Xname = self._ensure_data_is_stored(Xname) 150 return omega_transcribe.delay(self.modelname, Xname, rName=rName, **kwargs) 151 152 def speech(self, Xname, rName=None, **kwargs): 153 omega_speech = self.task('omegaml.tasks.omega_speech') 154 Xname = self._ensure_data_is_stored(Xname) 155 return omega_speech.delay(self.modelname, Xname, rName=rName, **kwargs) 156
[docs] 157 def embed(self, Xname, rName=None, **kwargs): 158 """ 159 embed 160 161 Calls :code:`.embed(X)`. If rName is given the result is 162 stored as object rName 163 164 :param Xname: name of the X dataset 165 :param rName: name of the resulting dataset (optional) 166 :return: the data returned by .embed, or the metadata of the rName 167 dataset if rName was given 168 """ 169 omega_embed = self.task('omegaml.tasks.omega_embed') 170 Xname = self._ensure_data_is_stored(Xname) 171 return omega_embed.delay(self.modelname, Xname, rName=rName, **kwargs)
172
[docs] 173 def score(self, Xname, Yname=None, rName=None, **kwargs): 174 """ 175 calculate score 176 177 Calls :code:`.score(X, y, **kwargs)`. If rName is given the result is 178 stored as object rName 179 180 :param Xname: name of the X dataset 181 :param yName: name of the y dataset 182 :param rName: name of the resulting dataset (optional) 183 :return: the data returned by .score, or the metadata of the rName 184 dataset if rName was given 185 """ 186 omega_score = self.task('omegaml.tasks.omega_score') 187 Xname = self._ensure_data_is_stored(Xname) 188 YName = self._ensure_data_is_stored(Yname) 189 return omega_score.delay(self.modelname, Xname, Yname=YName, rName=rName, **kwargs)
190
[docs] 191 def decision_function(self, Xname, rName=None, **kwargs): 192 """ 193 calculate score 194 195 Calls :code:`.decision_function(X, y, **kwargs)`. If rName is given the result is 196 stored as object rName 197 198 :param Xname: name of the X dataset 199 :param rName: name of the resulting dataset (optional) 200 :return: the data returned by .score, or the metadata of the rName 201 dataset if rName was given 202 """ 203 omega_decision_function = self.task('omegaml.tasks.omega_decision_function') 204 Xname = self._ensure_data_is_stored(Xname) 205 return omega_decision_function.delay(self.modelname, Xname, rName=rName, **kwargs)
206 207 def reduce(self, rName=None, **kwargs): 208 omega_reduce = self.task('omegaml.tasks.omega_reduce') 209 return omega_reduce.delay(modelName=self.modelname, rName=rName, **kwargs) 210 211 def _ensure_data_is_stored(self, name_or_data, prefix='_temp', as_payload=False): 212 from omegaml.mixins.store.passthrough import PassthroughDataset 213 214 if as_payload: 215 return PassthroughDataset(name_or_data) 216 elif isinstance(name_or_data, str): 217 name = name_or_data 218 elif isinstance(name_or_data, PassthroughDataset): 219 return name_or_data 220 elif isinstance(name_or_data, (list, tuple, dict)): 221 if sys.getsizeof(name_or_data) <= PassthroughDataset.MAX_SIZE: 222 return PassthroughDataset(name_or_data) 223 else: 224 warnings.warn( 225 f'size of dataset is larger than {PassthroughDataset.MAX_SIZE} bytes, storing in om.datasets' 226 ) 227 name = '%s_%s' % (prefix, uuid4().hex) 228 self.runtime.omega.datasets.put(name_or_data, name) 229 elif is_dataframe(name_or_data) or is_series(name_or_data) or is_ndarray(name_or_data): 230 name = '%s_%s' % (prefix, uuid4().hex) 231 self.runtime.omega.datasets.put(name_or_data, name) 232 else: 233 raise TypeError('invalid type for Xpath_or_data', type(name_or_data)) 234 return name