from sklearn.model_selection import RandomizedSearchCV class Model_Regression_HyperParameter_Tuning(): def __init__(self): print("HyperParameter_Tuning object created") class XGB_Regressor_HyperParameter_Tuning(): def __init__(self): print("XGB HyperParameter_Tuning object created") def Fit_XGB_HyperParameter_Tuner(self,dftrain): xgb_Reg = XGBRegressor(tree_method = "exact", predictor = "cpu_predictor", objective = "reg:squarederror") parameters = {"learning_rate": [0.1, 0.01, 0.001], "gamma" : [0.01, 0.1, 0.3, 0.5, 1, 1.5, 2], "max_depth": [2, 4, 7, 10], "colsample_bytree": [0.3, 0.6, 0.8, 1.0], "subsample": [0.2, 0.4, 0.5, 0.6, 0.7], "reg_alpha": [0, 0.5, 1], "reg_lambda": [1, 1.5, 2, 3, 4.5], "min_child_weight": [1, 3, 5, 7], "n_estimators": [100, 250, 500, 1000]} xgb_rscv = RandomizedSearchCV(xgb_Reg, param_distributions = parameters, scoring = "r2", cv = 3, random_state = 29 ) # Fit the model model_xgboost = xgb_rscv.fit(x_train, y_train) return model_xgboost def XGB_Get_Best_Prams(self): print("Learning Rate: ", Xgb_model.best_estimator_.get_params()["learning_rate"]) print("Gamma: ", Xgb_model.best_estimator_.get_params()["gamma"]) print("Max Depth: ", Xgb_model.best_estimator_.get_params()["max_depth"]) print("Subsample: ", Xgb_model.best_estimator_.get_params()["subsample"]) print("Max Features at Split: ", Xgb_model.best_estimator_.get_params()["colsample_bytree"]) print("Alpha: ", Xgb_model.best_estimator_.get_params()["reg_alpha"]) print("Lamda: ", Xgb_model.best_estimator_.get_params()["reg_lambda"]) print("Minimum Sum of the Instance Weight Hessian to Make a Child: ",Xgb_model.best_estimator_.get_params()["min_child_weight"]) print("Number of Trees: ", Xgb_model.best_estimator_.get_params()["n_estimators"]) def get_Regressor_result(self,modelname,y_test): RF_pred = modelname.predict(x_test) RF_RMSE = np.sqrt(metrics.mean_squared_error(y_test,RF_pred)) RF_r2_score = r2_score(y_test,RF_pred) return RF_RMSE,RF_r2_score class RF_Regressor_HyperParameter_Tuning(): def __init__(self): print("RF HyperParameter_Tuning object created") def Fit_RF_HyperParameter_Tuner(self,dftrain): param_grid = {"max_depth": [1, 3, 5, 7, 9, 10], "min_samples_split": [1, 3, 10, 15, 20], "min_samples_leaf": [1, 3, 5, 10], "bootstrap": [True, False], "criterion": ["mse", "mae"], "n_estimators": [100, 250, 500, 1000]} Reg = RandomForestRegressor(random_state=29, n_jobs=-1) model = RandomizedSearchCV(Reg, param_grid, scoring = 'r2', cv=3) model.fit(x_train, y_train) return model def RF_Get_Best_Prams(self): print("n_estimators: ", RF_model.best_estimator_.get_params()["n_estimators"]) print("Max Depth: ", RF_model.best_estimator_.get_params()["max_depth"]) print("min_samples_split: ", RF_model.best_estimator_.get_params()["min_samples_split"]) print("min_samples_leaf: ", RF_model.best_estimator_.get_params()["min_samples_leaf"]) print("max_leaf_nodes: ", RF_model.best_estimator_.get_params()["max_leaf_nodes"]) print("bootstrap: ", RF_model.best_estimator_.get_params()["bootstrap"]) print("criterion: ",RF_model.best_estimator_.get_params()["criterion"]) def Evaluation_Result(self,modelname,y_test): XGB_pred = modelname.predict(x_test) XGB_RMSE = np.sqrt(metrics.mean_squared_error(y_test,XGB_pred)) XGB_r2_score = r2_score(y_test,XGB_pred) return XGB_RMSE,XGB_r2_score HP_XGB = Model_Regression_HyperParameter_Tuning().XGB_Regressor_HyperParameter_Tuning() HP_RF = Model_Regression_HyperParameter_Tuning().XGB_Regressor_HyperParameter_Tuning().RF_Regressor_HyperParameter_Tuning Xgb_model = HP_XGB.Fit_XGB_HyperParameter_Tuner(df) HP_XGB.XGB_Get_Best_Prams() HP_XGB.get_Regressor_result(Xgb_model,y_test) RF_model = HP_RF.Fit_RF_HyperParameter_Tuner(df) HP_RF.RF_Get_Best_Prams() HP_RF.Evaluation_Result(RF_model,y_test)