From 5de3c63ca048d712eab75af0e1455331195e95ae Mon Sep 17 00:00:00 2001 From: PrathamSoneja Date: Tue, 13 Dec 2022 00:46:15 +0530 Subject: [PATCH 1/3] Pratham| Ridge Regression| Added --- .../Ridge_Regression/python/.idea/.gitignore | 8 ++ .../Ridge_Regression/python/.idea/.name | 1 + .../inspectionProfiles/Project_Default.xml | 38 ++++++ .../inspectionProfiles/profiles_settings.xml | 6 + .../Ridge_Regression/python/.idea/misc.xml | 4 + .../Ridge_Regression/python/.idea/modules.xml | 8 ++ .../Ridge_Regression/python/.idea/python.iml | 8 ++ .../Ridge_Regression/python/Salary_Data.csv | 31 +++++ .../python-scratch/RidgeRegression_scratch.py | 109 ++++++++++++++++++ .../python/python-scratch/output.png | Bin 0 -> 43330 bytes .../python/ridge_regression.py | 53 +++++++++ 11 files changed, 266 insertions(+) create mode 100644 3_Regression/Ridge_Regression/python/.idea/.gitignore create mode 100644 3_Regression/Ridge_Regression/python/.idea/.name create mode 100644 3_Regression/Ridge_Regression/python/.idea/inspectionProfiles/Project_Default.xml create mode 100644 3_Regression/Ridge_Regression/python/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 3_Regression/Ridge_Regression/python/.idea/misc.xml create mode 100644 3_Regression/Ridge_Regression/python/.idea/modules.xml create mode 100644 3_Regression/Ridge_Regression/python/.idea/python.iml create mode 100644 3_Regression/Ridge_Regression/python/Salary_Data.csv create mode 100644 3_Regression/Ridge_Regression/python/python-scratch/RidgeRegression_scratch.py create mode 100644 3_Regression/Ridge_Regression/python/python-scratch/output.png create mode 100644 3_Regression/Ridge_Regression/python/ridge_regression.py diff --git a/3_Regression/Ridge_Regression/python/.idea/.gitignore b/3_Regression/Ridge_Regression/python/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/3_Regression/Ridge_Regression/python/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/3_Regression/Ridge_Regression/python/.idea/.name b/3_Regression/Ridge_Regression/python/.idea/.name new file mode 100644 index 0000000..87f8a1b --- /dev/null +++ b/3_Regression/Ridge_Regression/python/.idea/.name @@ -0,0 +1 @@ +ridge_regression.py \ No newline at end of file diff --git a/3_Regression/Ridge_Regression/python/.idea/inspectionProfiles/Project_Default.xml b/3_Regression/Ridge_Regression/python/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..36e63aa --- /dev/null +++ b/3_Regression/Ridge_Regression/python/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,38 @@ + + + + \ No newline at end of file diff --git a/3_Regression/Ridge_Regression/python/.idea/inspectionProfiles/profiles_settings.xml b/3_Regression/Ridge_Regression/python/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/3_Regression/Ridge_Regression/python/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/3_Regression/Ridge_Regression/python/.idea/misc.xml b/3_Regression/Ridge_Regression/python/.idea/misc.xml new file mode 100644 index 0000000..d56657a --- /dev/null +++ b/3_Regression/Ridge_Regression/python/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/3_Regression/Ridge_Regression/python/.idea/modules.xml b/3_Regression/Ridge_Regression/python/.idea/modules.xml new file mode 100644 index 0000000..614b3c1 --- /dev/null +++ b/3_Regression/Ridge_Regression/python/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/3_Regression/Ridge_Regression/python/.idea/python.iml b/3_Regression/Ridge_Regression/python/.idea/python.iml new file mode 100644 index 0000000..8388dbc --- /dev/null +++ b/3_Regression/Ridge_Regression/python/.idea/python.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/3_Regression/Ridge_Regression/python/Salary_Data.csv b/3_Regression/Ridge_Regression/python/Salary_Data.csv new file mode 100644 index 0000000..0e2cda1 --- /dev/null +++ b/3_Regression/Ridge_Regression/python/Salary_Data.csv @@ -0,0 +1,31 @@ +YearsExperience,Salary +1.1,39343 +1.3,46205 +1.5,37731 +2,43525 +2.2,39891 +2.9,56642 +3,60150 +3.2,54445 +3.2,64445 +3.7,57189 +3.9,63218 +4,55794 +4,56957 +4.1,57081 +4.5,61111 +4.9,67938 +5.1,66029 +5.3,83088 +5.9,81363 +6,93940 +6.8,91738 +7.1,98273 +7.9,101302 +8.2,113812 +8.7,109431 +9,105582 +9.5,116969 +9.6,112635 +10.3,122391 +10.5,121872 diff --git a/3_Regression/Ridge_Regression/python/python-scratch/RidgeRegression_scratch.py b/3_Regression/Ridge_Regression/python/python-scratch/RidgeRegression_scratch.py new file mode 100644 index 0000000..c38cff0 --- /dev/null +++ b/3_Regression/Ridge_Regression/python/python-scratch/RidgeRegression_scratch.py @@ -0,0 +1,109 @@ +# Importing libraries + +import numpy as np +import pandas as pd +from sklearn.model_selection import train_test_split +import matplotlib.pyplot as plt + + +# Ridge Regression + +class RidgeRegression(): + + def __init__(self, learning_rate, iterations, l2_penality): + self.learning_rate = learning_rate + self.iterations = iterations + self.l2_penality = l2_penality + + # Function for model training + def fit(self, X, Y): + # no_of_training_examples, no_of_features + self.m, self.n = X.shape + + # weight initialization + self.W = np.zeros(self.n) + + self.b = 0 + self.X = X + self.Y = Y + + # gradient descent learning + + for i in range(self.iterations): + self.update_weights() + return self + + # Helper function to update weights in gradient descent + + def update_weights(self): + Y_pred = self.predict(self.X) + + # calculate gradients + dW = (- (2 * (self.X.T).dot(self.Y - Y_pred)) + + (2 * self.l2_penality * self.W)) / self.m + db = - 2 * np.sum(self.Y - Y_pred) / self.m + + # update weights + self.W = self.W - self.learning_rate * dW + self.b = self.b - self.learning_rate * db + return self + + # Hypothetical function h( x ) + def predict(self, X): + return X.dot(self.W) + self.b + +def train(X,Y): + # Splitting dataset into train and test set + X_train, X_test, Y_train, Y_test = train_test_split(X, Y, + test_size=1 / 3, random_state=0) + # Model training + model = RidgeRegression(iterations=1000, + learning_rate=0.01, l2_penality=1) + model.fit(X_train, Y_train) + return model, X_test, Y_test + + +def visualize(X, Y, Y_pred, col): + # Splitting dataset into train and test set + X_train, X_test, Y_train, Y_test = train_test_split(X, Y, + test_size=1 / 3, random_state=0) + fig, axs = plt.subplots(2) + axs[0].scatter(X_train, Y_train, color='blue') + axs[0].plot(X_train, Y_train, color='orange') + axs[0].set_title('training') + + axs[1].scatter(X_test, Y_pred, color='blue') + axs[1].plot(X_test, Y_pred, color='orange') + axs[1].set_title('validation') + + for ax in axs.flat: + ax.set(xlabel=col[0], ylabel=col[1]) + + fig.tight_layout() + #plt.savefig('output.png') + plt.show() + +# Driver code + +def main(): + # Importing dataset + df = pd.read_csv("../Salary_Data.csv") + X = df.iloc[:, :-1].values + Y = df.iloc[:, 1].values + col = df.columns + #training the regression model + model, X_test, Y_test = train(X, Y) + + # Prediction on test set + Y_pred = model.predict(X_test) + print("Predicted values ", np.round(Y_pred[:3], 2)) + print("Real values ", Y_test[:3]) + print("Trained W ", round(model.W[0], 2)) + print("Trained b ", round(model.b, 2)) + + # Visualization on test set + visualize(X, Y, Y_pred, col) + + +if __name__ == "__main__": + main() diff --git a/3_Regression/Ridge_Regression/python/python-scratch/output.png b/3_Regression/Ridge_Regression/python/python-scratch/output.png new file mode 100644 index 0000000000000000000000000000000000000000..bb118fe6f71195dc5f9034562904b11ed9677a4a GIT binary patch literal 43330 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%0Al7PMewp;RC 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 Date: Tue, 13 Dec 2022 00:48:47 +0530 Subject: [PATCH 2/3] Pratham| Readme| Added Ridge Regression Link --- 3_Regression/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/3_Regression/README.md b/3_Regression/README.md index f5c6d87..4688013 100644 --- a/3_Regression/README.md +++ b/3_Regression/README.md @@ -12,6 +12,8 @@ [6. Random Forest Regression](Random_Forest_Regression) +[7. Ridge Regression](Ridge_Regression) + ## Comparing Regression Models and their performance ### R Squared Intution for Simple Linear Regression From fce8a330677b5c3b01a2d18f26a23bc7a2c4baf0 Mon Sep 17 00:00:00 2001 From: Pratham Soneja <64166865+PrathamSoneja@users.noreply.github.com> Date: Tue, 13 Dec 2022 00:50:33 +0530 Subject: [PATCH 3/3] Pratham| Main Readme| Added Ridge Regression Link --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c22fb50..2662723 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ * [Support Vector Regression](3_Regression/Support_Vector_Regression) * [Decision Tree Regression](3_Regression/Decision_Tree_Regression) * [Random Forest Regression](3_Regression/Random_Forest_Regression) + * [Ridge Regression](3_Regression/Ridge_Regression) [**3. Classification**](4_Classification/README.md) * [Logistic Regression](4_Classification/Logistic_Regression) @@ -109,4 +110,4 @@ Check the official MIT License [here](LICENSE). - **[@pragyakapoor](https://github.com/pragyakapoor)** - \ No newline at end of file +