Convert data to vw lines and then train for required iterations Parameters ---------- X : pandas dataframe or array-like training samples y : array like, required for array-like X and not used presently for pandas dataframe class lab
(self,X,y=None)
| 251 | |
| 252 | |
| 253 | def fit(self,X,y=None): |
| 254 | """Convert data to vw lines and then train for required iterations |
| 255 | |
| 256 | Parameters |
| 257 | ---------- |
| 258 | |
| 259 | X : pandas dataframe or array-like |
| 260 | training samples |
| 261 | y : array like, required for array-like X and not used presently for pandas dataframe |
| 262 | class labels |
| 263 | |
| 264 | Returns |
| 265 | ------- |
| 266 | self: object |
| 267 | |
| 268 | Caveats : |
| 269 | 1. A seldon specific fork of wabbit_wappa is needed to allow vw to run in server mode without save_resume. Save_resume seems to cause issues with the scores returned. Maybe connected to https://github.com/JohnLangford/vowpal_wabbit/issues/262 |
| 270 | """ |
| 271 | if isinstance(X,pd.DataFrame): |
| 272 | df = X |
| 273 | df_base = self._exclude_include_features(df) |
| 274 | df_base = df_base.fillna(0) |
| 275 | else: |
| 276 | check_X_y(X,y) |
| 277 | df = pd.DataFrame(X) |
| 278 | df_y = pd.DataFrame(y,columns=list('y')) |
| 279 | self.target='y' |
| 280 | df_base = pd.concat([df,df_y],axis=1) |
| 281 | |
| 282 | min_target = df_base[self.target].astype(float).min() |
| 283 | if min_target == 0: |
| 284 | self.zero_based = True |
| 285 | else: |
| 286 | self.zero_based = False |
| 287 | if not self.target_readable is None: |
| 288 | self.create_class_id_map(df,self.target,self.target_readable,zero_based=self.zero_based) |
| 289 | |
| 290 | self.num_classes = len(df_base[self.target].unique()) |
| 291 | self._start_vw_if_needed("train") |
| 292 | df_vw = df_base.apply(self._convert_row,axis=1) |
| 293 | for i in range(0,self.num_iterations): |
| 294 | for (index,val) in df_vw.iteritems(): |
| 295 | self.vw.send_line(val,parse_result=False) |
| 296 | self._save_model(self.model_file) |
| 297 | return self |
| 298 | |
| 299 | def _start_vw_if_needed(self,mode): |
| 300 | if self.vw is None or self.vw_mode != mode: |