ridge regression

This commit is contained in:
jbsch 2024-10-23 20:44:04 +05:30
commit b1353dddd4

View File

@ -20,11 +20,13 @@ class RidgeRegression:
X_scaled = (X - mean) / std X_scaled = (X - mean) / std
return X_scaled, 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) X_scaled, mean, std = self.feature_scaling(X)
m, n = X_scaled.shape m, n = X_scaled.shape
self.theta = np.zeros(n) # initializing weights to zeros self.theta = np.zeros(n) # initializing weights to zeros
for i in range(self.num_iterations): for i in range(self.num_iterations):
predictions = X_scaled.dot(self.theta) predictions = X_scaled.dot(self.theta)
error = predictions - y error = predictions - y
@ -35,12 +37,14 @@ class RidgeRegression:
) / m ) / m
self.theta -= self.alpha * gradient # updating weights 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) X_scaled, _, _ = self.feature_scaling(X)
return X_scaled.dot(self.theta) 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) X_scaled, _, _ = self.feature_scaling(X)
m = len(y) m = len(y)
predictions = X_scaled.dot(self.theta) predictions = X_scaled.dot(self.theta)
@ -49,6 +53,7 @@ class RidgeRegression:
) * np.sum(self.theta**2) ) * np.sum(self.theta**2)
return cost 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)) return np.mean(np.abs(y_true - y_pred))