File size: 2,930 Bytes
92b63f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import logging
from sklearn.linear_model import LogisticRegression
from xgboost import XGBClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from typing import Any

# Set up logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

class ModelBuilding:
    def logistic_regression(self, X_train, y_train) -> Any:
        """Initialize, fit, and return a Logistic Regression model."""
        logger.info("Initializing Logistic Regression model...")
        model = LogisticRegression()
        model.fit(X_train, y_train)
        logger.info("Logistic Regression model trained successfully.")
        return model

    def xgboost(self, X_train, y_train) -> Any:
        """Initialize, fit, and return a Naive Bayes classifier model."""
        logger.info("Initializing xgboost model...")
        model = XGBClassifier()
        model.fit(X_train, y_train)
        logger.info("xgboost model trained successfully.")
        return model

    def random_forest(self, X_train, y_train) -> Any:
        """Initialize, fit, and return a Random Forest classifier model."""
        logger.info("Initializing Random Forest model...")
        model = RandomForestClassifier()
        model.fit(X_train, y_train)
        logger.info("Random Forest model trained successfully.")
        return model

    def decision_tree(self, X_train, y_train) -> Any:
        """Initialize, fit, and return a Decision Tree classifier model."""
        logger.info("Initializing Decision Tree model...")
        model = DecisionTreeClassifier()
        model.fit(X_train, y_train)
        logger.info("Decision Tree model trained successfully.")
        return model

    def get_model(self, model_name: str, X_train, y_train) -> Any:
        

        """
        Initialize, fit, and return a machine learning model by name.

        Parameters:
        
        model_name : str
            The name of the model to create.
        X_train : pd.DataFrame
            The feature data to train the model on.
        y_train : pd.Series
            The target data to train the model on.

        Returns :
        model : Any
            The trained model instance.

        Raises:
        ValueError
            If the model name is not recognized.
        """
        if model_name == "logistic_regression":
            return self.logistic_regression(X_train, y_train)
        elif model_name == "xgboost":
            return self.xgboost(X_train, y_train)
        elif model_name == "random_forest":
            return self.random_forest(X_train, y_train)
        elif model_name == "decision_tree":
            return self.decision_tree(X_train, y_train)
        else:
            logger.error(f"Model '{model_name}' not recognized.")
            raise ValueError(f"Model '{model_name}' not recognized.")