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
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