# -*- coding: utf-8 -*-
"""
Created on Fri Mar  4 19:22:40 2022

@author: TANISH
"""


""" Ridge Regression """
""" L2 Regularisation """

import pandas as pd
import numpy as np


data = pd.read_csv(r"C:\Users\tanis\Desktop\Sample.csv")


""" Heat Map """

import seaborn as sb

sb.heatmap(data.corr())



""" Train Test Split """

X = data.loc[:,data.columns != "Y"]
Y = data.loc[:,data.columns == "Y"]


from sklearn import model_selection as ms

X_train,X_test,Y_train,Y_test = ms.train_test_split(X,Y,
                                      test_size = 0.30,
                                      random_state = 11)


sb.scatterplot(x = X_train["X"],
               y = Y_train["Y"])


""" Model Fitting """

from sklearn.linear_model import Ridge
from sklearn.metrics import mean_absolute_error as mae


model = Ridge(alpha = 0.1).fit(X_train,Y_train)


Y_pred = model.predict(X_test)
mae(Y_test, Y_pred)



""" Hyper Parameter Tuning """
""" Using for loop """

Capture = pd.DataFrame()
Capture["Alpha"] = np.arange(0,10,0.01)
Capture["MAE"] = np.arange(0,10,0.01)

          
x = 0


for i in np.arange(0,10,0.01):
    
    model = Ridge(alpha = i).fit(X_train,Y_train)
 
   
    Y_pred = model.predict(X_test)
    
    Capture["MAE"][x] = mae(y_true = Y_test,
                                y_pred = Y_pred)

    x = x + 1
    

sb.scatterplot(Capture["Alpha"],
                Capture["MAE"])


Capture.loc[Capture["MAE"] == Capture["MAE"].min(),:]



""" Grid Search With Repeated K Fold CV """


from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import RepeatedKFold
from sklearn.linear_model import RidgeCV


RKF = RepeatedKFold(n_splits = 2, 
                    n_repeats = 2)


model = RidgeCV(alphas = np.arange(0,10,0.01),
                cv = RKF,
                scoring = "neg_mean_absolute_error")


model = model.fit(X_train, Y_train)

model.alpha_


Y_pred = model.predict(X_test)
mae(y_true = Y_test, y_pred = Y_pred)

