diff --git a/machine_learning/ridge_regression/model.py b/machine_learning/ridge_regression/model.py index 3a41ff60a..25f6dd13f 100644 --- a/machine_learning/ridge_regression/model.py +++ b/machine_learning/ridge_regression/model.py @@ -3,14 +3,20 @@ import pandas as pd class RidgeRegression: - def __init__(self, alpha:float=0.001, regularization_param:float=0.1, num_iterations:int=1000) -> None: - self.alpha:float = alpha - self.regularization_param:float = regularization_param - self.num_iterations:int = num_iterations - self.theta:np.ndarray = None + def __init__( + self, + alpha: float = 0.001, + regularization_param: float = 0.1, + num_iterations: int = 1000, + ) -> None: + self.alpha: float = alpha + self.regularization_param: float = regularization_param + self.num_iterations: int = num_iterations + self.theta: np.ndarray = None - - def feature_scaling(self, X:np.ndarray) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + def feature_scaling( + self, X: np.ndarray + ) -> tuple[np.ndarray, np.ndarray, np.ndarray]: mean = np.mean(X, axis=0) std = np.std(X, axis=0) @@ -20,13 +26,11 @@ class RidgeRegression: X_scaled = (X - mean) / std return X_scaled, mean, std - - def fit(self, X:np.ndarray, y:np.ndarray) -> None: + def fit(self, X: np.ndarray, y: np.ndarray) -> None: X_scaled, mean, std = self.feature_scaling(X) m, n = X_scaled.shape self.theta = np.zeros(n) # initializing weights to zeros - for i in range(self.num_iterations): predictions = X_scaled.dot(self.theta) error = predictions - y @@ -37,13 +41,11 @@ class RidgeRegression: ) / m self.theta -= self.alpha * gradient # updating weights - - def predict(self, X:np.ndarray) -> np.ndarray: + def predict(self, X: np.ndarray) -> np.ndarray: X_scaled, _, _ = self.feature_scaling(X) return X_scaled.dot(self.theta) - - def compute_cost(self, X:np.ndarray, y:np.ndarray) -> float: + def compute_cost(self, X: np.ndarray, y: np.ndarray) -> float: X_scaled, _, _ = self.feature_scaling(X) m = len(y) @@ -53,8 +55,7 @@ class RidgeRegression: ) * np.sum(self.theta**2) return cost - - def mean_absolute_error(self, y_true:np.ndarray, y_pred:np.ndarray) -> float: + def mean_absolute_error(self, y_true: np.ndarray, y_pred: np.ndarray) -> float: return np.mean(np.abs(y_true - y_pred)) @@ -66,7 +67,7 @@ if __name__ == "__main__": y = (y - np.mean(y)) / np.std(y) # added bias term to the feature matrix - X = np.c_[np.ones(X.shape[0]), X] + X = np.c_[np.ones(X.shape[0]), X] # initialize and train the ridge regression model model = RidgeRegression(alpha=0.01, regularization_param=0.1, num_iterations=1000)