{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84253,"databundleVersionId":9421888,"sourceType":"competition"}],"dockerImageVersionId":30761,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# **Aim of this notebook**\nthis notebook is to explain how StackingRegressor works and also diaplay use of Ridge and SGDRegressor as eliminator models","metadata":{}},{"cell_type":"markdown","source":"# **What is StackingRegressor?**\nStacked generalization consists in stacking the output of individual estimator and use a regressor to compute the final prediction. Stacking allows to use the strength of each individual estimator by using their output as input of a final estimator.","metadata":{}},{"cell_type":"markdown","source":"# **How do StackingRegressor work?**\nThe StackingRegressor enhances predictive accuracy by combining multiple regression models. It first trains several base models and uses their predictions to create a new dataset. A meta-model is then trained on this dataset to learn how to best combine these predictions. For new data, the base models make predictions, which the meta-model then uses to produce a final, more accurate output. Cross-validation is often used to improve generalization, making the StackingRegressor a powerful tool for regression tasks.![1_27vV5Pit7XEwKHfi6s5Q1w.png](attachment:b82f97cb-b96f-41a8-a48d-e4231ad66de7.png)","metadata":{},"attachments":{"b82f97cb-b96f-41a8-a48d-e4231ad66de7.png":{"image/png":"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AwAAAAAQIII4AAAAAAABIogDAAAAABAggjgAAAAAAAEiiAMAAAAAECCCOAAAAAAAASKIAwAAAAAQIII4AAAAAAABIogDAAAAABAggjgAAAAAAAEiiAMAAAAAECCCOAAAAAAAASKIAwAAAAAQIII4AAAAAAABIogDAAAAABAggjgAAAAAAAEiiAMAAAAAECCCOAAAAAAAASKIAwAAAAAQIII4AAAAAAABIogDAAAAABCgjgvi8Xhc8Xi82cXAMnK5nOLxuIrFYrOLgg0knU4rk8lUfS+Tyairq2tVyy0UCnXPG4/HlU6nfa9ls9kly4X11Yr7xK233qr3vve92rlzp2644YZVrR9r04r7xbe+9S2Njo7qvPPO05e//OVVrR+r14r7hHXTTTfxG9IErbZPpNPpqv/QutoiiKfTaXV1ddX8593RCoVCw9ZdKBTqWp4tYyPX3Qz11PVqDizFYlGlUsn923EcFQoF32tBKJVKhP8NLJPJ6Gtf+5oeeuihivcuvfTSwMvzm9/8Rm94wxt02WWXtf2xo1212j6RTqf1hje8QUceeaSOPvpoXXHFFewbTdBq+8WFF16o888/X93d3TrhhBO0c+dOTrAD1mr7hPXwww9rZGSE/aEJWm2f+I//+I/A14m1OazZBViJdDotY0zNafL5fMPW98gjj2jnzp264oorGrbMdpFIJBSJRBq2vKGhIWWzWcViMUlq2lW6iYmJui+uoDO99a1v1dVXX60LL7zQfe2WW25RNBrVF7/4Rd+03/zmN7V//35t2rRJ27ZtU19fn/veddddpx/96Efq7e3VU5/61Ir1fOlLX9Lpp5+uz3/+8zr99NP1uMc9rmKaK664QrFYTMcff7xmZ2cbuJVYiVbZJx5++GHNzs5qbGxMyWRSknTllVfqk5/8pHvsRHBaab/4r//6L1155ZXufnDHHXdwzGiCVtknvC688EJ9+MMf1tDQUAO2ECvVSvvEQw89pEgk4v5+oPW1RYu4FY1Gl+x2UU+o27t3b0UA+/3vf6+DBw9WDWa333677rjjjsYUvoq7775be/fu1eLi4pqW8/DDD+vuu+9WoVDQI488suz09QTRZDK54roub/W2HMeR4zh1bIl/nmot17OzszVb0R3H0ezs7JLrW641vFgs1lXWpVrWOTFqfc961rN0+eWX+1678sor9da3vtX3Wjqd1rnnnqu//OUvuuuuuxSPx93uoF/60pf0xje+Uc985jP1+9//Xu95z3t885511ln693//d0nSJz/5SZ188sn6zW9+U1GWc845R+985zsbuXlYhVbZJ4444gjl83nfSVSpVNLjH//4Rm0qVqDV9gvvxZinPOUpOvHEExu1qahTq+wT1szMjH7zm98oFAo1ahOxQq20Tzz00EN6ylOeIsdxdOedd+rhhx9u5KZiPZg2MDY2ZiSZfD6/7LSxWMx4Nysej5u/+Zu/Md/73veMJPe9u+66y+zYscN9TZJ5yUteYq666irfOr3/GlXGsbExc8IJJ/iWvWPHDvPzn//cGGPMxRdfbCSZu+++u2Leq666ykgyN954ozHGmJtuusk861nPcpfz2Mc+1pxxxhnm9ttvd+e5+eabjSRz3XXXmRe/+MVGkhkbG1vzdhhjzOLiohkcHPRtSyQSMdls1re88nosX08+nzeSTDabdT9Du6y5uTmTzWZNKBRyX08mk75yzM3Nmb6+vopyeLejvBzeOkilUhXvp9Np3zqi0aiJRqMmm80aSSYajbrr9pa5vA42kmQyaSKRSLOLsSS7z73mNa8xP/rRj4wxxjzwwAPm6KOPdt835tH98ZZbbnHnfcMb3mBOP/10Y4wxp59+uvngBz/ovjc+Pu7O+7Wvfc10d3ebO++80zfv5Zdfbow5dIwq//6NjY2ZWCzW4K1trGrfiXrYuqz3mBK0Vt0nrOc85zlmfn6+MRvbYGv5vsdisYrjeCtp1f1idHTUDAwMmKGhoZbcL9byfbe/ra24Xca03j7xq1/9yjz72c82999/v9m9e/ey56nNFIlEVv19X+1vTxBabZ848sgjzcDAgHnxi19sHve4x5lnPetZ5qabblqnrV+bVv++B6WtWsRX44gjjtCdd96pj33sY7rqqqvcrusf+tCHVCgUdPPNN+t3v/udDhw4oJe+9KU699xzVSgUFIvF3Gnz+XzDurxfc801ymQyevnLX64DBw7o17/+ta666irdcMMNeve73y1Jetvb3iZJFVfYJOnqq6/Wli1b9LrXvU4PPfSQzj33XN11113avXu35ufn9b3vfU8///nPtW3bNrdl9/DDD5ckLSws6HnPe17FlfW1SCaTbv0YY7S4uKhoNKrh4WEVCgUlk0mNj49LksbHx5etx9HRUQ0MDGhxcVHT09Ny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Za2nnqp54IEH6l7nn//854rXyu+f9zrqqKN01lln6fOf/7x27dqlT37ykxWhe7XbW009dZBMJvWGN7xB+XxeN910k8455xzddNNN+uxnP9uQMkj+71z5PrFeEonEkhfZUqmUcrmcJiYm1NfXp76+vnUbcKtaOazy48vY2JhSqZTm5uYaNvDk4Ycfvqr5aq3f/F/X+HpvMbD3i9tbCPr6+tx7tr3LXC3HcdTf319z+faJGrauE4mEenp63GN5oVBQsVhUoVBQNptVKpXS9PT0qgacGxkZqfh9WM/fC6AWgjgAbBD25G25kc/L77FeWFioOp09OS6VSu6JTLFY1J49e5Z9CleZ/gAAHWNJREFUhE9fX1/VgY/KH8u2HNsKMzg4qHQ6rUgkopmZmYqT0C1btkiSbrnlFu3YscN9/b777tMpp5xS9/qWc9NNN0mSPvCBD7gto+X32B933HH64Q9/6GsVtxdV1hI4bKDauXOnzjjjDB177LH6+7//+6rTHnfccbrvvvt8r/3whz+U9Oh+cv/991d9/5FHHlFPT48k6fvf/74+/vGPr7is9dTTUupdp/3M77nnHr3gBS+QJH33u9+tmM4bMs4++2xdcskl2r59u37xi1/o1a9+taRH62S121tNvXVw5JFH6rTTTtNpp52mcDisCy64QB/60If09Kc/vSHluPfee9Xd3S3pUF2Ve/DBB93/r/f+/6XY0BsKhZbc14vFopLJpO87vLCw4GsxX049A411d3erVCot+52zvW1SqZQikYhyudyyF0Ht/vLzn//c9/revXt9FztWG8RrfVfsuus9lszMzKhUKimXy7nH8fLfgGrb293dXTFdJpNRIpHwveY4zrLLl/zHcvsEkGKx6O4z9qJMKpVSLBZTLpdbURBfTc8tYL0xWBsAdDBvS3YsFlM4HPaNoFssFtXT0+OeGCUSCU1OTrrz5XK5JQc/6+vr8y3PjoY8NzfnTuPt9u4Vi8XU3d3t6yY/MTGh7u7uuk+uQqGQL8w7jqOHHnqoapA/44wz9KpXvco3UNUNN9ygP//5z3rLW95S1/os22pT7d+Tn/xkSdKdd94p6dCo3VNTU5LkDsY2MDCgr3/96/re976nUqmka665RplMRmeeeeaKylHOBvGenh796U9/0u7du7Vz586q077rXe/S7bff7hv061vf+pYuuugiNyTd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"}}},{"cell_type":"markdown","source":"# **Importing libraries**","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.preprocessing import MinMaxScaler\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.feature_selection import RFE\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.linear_model import Lars\nfrom sklearn.linear_model import Ridge\nfrom sklearn.linear_model import SGDRegressor\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.ensemble import StackingRegressor","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:20.130071Z","iopub.execute_input":"2024-08-25T17:21:20.130804Z","iopub.status.idle":"2024-08-25T17:21:20.140517Z","shell.execute_reply.started":"2024-08-25T17:21:20.130743Z","shell.execute_reply":"2024-08-25T17:21:20.139039Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv(\"/kaggle/input/first-steps-in-data-science-new/train (7).csv\") \ntest = pd.read_csv(\"/kaggle/input/first-steps-in-data-science-new/test (4).csv\")","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:20.143197Z","iopub.execute_input":"2024-08-25T17:21:20.143783Z","iopub.status.idle":"2024-08-25T17:21:22.262883Z","shell.execute_reply.started":"2024-08-25T17:21:20.143737Z","shell.execute_reply":"2024-08-25T17:21:22.261709Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Data Cleaning**","metadata":{}},{"cell_type":"code","source":"train","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:22.264634Z","iopub.execute_input":"2024-08-25T17:21:22.265148Z","iopub.status.idle":"2024-08-25T17:21:22.301316Z","shell.execute_reply.started":"2024-08-25T17:21:22.265089Z","shell.execute_reply":"2024-08-25T17:21:22.300014Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train= train.drop(train.columns[0], axis=1)\ntest= test.drop(test.columns[0], axis=1)","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:22.304752Z","iopub.execute_input":"2024-08-25T17:21:22.305677Z","iopub.status.idle":"2024-08-25T17:21:22.334333Z","shell.execute_reply.started":"2024-08-25T17:21:22.305621Z","shell.execute_reply":"2024-08-25T17:21:22.333042Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train\n","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:22.335768Z","iopub.execute_input":"2024-08-25T17:21:22.336181Z","iopub.status.idle":"2024-08-25T17:21:22.373563Z","shell.execute_reply.started":"2024-08-25T17:21:22.336138Z","shell.execute_reply":"2024-08-25T17:21:22.372365Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **Scaling**","metadata":{}},{"cell_type":"code","source":"train = train.reset_index(drop=True)","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:22.375117Z","iopub.execute_input":"2024-08-25T17:21:22.375581Z","iopub.status.idle":"2024-08-25T17:21:22.386939Z","shell.execute_reply.started":"2024-08-25T17:21:22.375530Z","shell.execute_reply":"2024-08-25T17:21:22.385610Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = train.drop(columns=['target'])\ny = train['target']","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:22.388769Z","iopub.execute_input":"2024-08-25T17:21:22.389158Z","iopub.status.idle":"2024-08-25T17:21:22.400199Z","shell.execute_reply.started":"2024-08-25T17:21:22.389117Z","shell.execute_reply":"2024-08-25T17:21:22.399013Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scaler = MinMaxScaler(feature_range=(-1, 1))\nX = pd.DataFrame(scaler.fit_transform(X), columns=X.columns)\ntest_final = pd.DataFrame(scaler.transform(test), columns = test.columns)\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33, random_state = 42)","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:22.402178Z","iopub.execute_input":"2024-08-25T17:21:22.402780Z","iopub.status.idle":"2024-08-25T17:21:22.479732Z","shell.execute_reply.started":"2024-08-25T17:21:22.402726Z","shell.execute_reply":"2024-08-25T17:21:22.478684Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Spliting traning data**","metadata":{}},{"cell_type":"code","source":"X_train.shape,X_test.shape,y_train.shape,y_test.shape\n# X_train.dtypes,X_test.dtypes,y_train.dtypes,y_test.dtypes\n","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:22.481132Z","iopub.execute_input":"2024-08-25T17:21:22.481595Z","iopub.status.idle":"2024-08-25T17:21:22.490513Z","shell.execute_reply.started":"2024-08-25T17:21:22.481543Z","shell.execute_reply":"2024-08-25T17:21:22.489337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **creating model**","metadata":{}},{"cell_type":"markdown","source":"**Ridge**\nThis model solves a regression model where the loss function is the linear least squares function and regularization is given by the l2-norm. Also known as Ridge Regression or Tikhonov regularization. This estimator has built-in support for multi-variate regression (i.e., when y is a 2d-array of shape (n_samples, n_targets)). \nl2 is a more agressive regulation then l1 as it use beeta square as panelty\n\n**SGDRegressor**\nSGD stands for Stochastic Gradient Descent: the gradient of the loss is estimated each sample at a time and the model is updated along the way with a decreasing strength schedule (aka learning rate).\n\nThe regularizer is a penalty added to the loss function that shrinks model parameters towards the zero vector using either the squared euclidean norm L2 or the absolute norm L1 or a combination of both (Elastic Net). If the parameter update crosses the 0.0 value because of the regularizer, the update is truncated to 0.0 to allow for learning sparse models and achieve online feature selection","metadata":{}},{"cell_type":"code","source":"model_1=SGDRegressor(random_state=50)\nmodel_2=Ridge(alpha=0.03)\n\nestimators = [('sgd', model_1),('svr', model_2)]\nmodel_3= StackingRegressor(estimators=estimators,final_estimator=RandomForestRegressor(n_estimators=10,random_state=42))\nmodels=[model_1,model_2,model_3]\nmse=[]\nmodel_3.fit(X_train, y_train)\n","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:22.494540Z","iopub.execute_input":"2024-08-25T17:21:22.495051Z","iopub.status.idle":"2024-08-25T17:21:25.651021Z","shell.execute_reply.started":"2024-08-25T17:21:22.494992Z","shell.execute_reply":"2024-08-25T17:21:25.648939Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Checking accuracy**","metadata":{}},{"cell_type":"code","source":"accu = mean_squared_error(y_test,model_3.predict(X_test))\n\naccu","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:25.653226Z","iopub.execute_input":"2024-08-25T17:21:25.653901Z","iopub.status.idle":"2024-08-25T17:21:25.709526Z","shell.execute_reply.started":"2024-08-25T17:21:25.653834Z","shell.execute_reply":"2024-08-25T17:21:25.708069Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_preds=model_3.predict(test_final)\ntest_preds","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:25.712684Z","iopub.execute_input":"2024-08-25T17:21:25.713898Z","iopub.status.idle":"2024-08-25T17:21:25.829735Z","shell.execute_reply.started":"2024-08-25T17:21:25.713818Z","shell.execute_reply":"2024-08-25T17:21:25.828167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.read_csv(\"/kaggle/input/first-steps-in-data-science-new/sample.csv\")\nsubmission['target'] = test_preds\nsubmission.to_csv(\"/kaggle/working/submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:25.832230Z","iopub.execute_input":"2024-08-25T17:21:25.832861Z","iopub.status.idle":"2024-08-25T17:21:25.952366Z","shell.execute_reply.started":"2024-08-25T17:21:25.832790Z","shell.execute_reply":"2024-08-25T17:21:25.951280Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission","metadata":{"execution":{"iopub.status.busy":"2024-08-25T17:21:25.953723Z","iopub.execute_input":"2024-08-25T17:21:25.954214Z","iopub.status.idle":"2024-08-25T17:21:25.967639Z","shell.execute_reply.started":"2024-08-25T17:21:25.954157Z","shell.execute_reply":"2024-08-25T17:21:25.966272Z"},"trusted":true},"execution_count":null,"outputs":[]}]}