@@ -20,11 +20,13 @@ def feature_scaling(self, X:np.ndarray) -> tuple[np.ndarray, np.ndarray, np.ndar
20
20
X_scaled = (X - mean ) / std
21
21
return X_scaled , mean , std
22
22
23
+
23
24
def fit (self , X :np .ndarray , y :np .ndarray ) -> None :
24
25
X_scaled , mean , std = self .feature_scaling (X )
25
26
m , n = X_scaled .shape
26
27
self .theta = np .zeros (n ) # initializing weights to zeros
27
28
29
+
28
30
for i in range (self .num_iterations ):
29
31
predictions = X_scaled .dot (self .theta )
30
32
error = predictions - y
@@ -35,12 +37,14 @@ def fit(self, X:np.ndarray, y:np.ndarray) -> None:
35
37
) / m
36
38
self .theta -= self .alpha * gradient # updating weights
37
39
40
+
38
41
def predict (self , X :np .ndarray ) -> np .ndarray :
39
42
X_scaled , _ , _ = self .feature_scaling (X )
40
43
return X_scaled .dot (self .theta )
41
44
45
+
42
46
def compute_cost (self , X :np .ndarray , y :np .ndarray ) -> float :
43
- X_scaled , _ , _ = self .feature_scaling (X )
47
+ X_scaled , _ , _ = self .feature_scaling (X )
44
48
m = len (y )
45
49
46
50
predictions = X_scaled .dot (self .theta )
@@ -49,6 +53,7 @@ def compute_cost(self, X:np.ndarray, y:np.ndarray) -> float:
49
53
) * np .sum (self .theta ** 2 )
50
54
return cost
51
55
56
+
52
57
def mean_absolute_error (self , y_true :np .ndarray , y_pred :np .ndarray ) -> float :
53
58
return np .mean (np .abs (y_true - y_pred ))
54
59
0 commit comments