Aryan
added all environment project
a244ac5
import os
import sys
import pandas as pd
import numpy as np
import dill
from dataclasses import dataclass
from src.exception import CustomException
from src.logger import logging
from sklearn.metrics import r2_score
from sklearn.model_selection import GridSearchCV
def save_object(file_path: str, obj: object):
"""
Saves a Python object to a file using pickle.
Parameters:
file_path (str): The path where the object should be saved.
obj (object): The Python object to be saved.
"""
try:
os.makedirs(os.path.dirname(file_path), exist_ok=True)
with open(file_path, 'wb') as file_obj:
dill.dump(obj, file_obj)
logging.info(f"Object saved successfully at {file_path}")
except Exception as e:
logging.error("Error saving object: {0}".format(e))
raise CustomException(e, sys)
def evaluate_models(X_train, y_train, X_test, y_test, models , param_grids) -> dict:
"""
Evaluates multiple regression models and returns their R2 scores.
Parameters:
X_train (array-like): Training features.
y_train (array-like): Training target.
X_test (array-like): Testing features.
y_test (array-like): Testing target.
models (dict): A dictionary where keys are model names and values are model instances.
Returns:
dict: A dictionary with model names as keys and their R2 scores as values.
"""
try:
model_report = {}
for model_name, model in models.items():
param_grid = param_grids.get(model_name, {})
gs = GridSearchCV(model, param_grid, cv=5, n_jobs=-1, verbose=0)
gs.fit(X_train, y_train)
model.set_params(**gs.best_params_)
logging.info(f"Best parameters for {model_name}: {gs.best_params_}")
model.fit(X_train, y_train)
y_pred_test = model.predict(X_test)
test_r2_score = r2_score(y_test, y_pred_test)
model_report[model_name] = test_r2_score
logging.info(f"{model_name} R2 Score: {test_r2_score}")
return model_report
except Exception as e:
logging.error("Error evaluating models: {0}".format(e))
raise CustomException(e, sys)
def load_object(file_path: str) -> object:
"""
Loads a Python object from a file using pickle.
Parameters:
file_path (str): The path to the file from which the object should be loaded.
Returns:
object: The loaded Python object.
"""
try:
with open(file_path, 'rb') as file_obj:
obj = dill.load(file_obj)
logging.info(f"Object loaded successfully from {file_path}")
return obj
except Exception as e:
logging.error("Error loading object: {0}".format(e))
raise CustomException(e, sys)