# List of all models to test
model_factory = [
    RandomForestRegressor(n_jobs=1),
    XGBRegressor(),
]

# Apply the PseudoLabeler class to each model
model_factory = map(pseudo_label_wrapper, model_factory)

# Train each model with different sample rates
results = {}
num_folds = 5

for model in model_factory:
    model_name = model.get_model_name()
    print('%s' % model_name)

    results[model_name] = list()
    for sample_rate in sample_rates:
        model.sample_rate = sample_rate

        # Calculate the CV-3 R2 score and store it
        scores = cross_val_score(
            model,
            X_train,
            y_train,
            cv=num_folds,
            scoring='neg_mean_squared_error')  # n_jobs = 4
        results[model_name].append(np.sqrt(scores.mean() * -1))