def __init__(self, train_dataset_path: str, test_dataset_path: str, target_column: str, categorical_columns: Optional[List[str]] = None, drop_columns: Optional[List[str]] = None): self.wave_model = build_model(train_file_path=train_dataset_path, target_column=target_column, model_type=ModelType.H2O3, categorical_columns=categorical_columns, drop_columns=drop_columns, _h2o3_max_runtime_secs=30, _h2o3_nfolds=0, _h2o3_include_algos=['DRF', 'GBM']) self.model = self.wave_model.model self.test_df = h2o.import_file(path=test_dataset_path) for column in categorical_columns: self.test_df[column] = self.test_df[column].asfactor() self.churn_probabilities = self.model.predict( self.test_df)[:, -1].as_data_frame().values self.contributions_df = self.model.predict_contributions( self.test_df).drop('BiasTerm').as_data_frame()
async def serve(q: Q): if q.args.train: # train WaveML Model using H2O-3 AutoML copy_expando(q.args, q.client) q.client.wave_model = build_model( train_df=q.client.train_df, target_column='target', model_type=ModelType.H2O3, _h2o3_max_runtime_secs=30, _h2o3_nfolds=2, _h2o3_include_algos=[q.client.algo] ) model_id = q.client.wave_model.model.model_id accuracy = round(100 - q.client.wave_model.model.mean_per_class_error() * 100, 2) # show training details and prediction option q.page['example'].items[1].choice_group.value = q.client.algo q.page['example'].items[2].buttons.items[1].button.disabled = False q.page['example'].items[3].message_bar.type = 'success' q.page['example'].items[3].message_bar.text = 'Training successfully completed!' q.page['example'].items[4].text.content = f'''**H2O AutoML model id:** {model_id} <br /> **Accuracy:** {accuracy}%''' q.page['example'].items[5].text.content = '' elif q.args.predict: # predict on test data preds = q.client.wave_model.predict(test_df=q.client.test_df) # show predictions q.page['example'].items[3].message_bar.text = 'Prediction successfully completed!' q.page['example'].items[5].text.content = f'''**Example predictions:** <br /> {preds[0]} <br /> {preds[1]} <br /> {preds[2]}''' else: # prepare sample train and test dataframes data = load_wine(as_frame=True)['frame'] q.client.train_df, q.client.test_df = train_test_split(data, train_size=0.8) # algos algo_choices = [ui.choice(x, x) for x in ['DRF', 'GLM', 'XGBoost', 'GBM', 'DeepLearning']] # display ui q.page['example'] = ui.form_card( box='1 1 -1 -1', items=[ ui.text(content='''The sample dataset used is the <a href="https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html" target="_blank">wine dataset</a>.'''), ui.choice_group(name='algo', label='Select Algo', choices=algo_choices, value='DRF'), ui.buttons(items=[ ui.button(name='train', label='Train', primary=True), ui.button(name='predict', label='Predict', primary=True, disabled=True), ]), ui.message_bar(type='warning', text='Training will take a few seconds'), ui.text(content=''), ui.text(content='') ] ) await q.page.save()
def model(self): if not self._model: wave_model = build_model( train_file_path=self._train_csv, target_column=self._target_column, model_type=ModelType.H2O3, drop_columns=[self._id_column], _h2o3_max_runtime_secs=30, _h2o3_nfolds=0, _h2o3_include_algos=['DRF', 'XGBoost', 'GBM'] ) self._model = wave_model.model return self._model
async def serve(q: Q): if q.args.train: # train WaveML Model using H2O-3 AutoML wave_model = build_model(train_df=q.client.train_df, target_column='target', model_type=ModelType.H2O3, _h2o3_max_runtime_secs=5, _h2o3_nfolds=2) model_id = wave_model.model.model_id accuracy = round(100 - wave_model.model.mean_per_class_error() * 100, 2) # save model to local folder q.client.path_model = save_model(model=wave_model, output_dir_path='./mymodelfolder') # show training details and prediction option q.page['example'].items[1].buttons.items[1].button.disabled = False q.page['example'].items[2].message_bar.type = 'success' q.page['example'].items[ 2].message_bar.text = 'Training successfully completed!' q.page['example'].items[ 3].text.content = f'''**H2O AutoML model id:** {model_id} <br /> **Accuracy:** {accuracy}%''' q.page['example'].items[4].text.content = '' elif q.args.predict: # load model from local path wave_model = load_model(file_path=q.client.path_model) # predict on test data preds = wave_model.predict(test_df=q.client.test_df) # show predictions q.page['example'].items[ 2].message_bar.text = 'Prediction successfully completed!' q.page['example'].items[ 4].text.content = f'''**Example predictions:** <br /> {preds[0]} <br /> {preds[1]} <br /> {preds[2]}''' else: # prepare sample train and test dataframes data = load_wine(as_frame=True)['frame'] q.client.train_df, q.client.test_df = train_test_split(data, train_size=0.8) # display ui q.page['example'] = ui.form_card( box='1 1 -1 -1', items=[ ui.text(content='''The sample dataset used is the <a href="https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html" target="_blank">wine dataset</a>.''' ), ui.buttons(items=[ ui.button(name='train', label='Train', primary=True), ui.button(name='predict', label='Predict', primary=True, disabled=True), ]), ui.message_bar(type='warning', text='Training will take a few seconds'), ui.text(content=''), ui.text(content='') ]) await q.page.save()
async def serve(q: Q): if q.args.train: # train WaveML Model using H2O-3 AutoML q.client.wave_model = build_model( train_df=q.client.train_df, target_column='target', model_type=ModelType.H2O3, _h2o3_max_runtime_secs=5, _h2o3_nfolds=2, _h2o3_include_algos=['DRF', 'XGBoost', 'GBM']) model_id = q.client.wave_model.model.model_id accuracy = round(q.client.wave_model.model.accuracy()[0][1] * 100, 2) # show training details and prediction option q.page['example'].items[1].buttons.items[1].button.disabled = False q.page['example'].items[2].message_bar.type = 'success' q.page['example'].items[ 2].message_bar.text = 'Training successfully completed!' q.page['example'].items[ 3].text.content = f'''**H2O AutoML model id:** {model_id} <br /> **Accuracy:** {accuracy}%''' q.page['example'].items[4].text.content = '' q.page['example'].items[5].text.content = '' elif q.args.predict: # predict on test data preds = q.client.wave_model.predict(test_df=q.client.test_df) shaps = q.client.wave_model.model.predict_contributions( H2OFrame(q.client.test_df)).as_data_frame() # show predictions q.page['example'].items[ 2].message_bar.text = 'Prediction successfully completed!' q.page['example'].items[ 4].text.content = f'''**Example predictions:** <br /> {preds[0]} <br /> {preds[1]} <br /> {preds[2]}''' q.page['example'].items[ 5].text.content = f'''**Example SHAP contributions:** <br /> {shaps.head(3).to_html()}''' else: # prepare sample train and test dataframes data = load_breast_cancer(as_frame=True)['frame'] q.client.train_df, q.client.test_df = train_test_split(data, train_size=0.8) # display ui q.page['example'] = ui.form_card( box='1 1 -1 -1', items=[ ui.text(content='''The sample dataset used is the <a href="https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html#sklearn.datasets.load_breast_cancer" target="_blank">breast cancer dataset</a>.''' ), ui.buttons(items=[ ui.button(name='train', label='Train', primary=True), ui.button(name='predict', label='Predict', primary=True, disabled=True), ]), ui.message_bar(type='warning', text='Training will take a few seconds'), ui.text(content=''), ui.text(content=''), ui.text(content='') ]) await q.page.save()