Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
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()