Example #1
0
def load_model(path_file):
    """ Load the model and its parameters from a .zip file 

    Parameters:
    -----------
    * path_file, str
        address of the file where the model will be loaded from 

    Returns:
    --------
    * pysurvival_model : Pysurvival object
        Pysurvival model
    """

    # Initializing a base model
    from pysurvival.models import BaseModel
    base_model = BaseModel()

    # Temporary loading the model
    base_model.load(path_file)
    model_name = base_model.name

    # Loading the actual Pysurvival model - Kaplan-Meier
    if 'kaplanmeier' in model_name.lower():

        if 'smooth' in model_name.lower():
            from pysurvival.models.non_parametric import SmoothKaplanMeierModel
            pysurvival_model = SmoothKaplanMeierModel()

        else:
            from pysurvival.models.non_parametric import KaplanMeierModel
            pysurvival_model = KaplanMeierModel()

    elif 'linearmultitask' in model_name.lower():

        from pysurvival.models.multi_task import LinearMultiTaskModel
        pysurvival_model = LinearMultiTaskModel()

    elif 'neuralmultitask' in model_name.lower():

        from pysurvival.models.multi_task import NeuralMultiTaskModel
        structure = [
            {
                'activation': 'relu',
                'num_units': 128
            },
        ]
        pysurvival_model = NeuralMultiTaskModel(structure=structure)

    elif 'exponential' in model_name.lower():

        from pysurvival.models.parametric import ExponentialModel
        pysurvival_model = ExponentialModel()

    elif 'weibull' in model_name.lower():

        from pysurvival.models.parametric import WeibullModel
        pysurvival_model = WeibullModel()

    elif 'gompertz' in model_name.lower():

        from pysurvival.models.parametric import GompertzModel
        pysurvival_model = GompertzModel()

    elif 'loglogistic' in model_name.lower():

        from pysurvival.models.parametric import LogLogisticModel
        pysurvival_model = LogLogisticModel()

    elif 'lognormal' in model_name.lower():

        from pysurvival.models.parametric import LogNormalModel
        pysurvival_model = LogNormalModel()

    elif 'simulation' in model_name.lower():

        from pysurvival.models.simulations import SimulationModel
        pysurvival_model = SimulationModel()

    elif 'coxph' in model_name.lower():

        if 'nonlinear' in model_name.lower():
            from pysurvival.models.semi_parametric import NonLinearCoxPHModel
            pysurvival_model = NonLinearCoxPHModel()

        else:
            from pysurvival.models.semi_parametric import CoxPHModel
            pysurvival_model = CoxPHModel()

    elif 'random' in model_name.lower() and 'survival' in model_name.lower():

        from pysurvival.models.survival_forest import RandomSurvivalForestModel
        pysurvival_model = RandomSurvivalForestModel()

    elif 'extra' in model_name.lower() and 'survival' in model_name.lower():

        from pysurvival.models.survival_forest import ExtraSurvivalTreesModel
        pysurvival_model = ExtraSurvivalTreesModel()

    elif 'condi' in model_name.lower() and 'survival' in model_name.lower():

        from pysurvival.models.survival_forest import ConditionalSurvivalForestModel
        pysurvival_model = ConditionalSurvivalForestModel()

    elif 'svm' in model_name.lower():

        if 'linear' in model_name.lower():

            from pysurvival.models.svm import LinearSVMModel
            pysurvival_model = LinearSVMModel()

        elif 'kernel' in model_name.lower():

            from pysurvival.models.svm import KernelSVMModel
            pysurvival_model = KernelSVMModel()

    else:
        raise NotImplementedError(
            '{} is not a valid pysurvival model.'.format(model_name))

    # Transferring the components
    pysurvival_model.__dict__.update(copy.deepcopy(base_model.__dict__))
    del base_model

    return pysurvival_model
Example #2
0
    brier_scores = brier_score(model,
                               table[variables],
                               table['PFS'],
                               table['disease_progress'],
                               t_max=84,
                               figure_size=(20, 6.5))
    return c_indexes, brier_scores


# In[ ]:

# In[36]:

nlcph = NonLinearCoxPHModel(structure=[{
    'activation': 'ReLU',
    'num_units': 64
}],
                            auto_scaler=True)
nlcph.fit(train[features],
          train['PFS'],
          train['disease_progress'],
          init_method='glorot_uniform',
          lr=0.0001)

c_index = concordance_index(nlcph, test[features], test['PFS'],
                            test['disease_progress'])
print('C-index: {:.2f}'.format(c_index))

ibs = integrated_brier_score(nlcph,
                             test[features],
                             test['PFS'],
 for train_index, test_index in kf.split(MOF):
     data_train = MOF.loc[train_index].reset_index(drop=True)
     data_test = MOF.loc[test_index].reset_index(drop=True)
     X_train, X_test = data_train[features], data_test[features]
     T_train, T_test = data_train['time'].values, data_test[
         'time'].values
     E_train, E_test = data_train['event'].values, data_test[
         'event'].values
     structure = [{
         'activation': 'SELU',
         'num_units': num_units
     }, {
         'activation': 'SELU',
         'num_units': num_units2
     }]
     nonlinear_coxph = NonLinearCoxPHModel(structure=structure)
     nonlinear_coxph.fit(X_train,
                         T_train,
                         E_train,
                         lr=lr,
                         init_method='xav_uniform',
                         dropout=dropout)
     c_index = concordance_index(nonlinear_coxph, X_test,
                                 T_test, E_test)
     c_index_df = c_index_df.append({"c_index": c_index},
                                    ignore_index=True)
     print(c_index_df)
     if len(c_index_df) == 10:
         mean = c_index_df["c_index"].mean()
         dataframe_hp = dataframe_hp.append(
             {
def run_pysurvival_with_repetitions(data,
                                    features,
                                    survival,
                                    event,
                                    models,
                                    test_ratio,
                                    repetitions=10):

    num_samples = len(data.index)
    print('Number of Samples:', num_samples)
    ''' Initialize Outputs '''
    outputs = initialize_outputs(models, features)
    ''' Run Survival Model N times '''
    for _ in range(repetitions):
        ''' Dataset Splitting '''
        index_train, index_test = train_test_split(range(num_samples),
                                                   test_size=test_ratio)
        data_train = data.loc[index_train].reset_index(drop=True)
        data_test = data.loc[index_test].reset_index(drop=True)

        X_train, X_test = data_train[features], data_test[features]
        T_train, T_test = data_train[survival].values, data_test[
            survival].values
        E_train, E_test = data_train[event].values, data_test[event].values
        ''' Run Cox '''
        if 'cox' in models:
            coxph = CoxPHModel()
            coxph.fit(X_train,
                      T_train,
                      E_train,
                      lr=0.0001,
                      l2_reg=1e-2,
                      init_method='zeros',
                      verbose=False)
            c_index = concordance_index(coxph, X_test, T_test, E_test)
            outputs['cox']['c_index'].append(c_index)
            ibs = integrated_brier_score(coxph,
                                         X_test,
                                         T_test,
                                         E_test,
                                         t_max=None)
            outputs['cox']['ibs'].append(ibs)
            for idx, i in enumerate(features):
                outputs['cox']['weights'][i].append(coxph.weights[idx])
        ''' Run RSF '''
        if 'rsf' in models:
            rsf = RandomSurvivalForestModel(num_trees=200)
            rsf.fit(X_train,
                    T_train,
                    E_train,
                    max_features="sqrt",
                    max_depth=5,
                    min_node_size=20)
            c_index = concordance_index(rsf, X_test, T_test, E_test)
            outputs['rsf']['c_index'].append(c_index)
            ibs = integrated_brier_score(rsf,
                                         X_test,
                                         T_test,
                                         E_test,
                                         t_max=None)
            outputs['rsf']['ibs'].append(ibs)
            for key, value in rsf.variable_importance.items():
                outputs['rsf']['importance'][key].append(value)
        ''' Run Deepsurv '''
        if 'deepsurv' in models:
            structure = [{
                'activation': 'ReLU',
                'num_units': 128
            }, {
                'activation': 'ReLU',
                'num_units': 128
            }, {
                'activation': 'ReLU',
                'num_units': 128
            }]

            nonlinear_coxph = NonLinearCoxPHModel(structure=structure)
            nonlinear_coxph.fit(X_train,
                                T_train,
                                E_train,
                                lr=1e-4,
                                init_method='xav_uniform',
                                verbose=False)
            c_index = concordance_index(nonlinear_coxph, X_test, T_test,
                                        E_test)
            outputs['deepsurv']['c_index'].append(c_index)
            ibs = integrated_brier_score(nonlinear_coxph,
                                         X_test,
                                         T_test,
                                         E_test,
                                         t_max=None)
            outputs['deepsurv']['ibs'].append(ibs)

    return outputs