diff --git a/machine_learning/ridge_regression/model.py b/machine_learning/ridge_regression/ridge_regression.py similarity index 100% rename from machine_learning/ridge_regression/model.py rename to machine_learning/ridge_regression/ridge_regression.py diff --git a/machine_learning/ridge_regression/test_ridge_regression.py b/machine_learning/ridge_regression/test_ridge_regression.py new file mode 100644 index 000000000..03c4218a5 --- /dev/null +++ b/machine_learning/ridge_regression/test_ridge_regression.py @@ -0,0 +1,91 @@ +""" +Doctest for RidgeRegression class + +Tests include: +- feature_scaling +- fit +- predict +- mean_absolute_error + +To run these tests, use the following command: + python -m doctest test_ridge_regression.py -v +""" + +import numpy as np +from ridge_regression import RidgeRegression + +def test_feature_scaling(): + """ + Tests the feature_scaling function of RidgeRegression. + -------- + >>> model = RidgeRegression() + >>> X = np.array([[1, 2], [2, 3], [3, 4]]) + >>> X_scaled, mean, std = model.feature_scaling(X) + >>> np.round(X_scaled, 2) + array([[-1.22, -1.22], + [ 0. , 0. ], + [ 1.22, 1.22]]) + >>> np.round(mean, 2) + array([2., 3.]) + >>> np.round(std, 2) + array([0.82, 0.82]) + """ + pass + +def test_fit(): + """ + Tests the fit function of RidgeRegression + -------- + >>> model = RidgeRegression(alpha=0.01, regularization_param=0.1, num_iterations=1000) + >>> X = np.array([[1], [2], [3]]) + >>> y = np.array([2, 3, 4]) + + # Adding a bias term + >>> X = np.c_[np.ones(X.shape[0]), X] + + # Fit the model + >>> model.fit(X, y) + + # Check if the weights have been updated + >>> np.round(model.theta, decimals=2) + array([0. , 0.79]) + """ + pass + +def test_predict(): + """ + Tests the predict function of RidgeRegression + -------- + >>> model = RidgeRegression(alpha=0.01, regularization_param=0.1, num_iterations=1000) + >>> X = np.array([[1], [2], [3]]) + >>> y = np.array([2, 3, 4]) + + # Adding a bias term + >>> X = np.c_[np.ones(X.shape[0]), X] + + # Fit the model + >>> model.fit(X, y) + + # Predict with the model + >>> predictions = model.predict(X) + >>> np.round(predictions, decimals=2) + array([-0.97, 0. , 0.97]) + """ + pass + +def test_mean_absolute_error(): + """ + Tests the mean_absolute_error function of RidgeRegression + -------- + >>> model = RidgeRegression() + >>> y_true = np.array([2, 3, 4]) + >>> y_pred = np.array([2.1, 3.0, 3.9]) + >>> mae = model.mean_absolute_error(y_true, y_pred) + >>> float(np.round(mae, 2)) + 0.07 + """ + pass + +if __name__ == "__main__": + import doctest + doctest.testmod() \ No newline at end of file