| 77 | return engineered_data |
| 78 | |
| 79 | class ModelSelector: |
| 80 | |
| 81 | |
| 82 | def __init__(self, random_state: int = 42): |
| 83 | self.random_state = random_state |
| 84 | self.models = { |
| 85 | 'random_forest': RandomForestClassifier(random_state=random_state), |
| 86 | 'gradient_boosting': GradientBoostingClassifier(random_state=random_state) |
| 87 | } |
| 88 | self.best_model = None |
| 89 | self.best_score = float('-inf') |
| 90 | |
| 91 | def select_best_model(self, X_train: np.ndarray, y_train: np.ndarray, |
| 92 | X_val: np.ndarray, y_val: np.ndarray) -> BaseEstimator: |
| 93 | |
| 94 | for name, model in self.models.items(): |
| 95 | model.fit(X_train, y_train) |
| 96 | score = model.score(X_val, y_val) |
| 97 | |
| 98 | if score > self.best_score: |
| 99 | self.best_score = score |
| 100 | self.best_model = model |
| 101 | |
| 102 | return self.best_model |
| 103 | |
| 104 | class HyperparameterTuner: |
| 105 | |