From 830627c471921b190a236bacf2719ab7f78a88ba Mon Sep 17 00:00:00 2001 From: ZaibN Date: Thu, 10 Oct 2024 23:52:53 -0500 Subject: [PATCH] Added my project files --- BostonHousing.csv | 507 +++++++++++++++++++++++++ ENR.ipynb | 938 ++++++++++++++++++++++++++++++++++++++++++++++ README.md.txt | 85 +++++ desktop.ini | 2 + 4 files changed, 1532 insertions(+) create mode 100644 BostonHousing.csv create mode 100644 ENR.ipynb create mode 100644 README.md.txt create mode 100644 desktop.ini diff --git a/BostonHousing.csv b/BostonHousing.csv new file mode 100644 index 0000000..bf9e58a --- /dev/null +++ b/BostonHousing.csv @@ -0,0 +1,507 @@ +crim,zn,indus,chas,nox,rm,age,dis,rad,tax,ptratio,b,lstat,medv +0.00632,18,2.31,0,0.538,6.575,65.2,4.09,1,296,15.3,396.9,4.98,24 +0.02731,0,7.07,0,0.469,6.421,78.9,4.9671,2,242,17.8,396.9,9.14,21.6 +0.02729,0,7.07,0,0.469,7.185,61.1,4.9671,2,242,17.8,392.83,4.03,34.7 +0.03237,0,2.18,0,0.458,6.998,45.8,6.0622,3,222,18.7,394.63,2.94,33.4 +0.06905,0,2.18,0,0.458,7.147,54.2,6.0622,3,222,18.7,396.9,5.33,36.2 +0.02985,0,2.18,0,0.458,6.43,58.7,6.0622,3,222,18.7,394.12,5.21,28.7 +0.08829,12.5,7.87,0,0.524,6.012,66.6,5.5605,5,311,15.2,395.6,12.43,22.9 +0.14455,12.5,7.87,0,0.524,6.172,96.1,5.9505,5,311,15.2,396.9,19.15,27.1 +0.21124,12.5,7.87,0,0.524,5.631,100,6.0821,5,311,15.2,386.63,29.93,16.5 +0.17004,12.5,7.87,0,0.524,6.004,85.9,6.5921,5,311,15.2,386.71,17.1,18.9 +0.22489,12.5,7.87,0,0.524,,94.3,6.3467,5,311,15.2,392.52,20.45,15 +0.11747,12.5,7.87,0,0.524,6.009,82.9,6.2267,5,311,15.2,396.9,13.27,18.9 +0.09378,12.5,7.87,0,0.524,5.889,39,5.4509,5,311,15.2,390.5,15.71,21.7 +0.62976,0,8.14,0,0.538,5.949,61.8,4.7075,4,307,21,396.9,8.26,20.4 +0.63796,0,8.14,0,0.538,6.096,84.5,4.4619,4,307,21,380.02,10.26,18.2 +0.62739,0,8.14,0,0.538,5.834,56.5,4.4986,4,307,21,395.62,8.47,19.9 +1.05393,0,8.14,0,0.538,5.935,29.3,4.4986,4,307,21,386.85,6.58,23.1 +0.7842,0,8.14,0,0.538,5.99,81.7,4.2579,4,307,21,386.75,14.67,17.5 +0.80271,0,8.14,0,0.538,5.456,36.6,3.7965,4,307,21,288.99,11.69,20.2 +0.7258,0,8.14,0,0.538,5.727,69.5,3.7965,4,307,21,390.95,11.28,18.2 +1.25179,0,8.14,0,0.538,5.57,98.1,3.7979,4,307,21,376.57,21.02,13.6 +0.85204,0,8.14,0,0.538,5.965,89.2,4.0123,4,307,21,392.53,13.83,19.6 +1.23247,0,8.14,0,0.538,6.142,91.7,3.9769,4,307,21,396.9,18.72,15.2 +0.98843,0,8.14,0,0.538,5.813,100,4.0952,4,307,21,394.54,19.88,14.5 +0.75026,0,8.14,0,0.538,5.924,94.1,4.3996,4,307,21,394.33,16.3,15.6 +0.84054,0,8.14,0,0.538,5.599,85.7,4.4546,4,307,21,303.42,16.51,13.9 +0.67191,0,8.14,0,0.538,5.813,90.3,4.682,4,307,21,376.88,14.81,16.6 +0.95577,0,8.14,0,0.538,6.047,88.8,4.4534,4,307,21,306.38,17.28,14.8 +0.77299,0,8.14,0,0.538,6.495,94.4,4.4547,4,307,21,387.94,12.8,18.4 +1.00245,0,8.14,0,0.538,6.674,87.3,4.239,4,307,21,380.23,11.98,21 +1.13081,0,8.14,0,0.538,5.713,94.1,4.233,4,307,21,360.17,22.6,12.7 +1.35472,0,8.14,0,0.538,6.072,100,4.175,4,307,21,376.73,13.04,14.5 +1.38799,0,8.14,0,0.538,5.95,82,3.99,4,307,21,232.6,27.71,13.2 +1.15172,0,8.14,0,0.538,5.701,95,3.7872,4,307,21,358.77,18.35,13.1 +1.61282,0,8.14,0,0.538,6.096,96.9,3.7598,4,307,21,248.31,20.34,13.5 +0.06417,0,5.96,0,0.499,,68.2,3.3603,5,279,19.2,396.9,9.68,18.9 +0.09744,0,5.96,0,0.499,5.841,61.4,3.3779,5,279,19.2,377.56,11.41,20 +0.08014,0,5.96,0,0.499,5.85,41.5,3.9342,5,279,19.2,396.9,8.77,21 +0.17505,0,5.96,0,0.499,5.966,30.2,3.8473,5,279,19.2,393.43,10.13,24.7 +0.02763,75,2.95,0,0.428,6.595,21.8,5.4011,3,252,18.3,395.63,4.32,30.8 +0.03359,75,2.95,0,0.428,7.024,15.8,5.4011,3,252,18.3,395.62,1.98,34.9 +0.12744,0,6.91,0,0.448,6.77,2.9,5.7209,3,233,17.9,385.41,4.84,26.6 +0.1415,0,6.91,0,0.448,6.169,6.6,5.7209,3,233,17.9,383.37,5.81,25.3 +0.15936,0,6.91,0,0.448,6.211,6.5,5.7209,3,233,17.9,394.46,7.44,24.7 +0.12269,0,6.91,0,0.448,6.069,40,5.7209,3,233,17.9,389.39,9.55,21.2 +0.17142,0,6.91,0,0.448,5.682,33.8,5.1004,3,233,17.9,396.9,10.21,19.3 +0.18836,0,6.91,0,0.448,5.786,33.3,5.1004,3,233,17.9,396.9,14.15,20 +0.22927,0,6.91,0,0.448,6.03,85.5,5.6894,3,233,17.9,392.74,18.8,16.6 +0.25387,0,6.91,0,0.448,5.399,95.3,5.87,3,233,17.9,396.9,30.81,14.4 +0.21977,0,6.91,0,0.448,5.602,62,6.0877,3,233,17.9,396.9,16.2,19.4 +0.08873,21,5.64,0,0.439,5.963,45.7,6.8147,4,243,16.8,395.56,13.45,19.7 +0.04337,21,5.64,0,0.439,6.115,63,6.8147,4,243,16.8,393.97,9.43,20.5 +0.0536,21,5.64,0,0.439,6.511,21.1,6.8147,4,243,16.8,396.9,5.28,25 +0.04981,21,5.64,0,0.439,5.998,21.4,6.8147,4,243,16.8,396.9,8.43,23.4 +0.0136,75,4,0,0.41,5.888,47.6,7.3197,3,469,21.1,396.9,14.8,18.9 +0.01311,90,1.22,0,0.403,7.249,21.9,8.6966,5,226,17.9,395.93,4.81,35.4 +0.02055,85,0.74,0,0.41,6.383,35.7,9.1876,2,313,17.3,396.9,5.77,24.7 +0.01432,100,1.32,0,0.411,6.816,40.5,8.3248,5,256,15.1,392.9,3.95,31.6 +0.15445,25,5.13,0,0.453,6.145,29.2,7.8148,8,284,19.7,390.68,6.86,23.3 +0.10328,25,5.13,0,0.453,5.927,47.2,6.932,8,284,19.7,396.9,9.22,19.6 +0.14932,25,5.13,0,0.453,5.741,66.2,7.2254,8,284,19.7,395.11,13.15,18.7 +0.17171,25,5.13,0,0.453,5.966,93.4,6.8185,8,284,19.7,378.08,14.44,16 +0.11027,25,5.13,0,0.453,6.456,67.8,7.2255,8,284,19.7,396.9,6.73,22.2 +0.1265,25,5.13,0,0.453,,43.4,7.9809,8,284,19.7,395.58,9.5,25 +0.01951,17.5,1.38,0,0.4161,7.104,59.5,9.2229,3,216,18.6,393.24,8.05,33 +0.03584,80,3.37,0,0.398,6.29,17.8,6.6115,4,337,16.1,396.9,4.67,23.5 +0.04379,80,3.37,0,0.398,5.787,31.1,6.6115,4,337,16.1,396.9,10.24,19.4 +0.05789,12.5,6.07,0,0.409,5.878,21.4,6.498,4,345,18.9,396.21,8.1,22 +0.13554,12.5,6.07,0,0.409,5.594,36.8,6.498,4,345,18.9,396.9,13.09,17.4 +0.12816,12.5,6.07,0,0.409,5.885,33,6.498,4,345,18.9,396.9,8.79,20.9 +0.08826,0,10.81,0,0.413,6.417,6.6,5.2873,4,305,19.2,383.73,6.72,24.2 +0.15876,0,10.81,0,0.413,5.961,17.5,5.2873,4,305,19.2,376.94,9.88,21.7 +0.09164,0,10.81,0,0.413,6.065,7.8,5.2873,4,305,19.2,390.91,5.52,22.8 +0.19539,0,10.81,0,0.413,6.245,6.2,5.2873,4,305,19.2,377.17,7.54,23.4 +0.07896,0,12.83,0,0.437,6.273,6,4.2515,5,398,18.7,394.92,6.78,24.1 +0.09512,0,12.83,0,0.437,6.286,45,4.5026,5,398,18.7,383.23,8.94,21.4 +0.10153,0,12.83,0,0.437,6.279,74.5,4.0522,5,398,18.7,373.66,11.97,20 +0.08707,0,12.83,0,0.437,6.14,45.8,4.0905,5,398,18.7,386.96,10.27,20.8 +0.05646,0,12.83,0,0.437,6.232,53.7,5.0141,5,398,18.7,386.4,12.34,21.2 +0.08387,0,12.83,0,0.437,5.874,36.6,4.5026,5,398,18.7,396.06,9.1,20.3 +0.04113,25,4.86,0,0.426,6.727,33.5,5.4007,4,281,19,396.9,5.29,28 +0.04462,25,4.86,0,0.426,6.619,70.4,5.4007,4,281,19,395.63,7.22,23.9 +0.03659,25,4.86,0,0.426,6.302,32.2,5.4007,4,281,19,396.9,6.72,24.8 +0.03551,25,4.86,0,0.426,6.167,46.7,5.4007,4,281,19,390.64,7.51,22.9 +0.05059,0,4.49,0,0.449,6.389,48,4.7794,3,247,18.5,396.9,9.62,23.9 +0.05735,0,4.49,0,0.449,6.63,56.1,4.4377,3,247,18.5,392.3,6.53,26.6 +0.05188,0,4.49,0,0.449,6.015,45.1,4.4272,3,247,18.5,395.99,12.86,22.5 +0.07151,0,4.49,0,0.449,6.121,56.8,3.7476,3,247,18.5,395.15,8.44,22.2 +0.0566,0,3.41,0,0.489,7.007,86.3,3.4217,2,270,17.8,396.9,5.5,23.6 +0.05302,0,3.41,0,0.489,7.079,63.1,3.4145,2,270,17.8,396.06,5.7,28.7 +0.04684,0,3.41,0,0.489,6.417,66.1,3.0923,2,270,17.8,392.18,8.81,22.6 +0.03932,0,3.41,0,0.489,6.405,73.9,3.0921,2,270,17.8,393.55,8.2,22 +0.04203,28,15.04,0,0.464,6.442,53.6,3.6659,4,270,18.2,395.01,8.16,22.9 +0.02875,28,15.04,0,0.464,6.211,28.9,3.6659,4,270,18.2,396.33,6.21,25 +0.04294,28,15.04,0,0.464,6.249,77.3,3.615,4,270,18.2,396.9,10.59,20.6 +0.12204,0,2.89,0,0.445,6.625,57.8,3.4952,2,276,18,357.98,6.65,28.4 +0.11504,0,2.89,0,0.445,,69.6,3.4952,2,276,18,391.83,11.34,21.4 +0.12083,0,2.89,0,0.445,8.069,76,3.4952,2,276,18,396.9,4.21,38.7 +0.08187,0,2.89,0,0.445,7.82,36.9,3.4952,2,276,18,393.53,3.57,43.8 +0.0686,0,2.89,0,0.445,7.416,62.5,3.4952,2,276,18,396.9,6.19,33.2 +0.14866,0,8.56,0,0.52,6.727,79.9,2.7778,5,384,20.9,394.76,9.42,27.5 +0.11432,0,8.56,0,0.52,6.781,71.3,2.8561,5,384,20.9,395.58,7.67,26.5 +0.22876,0,8.56,0,0.52,6.405,85.4,2.7147,5,384,20.9,70.8,10.63,18.6 +0.21161,0,8.56,0,0.52,6.137,87.4,2.7147,5,384,20.9,394.47,13.44,19.3 +0.1396,0,8.56,0,0.52,6.167,90,2.421,5,384,20.9,392.69,12.33,20.1 +0.13262,0,8.56,0,0.52,5.851,96.7,2.1069,5,384,20.9,394.05,16.47,19.5 +0.1712,0,8.56,0,0.52,5.836,91.9,2.211,5,384,20.9,395.67,18.66,19.5 +0.13117,0,8.56,0,0.52,6.127,85.2,2.1224,5,384,20.9,387.69,14.09,20.4 +0.12802,0,8.56,0,0.52,6.474,97.1,2.4329,5,384,20.9,395.24,12.27,19.8 +0.26363,0,8.56,0,0.52,6.229,91.2,2.5451,5,384,20.9,391.23,15.55,19.4 +0.10793,0,8.56,0,0.52,6.195,54.4,2.7778,5,384,20.9,393.49,13,21.7 +0.10084,0,10.01,0,0.547,6.715,81.6,2.6775,6,432,17.8,395.59,10.16,22.8 +0.12329,0,10.01,0,0.547,5.913,92.9,2.3534,6,432,17.8,394.95,16.21,18.8 +0.22212,0,10.01,0,0.547,6.092,95.4,2.548,6,432,17.8,396.9,17.09,18.7 +0.14231,0,10.01,0,0.547,6.254,84.2,2.2565,6,432,17.8,388.74,10.45,18.5 +0.17134,0,10.01,0,0.547,5.928,88.2,2.4631,6,432,17.8,344.91,15.76,18.3 +0.13158,0,10.01,0,0.547,6.176,72.5,2.7301,6,432,17.8,393.3,12.04,21.2 +0.15098,0,10.01,0,0.547,6.021,82.6,2.7474,6,432,17.8,394.51,10.3,19.2 +0.13058,0,10.01,0,0.547,5.872,73.1,2.4775,6,432,17.8,338.63,15.37,20.4 +0.14476,0,10.01,0,0.547,5.731,65.2,2.7592,6,432,17.8,391.5,13.61,19.3 +0.06899,0,25.65,0,0.581,5.87,69.7,2.2577,2,188,19.1,389.15,14.37,22 +0.07165,0,25.65,0,0.581,6.004,84.1,2.1974,2,188,19.1,377.67,14.27,20.3 +0.09299,0,25.65,0,0.581,5.961,92.9,2.0869,2,188,19.1,378.09,17.93,20.5 +0.15038,0,25.65,0,0.581,5.856,97,1.9444,2,188,19.1,370.31,25.41,17.3 +0.09849,0,25.65,0,0.581,5.879,95.8,2.0063,2,188,19.1,379.38,17.58,18.8 +0.16902,0,25.65,0,0.581,5.986,88.4,1.9929,2,188,19.1,385.02,14.81,21.4 +0.38735,0,25.65,0,0.581,5.613,95.6,1.7572,2,188,19.1,359.29,27.26,15.7 +0.25915,0,21.89,0,0.624,5.693,96,1.7883,4,437,21.2,392.11,17.19,16.2 +0.32543,0,21.89,0,0.624,6.431,98.8,1.8125,4,437,21.2,396.9,15.39,18 +0.88125,0,21.89,0,0.624,5.637,94.7,1.9799,4,437,21.2,396.9,18.34,14.3 +0.34006,0,21.89,0,0.624,6.458,98.9,2.1185,4,437,21.2,395.04,12.6,19.2 +1.19294,0,21.89,0,0.624,6.326,97.7,2.271,4,437,21.2,396.9,12.26,19.6 +0.59005,0,21.89,0,0.624,6.372,97.9,2.3274,4,437,21.2,385.76,11.12,23 +0.32982,0,21.89,0,0.624,5.822,95.4,2.4699,4,437,21.2,388.69,15.03,18.4 +0.97617,0,21.89,0,0.624,5.757,98.4,2.346,4,437,21.2,262.76,17.31,15.6 +0.55778,0,21.89,0,0.624,,98.2,2.1107,4,437,21.2,394.67,16.96,18.1 +0.32264,0,21.89,0,0.624,5.942,93.5,1.9669,4,437,21.2,378.25,16.9,17.4 +0.35233,0,21.89,0,0.624,6.454,98.4,1.8498,4,437,21.2,394.08,14.59,17.1 +0.2498,0,21.89,0,0.624,5.857,98.2,1.6686,4,437,21.2,392.04,21.32,13.3 +0.54452,0,21.89,0,0.624,6.151,97.9,1.6687,4,437,21.2,396.9,18.46,17.8 +0.2909,0,21.89,0,0.624,6.174,93.6,1.6119,4,437,21.2,388.08,24.16,14 +1.62864,0,21.89,0,0.624,5.019,100,1.4394,4,437,21.2,396.9,34.41,14.4 +3.32105,0,19.58,1,0.871,5.403,100,1.3216,5,403,14.7,396.9,26.82,13.4 +4.0974,0,19.58,0,0.871,5.468,100,1.4118,5,403,14.7,396.9,26.42,15.6 +2.77974,0,19.58,0,0.871,4.903,97.8,1.3459,5,403,14.7,396.9,29.29,11.8 +2.37934,0,19.58,0,0.871,6.13,100,1.4191,5,403,14.7,172.91,27.8,13.8 +2.15505,0,19.58,0,0.871,5.628,100,1.5166,5,403,14.7,169.27,16.65,15.6 +2.36862,0,19.58,0,0.871,4.926,95.7,1.4608,5,403,14.7,391.71,29.53,14.6 +2.33099,0,19.58,0,0.871,5.186,93.8,1.5296,5,403,14.7,356.99,28.32,17.8 +2.73397,0,19.58,0,0.871,5.597,94.9,1.5257,5,403,14.7,351.85,21.45,15.4 +1.6566,0,19.58,0,0.871,6.122,97.3,1.618,5,403,14.7,372.8,14.1,21.5 +1.49632,0,19.58,0,0.871,5.404,100,1.5916,5,403,14.7,341.6,13.28,19.6 +1.12658,0,19.58,1,0.871,5.012,88,1.6102,5,403,14.7,343.28,12.12,15.3 +2.14918,0,19.58,0,0.871,5.709,98.5,1.6232,5,403,14.7,261.95,15.79,19.4 +1.41385,0,19.58,1,0.871,6.129,96,1.7494,5,403,14.7,321.02,15.12,17 +3.53501,0,19.58,1,0.871,6.152,82.6,1.7455,5,403,14.7,88.01,15.02,15.6 +2.44668,0,19.58,0,0.871,5.272,94,1.7364,5,403,14.7,88.63,16.14,13.1 +1.22358,0,19.58,0,0.605,6.943,97.4,1.8773,5,403,14.7,363.43,4.59,41.3 +1.34284,0,19.58,0,0.605,6.066,100,1.7573,5,403,14.7,353.89,6.43,24.3 +1.42502,0,19.58,0,0.871,6.51,100,1.7659,5,403,14.7,364.31,7.39,23.3 +1.27346,0,19.58,1,0.605,6.25,92.6,1.7984,5,403,14.7,338.92,5.5,27 +1.46336,0,19.58,0,0.605,7.489,90.8,1.9709,5,403,14.7,374.43,1.73,50 +1.83377,0,19.58,1,0.605,7.802,98.2,2.0407,5,403,14.7,389.61,1.92,50 +1.51902,0,19.58,1,0.605,8.375,93.9,2.162,5,403,14.7,388.45,3.32,50 +2.24236,0,19.58,0,0.605,5.854,91.8,2.422,5,403,14.7,395.11,11.64,22.7 +2.924,0,19.58,0,0.605,6.101,93,2.2834,5,403,14.7,240.16,9.81,25 +2.01019,0,19.58,0,0.605,7.929,96.2,2.0459,5,403,14.7,369.3,3.7,50 +1.80028,0,19.58,0,0.605,5.877,79.2,2.4259,5,403,14.7,227.61,12.14,23.8 +2.3004,0,19.58,0,0.605,6.319,96.1,2.1,5,403,14.7,297.09,11.1,23.8 +2.44953,0,19.58,0,0.605,6.402,95.2,2.2625,5,403,14.7,330.04,11.32,22.3 +1.20742,0,19.58,0,0.605,5.875,94.6,2.4259,5,403,14.7,292.29,14.43,17.4 +2.3139,0,19.58,0,0.605,5.88,97.3,2.3887,5,403,14.7,348.13,12.03,19.1 +0.13914,0,4.05,0,0.51,5.572,88.5,2.5961,5,296,16.6,396.9,14.69,23.1 +0.09178,0,4.05,0,0.51,6.416,84.1,2.6463,5,296,16.6,395.5,9.04,23.6 +0.08447,0,4.05,0,0.51,5.859,68.7,2.7019,5,296,16.6,393.23,9.64,22.6 +0.06664,0,4.05,0,0.51,6.546,33.1,3.1323,5,296,16.6,390.96,5.33,29.4 +0.07022,0,4.05,0,0.51,6.02,47.2,3.5549,5,296,16.6,393.23,10.11,23.2 +0.05425,0,4.05,0,0.51,6.315,73.4,3.3175,5,296,16.6,395.6,6.29,24.6 +0.06642,0,4.05,0,0.51,6.86,74.4,2.9153,5,296,16.6,391.27,6.92,29.9 +0.0578,0,2.46,0,0.488,6.98,58.4,2.829,3,193,17.8,396.9,5.04,37.2 +0.06588,0,2.46,0,0.488,7.765,83.3,2.741,3,193,17.8,395.56,7.56,39.8 +0.06888,0,2.46,0,0.488,6.144,62.2,2.5979,3,193,17.8,396.9,9.45,36.2 +0.09103,0,2.46,0,0.488,7.155,92.2,2.7006,3,193,17.8,394.12,4.82,37.9 +0.10008,0,2.46,0,0.488,6.563,95.6,2.847,3,193,17.8,396.9,5.68,32.5 +0.08308,0,2.46,0,0.488,5.604,89.8,2.9879,3,193,17.8,391,13.98,26.4 +0.06047,0,2.46,0,0.488,6.153,68.8,3.2797,3,193,17.8,387.11,13.15,29.6 +0.05602,0,2.46,0,0.488,7.831,53.6,3.1992,3,193,17.8,392.63,4.45,50 +0.07875,45,3.44,0,0.437,6.782,41.1,3.7886,5,398,15.2,393.87,6.68,32 +0.12579,45,3.44,0,0.437,6.556,29.1,4.5667,5,398,15.2,382.84,4.56,29.8 +0.0837,45,3.44,0,0.437,7.185,38.9,4.5667,5,398,15.2,396.9,5.39,34.9 +0.09068,45,3.44,0,0.437,6.951,21.5,6.4798,5,398,15.2,377.68,5.1,37 +0.06911,45,3.44,0,0.437,6.739,30.8,6.4798,5,398,15.2,389.71,4.69,30.5 +0.08664,45,3.44,0,0.437,7.178,26.3,6.4798,5,398,15.2,390.49,2.87,36.4 +0.02187,60,2.93,0,0.401,6.8,9.9,6.2196,1,265,15.6,393.37,5.03,31.1 +0.01439,60,2.93,0,0.401,6.604,18.8,6.2196,1,265,15.6,376.7,4.38,29.1 +0.01381,80,0.46,0,0.422,7.875,32,5.6484,4,255,14.4,394.23,2.97,50 +0.04011,80,1.52,0,0.404,7.287,34.1,7.309,2,329,12.6,396.9,4.08,33.3 +0.04666,80,1.52,0,0.404,7.107,36.6,7.309,2,329,12.6,354.31,8.61,30.3 +0.03768,80,1.52,0,0.404,7.274,38.3,7.309,2,329,12.6,392.2,6.62,34.6 +0.0315,95,1.47,0,0.403,6.975,15.3,7.6534,3,402,17,396.9,4.56,34.9 +0.01778,95,1.47,0,0.403,7.135,13.9,7.6534,3,402,17,384.3,4.45,32.9 +0.03445,82.5,2.03,0,0.415,6.162,38.4,6.27,2,348,14.7,393.77,7.43,24.1 +0.02177,82.5,2.03,0,0.415,7.61,15.7,6.27,2,348,14.7,395.38,3.11,42.3 +0.0351,95,2.68,0,0.4161,7.853,33.2,5.118,4,224,14.7,392.78,3.81,48.5 +0.02009,95,2.68,0,0.4161,8.034,31.9,5.118,4,224,14.7,390.55,2.88,50 +0.13642,0,10.59,0,0.489,5.891,22.3,3.9454,4,277,18.6,396.9,10.87,22.6 +0.22969,0,10.59,0,0.489,6.326,52.5,4.3549,4,277,18.6,394.87,10.97,24.4 +0.25199,0,10.59,0,0.489,5.783,72.7,4.3549,4,277,18.6,389.43,18.06,22.5 +0.13587,0,10.59,1,0.489,6.064,59.1,4.2392,4,277,18.6,381.32,14.66,24.4 +0.43571,0,10.59,1,0.489,5.344,100,3.875,4,277,18.6,396.9,23.09,20 +0.17446,0,10.59,1,0.489,5.96,92.1,3.8771,4,277,18.6,393.25,17.27,21.7 +0.37578,0,10.59,1,0.489,5.404,88.6,3.665,4,277,18.6,395.24,23.98,19.3 +0.21719,0,10.59,1,0.489,5.807,53.8,3.6526,4,277,18.6,390.94,16.03,22.4 +0.14052,0,10.59,0,0.489,6.375,32.3,3.9454,4,277,18.6,385.81,9.38,28.1 +0.28955,0,10.59,0,0.489,5.412,9.8,3.5875,4,277,18.6,348.93,29.55,23.7 +0.19802,0,10.59,0,0.489,6.182,42.4,3.9454,4,277,18.6,393.63,9.47,25 +0.0456,0,13.89,1,0.55,5.888,56,3.1121,5,276,16.4,392.8,13.51,23.3 +0.07013,0,13.89,0,0.55,6.642,85.1,3.4211,5,276,16.4,392.78,9.69,28.7 +0.11069,0,13.89,1,0.55,5.951,93.8,2.8893,5,276,16.4,396.9,17.92,21.5 +0.11425,0,13.89,1,0.55,6.373,92.4,3.3633,5,276,16.4,393.74,10.5,23 +0.35809,0,6.2,1,0.507,6.951,88.5,2.8617,8,307,17.4,391.7,9.71,26.7 +0.40771,0,6.2,1,0.507,6.164,91.3,3.048,8,307,17.4,395.24,21.46,21.7 +0.62356,0,6.2,1,0.507,6.879,77.7,3.2721,8,307,17.4,390.39,9.93,27.5 +0.6147,0,6.2,0,0.507,6.618,80.8,3.2721,8,307,17.4,396.9,7.6,30.1 +0.31533,0,6.2,0,0.504,8.266,78.3,2.8944,8,307,17.4,385.05,4.14,44.8 +0.52693,0,6.2,0,0.504,8.725,83,2.8944,8,307,17.4,382,4.63,50 +0.38214,0,6.2,0,0.504,8.04,86.5,3.2157,8,307,17.4,387.38,3.13,37.6 +0.41238,0,6.2,0,0.504,7.163,79.9,3.2157,8,307,17.4,372.08,6.36,31.6 +0.29819,0,6.2,0,0.504,7.686,17,3.3751,8,307,17.4,377.51,3.92,46.7 +0.44178,0,6.2,0,0.504,6.552,21.4,3.3751,8,307,17.4,380.34,3.76,31.5 +0.537,0,6.2,0,0.504,5.981,68.1,3.6715,8,307,17.4,378.35,11.65,24.3 +0.46296,0,6.2,0,0.504,7.412,76.9,3.6715,8,307,17.4,376.14,5.25,31.7 +0.57529,0,6.2,0,0.507,8.337,73.3,3.8384,8,307,17.4,385.91,2.47,41.7 +0.33147,0,6.2,0,0.507,8.247,70.4,3.6519,8,307,17.4,378.95,3.95,48.3 +0.44791,0,6.2,1,0.507,6.726,66.5,3.6519,8,307,17.4,360.2,8.05,29 +0.33045,0,6.2,0,0.507,6.086,61.5,3.6519,8,307,17.4,376.75,10.88,24 +0.52058,0,6.2,1,0.507,6.631,76.5,4.148,8,307,17.4,388.45,9.54,25.1 +0.51183,0,6.2,0,0.507,7.358,71.6,4.148,8,307,17.4,390.07,4.73,31.5 +0.08244,30,4.93,0,0.428,6.481,18.5,6.1899,6,300,16.6,379.41,6.36,23.7 +0.09252,30,4.93,0,0.428,6.606,42.2,6.1899,6,300,16.6,383.78,7.37,23.3 +0.11329,30,4.93,0,0.428,6.897,54.3,6.3361,6,300,16.6,391.25,11.38,22 +0.10612,30,4.93,0,0.428,6.095,65.1,6.3361,6,300,16.6,394.62,12.4,20.1 +0.1029,30,4.93,0,0.428,6.358,52.9,7.0355,6,300,16.6,372.75,11.22,22.2 +0.12757,30,4.93,0,0.428,6.393,7.8,7.0355,6,300,16.6,374.71,5.19,23.7 +0.20608,22,5.86,0,0.431,5.593,76.5,7.9549,7,330,19.1,372.49,12.5,17.6 +0.19133,22,5.86,0,0.431,5.605,70.2,7.9549,7,330,19.1,389.13,18.46,18.5 +0.33983,22,5.86,0,0.431,6.108,34.9,8.0555,7,330,19.1,390.18,9.16,24.3 +0.19657,22,5.86,0,0.431,6.226,79.2,8.0555,7,330,19.1,376.14,10.15,20.5 +0.16439,22,5.86,0,0.431,6.433,49.1,7.8265,7,330,19.1,374.71,9.52,24.5 +0.19073,22,5.86,0,0.431,6.718,17.5,7.8265,7,330,19.1,393.74,6.56,26.2 +0.1403,22,5.86,0,0.431,6.487,13,7.3967,7,330,19.1,396.28,5.9,24.4 +0.21409,22,5.86,0,0.431,6.438,8.9,7.3967,7,330,19.1,377.07,3.59,24.8 +0.08221,22,5.86,0,0.431,6.957,6.8,8.9067,7,330,19.1,386.09,3.53,29.6 +0.36894,22,5.86,0,0.431,8.259,8.4,8.9067,7,330,19.1,396.9,3.54,42.8 +0.04819,80,3.64,0,0.392,6.108,32,9.2203,1,315,16.4,392.89,6.57,21.9 +0.03548,80,3.64,0,0.392,5.876,19.1,9.2203,1,315,16.4,395.18,9.25,20.9 +0.01538,90,3.75,0,0.394,7.454,34.2,6.3361,3,244,15.9,386.34,3.11,44 +0.61154,20,3.97,0,0.647,8.704,86.9,1.801,5,264,13,389.7,5.12,50 +0.66351,20,3.97,0,0.647,7.333,100,1.8946,5,264,13,383.29,7.79,36 +0.65665,20,3.97,0,0.647,6.842,100,2.0107,5,264,13,391.93,6.9,30.1 +0.54011,20,3.97,0,0.647,7.203,81.8,2.1121,5,264,13,392.8,9.59,33.8 +0.53412,20,3.97,0,0.647,7.52,89.4,2.1398,5,264,13,388.37,7.26,43.1 +0.52014,20,3.97,0,0.647,8.398,91.5,2.2885,5,264,13,386.86,5.91,48.8 +0.82526,20,3.97,0,0.647,7.327,94.5,2.0788,5,264,13,393.42,11.25,31 +0.55007,20,3.97,0,0.647,7.206,91.6,1.9301,5,264,13,387.89,8.1,36.5 +0.76162,20,3.97,0,0.647,5.56,62.8,1.9865,5,264,13,392.4,10.45,22.8 +0.7857,20,3.97,0,0.647,7.014,84.6,2.1329,5,264,13,384.07,14.79,30.7 +0.57834,20,3.97,0,0.575,8.297,67,2.4216,5,264,13,384.54,7.44,50 +0.5405,20,3.97,0,0.575,7.47,52.6,2.872,5,264,13,390.3,3.16,43.5 +0.09065,20,6.96,1,0.464,5.92,61.5,3.9175,3,223,18.6,391.34,13.65,20.7 +0.29916,20,6.96,0,0.464,5.856,42.1,4.429,3,223,18.6,388.65,13,21.1 +0.16211,20,6.96,0,0.464,6.24,16.3,4.429,3,223,18.6,396.9,6.59,25.2 +0.1146,20,6.96,0,0.464,6.538,58.7,3.9175,3,223,18.6,394.96,7.73,24.4 +0.22188,20,6.96,1,0.464,7.691,51.8,4.3665,3,223,18.6,390.77,6.58,35.2 +0.05644,40,6.41,1,0.447,6.758,32.9,4.0776,4,254,17.6,396.9,3.53,32.4 +0.09604,40,6.41,0,0.447,6.854,42.8,4.2673,4,254,17.6,396.9,2.98,32 +0.10469,40,6.41,1,0.447,7.267,49,4.7872,4,254,17.6,389.25,6.05,33.2 +0.06127,40,6.41,1,0.447,6.826,27.6,4.8628,4,254,17.6,393.45,4.16,33.1 +0.07978,40,6.41,0,0.447,6.482,32.1,4.1403,4,254,17.6,396.9,7.19,29.1 +0.21038,20,3.33,0,0.4429,6.812,32.2,4.1007,5,216,14.9,396.9,4.85,35.1 +0.03578,20,3.33,0,0.4429,7.82,64.5,4.6947,5,216,14.9,387.31,3.76,45.4 +0.03705,20,3.33,0,0.4429,6.968,37.2,5.2447,5,216,14.9,392.23,4.59,35.4 +0.06129,20,3.33,1,0.4429,7.645,49.7,5.2119,5,216,14.9,377.07,3.01,46 +0.01501,90,1.21,1,0.401,7.923,24.8,5.885,1,198,13.6,395.52,3.16,50 +0.00906,90,2.97,0,0.4,7.088,20.8,7.3073,1,285,15.3,394.72,7.85,32.2 +0.01096,55,2.25,0,0.389,6.453,31.9,7.3073,1,300,15.3,394.72,8.23,22 +0.01965,80,1.76,0,0.385,6.23,31.5,9.0892,1,241,18.2,341.6,12.93,20.1 +0.03871,52.5,5.32,0,0.405,6.209,31.3,7.3172,6,293,16.6,396.9,7.14,23.2 +0.0459,52.5,5.32,0,0.405,6.315,45.6,7.3172,6,293,16.6,396.9,7.6,22.3 +0.04297,52.5,5.32,0,0.405,6.565,22.9,7.3172,6,293,16.6,371.72,9.51,24.8 +0.03502,80,4.95,0,0.411,6.861,27.9,5.1167,4,245,19.2,396.9,3.33,28.5 +0.07886,80,4.95,0,0.411,7.148,27.7,5.1167,4,245,19.2,396.9,3.56,37.3 +0.03615,80,4.95,0,0.411,6.63,23.4,5.1167,4,245,19.2,396.9,4.7,27.9 +0.08265,0,13.92,0,0.437,6.127,18.4,5.5027,4,289,16,396.9,8.58,23.9 +0.08199,0,13.92,0,0.437,6.009,42.3,5.5027,4,289,16,396.9,10.4,21.7 +0.12932,0,13.92,0,0.437,6.678,31.1,5.9604,4,289,16,396.9,6.27,28.6 +0.05372,0,13.92,0,0.437,6.549,51,5.9604,4,289,16,392.85,7.39,27.1 +0.14103,0,13.92,0,0.437,5.79,58,6.32,4,289,16,396.9,15.84,20.3 +0.06466,70,2.24,0,0.4,6.345,20.1,7.8278,5,358,14.8,368.24,4.97,22.5 +0.05561,70,2.24,0,0.4,7.041,10,7.8278,5,358,14.8,371.58,4.74,29 +0.04417,70,2.24,0,0.4,6.871,47.4,7.8278,5,358,14.8,390.86,6.07,24.8 +0.03537,34,6.09,0,0.433,6.59,40.4,5.4917,7,329,16.1,395.75,9.5,22 +0.09266,34,6.09,0,0.433,6.495,18.4,5.4917,7,329,16.1,383.61,8.67,26.4 +0.1,34,6.09,0,0.433,6.982,17.7,5.4917,7,329,16.1,390.43,4.86,33.1 +0.05515,33,2.18,0,0.472,7.236,41.1,4.022,7,222,18.4,393.68,6.93,36.1 +0.05479,33,2.18,0,0.472,6.616,58.1,3.37,7,222,18.4,393.36,8.93,28.4 +0.07503,33,2.18,0,0.472,7.42,71.9,3.0992,7,222,18.4,396.9,6.47,33.4 +0.04932,33,2.18,0,0.472,6.849,70.3,3.1827,7,222,18.4,396.9,7.53,28.2 +0.49298,0,9.9,0,0.544,6.635,82.5,3.3175,4,304,18.4,396.9,4.54,22.8 +0.3494,0,9.9,0,0.544,5.972,76.7,3.1025,4,304,18.4,396.24,9.97,20.3 +2.63548,0,9.9,0,0.544,4.973,37.8,2.5194,4,304,18.4,350.45,12.64,16.1 +0.79041,0,9.9,0,0.544,6.122,52.8,2.6403,4,304,18.4,396.9,5.98,22.1 +0.26169,0,9.9,0,0.544,6.023,90.4,2.834,4,304,18.4,396.3,11.72,19.4 +0.26938,0,9.9,0,0.544,6.266,82.8,3.2628,4,304,18.4,393.39,7.9,21.6 +0.3692,0,9.9,0,0.544,6.567,87.3,3.6023,4,304,18.4,395.69,9.28,23.8 +0.25356,0,9.9,0,0.544,5.705,77.7,3.945,4,304,18.4,396.42,11.5,16.2 +0.31827,0,9.9,0,0.544,5.914,83.2,3.9986,4,304,18.4,390.7,18.33,17.8 +0.24522,0,9.9,0,0.544,5.782,71.7,4.0317,4,304,18.4,396.9,15.94,19.8 +0.40202,0,9.9,0,0.544,6.382,67.2,3.5325,4,304,18.4,395.21,10.36,23.1 +0.47547,0,9.9,0,0.544,6.113,58.8,4.0019,4,304,18.4,396.23,12.73,21 +0.1676,0,7.38,0,0.493,6.426,52.3,4.5404,5,287,19.6,396.9,7.2,23.8 +0.18159,0,7.38,0,0.493,6.376,54.3,4.5404,5,287,19.6,396.9,6.87,23.1 +0.35114,0,7.38,0,0.493,6.041,49.9,4.7211,5,287,19.6,396.9,7.7,20.4 +0.28392,0,7.38,0,0.493,5.708,74.3,4.7211,5,287,19.6,391.13,11.74,18.5 +0.34109,0,7.38,0,0.493,6.415,40.1,4.7211,5,287,19.6,396.9,6.12,25 +0.19186,0,7.38,0,0.493,6.431,14.7,5.4159,5,287,19.6,393.68,5.08,24.6 +0.30347,0,7.38,0,0.493,6.312,28.9,5.4159,5,287,19.6,396.9,6.15,23 +0.24103,0,7.38,0,0.493,6.083,43.7,5.4159,5,287,19.6,396.9,12.79,22.2 +0.06617,0,3.24,0,0.46,5.868,25.8,5.2146,4,430,16.9,382.44,9.97,19.3 +0.06724,0,3.24,0,0.46,6.333,17.2,5.2146,4,430,16.9,375.21,7.34,22.6 +0.04544,0,3.24,0,0.46,6.144,32.2,5.8736,4,430,16.9,368.57,9.09,19.8 +0.05023,35,6.06,0,0.4379,5.706,28.4,6.6407,1,304,16.9,394.02,12.43,17.1 +0.03466,35,6.06,0,0.4379,6.031,23.3,6.6407,1,304,16.9,362.25,7.83,19.4 +0.05083,0,5.19,0,0.515,6.316,38.1,6.4584,5,224,20.2,389.71,5.68,22.2 +0.03738,0,5.19,0,0.515,6.31,38.5,6.4584,5,224,20.2,389.4,6.75,20.7 +0.03961,0,5.19,0,0.515,6.037,34.5,5.9853,5,224,20.2,396.9,8.01,21.1 +0.03427,0,5.19,0,0.515,5.869,46.3,5.2311,5,224,20.2,396.9,9.8,19.5 +0.03041,0,5.19,0,0.515,5.895,59.6,5.615,5,224,20.2,394.81,10.56,18.5 +0.03306,0,5.19,0,0.515,6.059,37.3,4.8122,5,224,20.2,396.14,8.51,20.6 +0.05497,0,5.19,0,0.515,5.985,45.4,4.8122,5,224,20.2,396.9,9.74,19 +0.06151,0,5.19,0,0.515,5.968,58.5,4.8122,5,224,20.2,396.9,9.29,18.7 +0.01301,35,1.52,0,0.442,7.241,49.3,7.0379,1,284,15.5,394.74,5.49,32.7 +0.02498,0,1.89,0,0.518,6.54,59.7,6.2669,1,422,15.9,389.96,8.65,16.5 +0.02543,55,3.78,0,0.484,6.696,56.4,5.7321,5,370,17.6,396.9,7.18,23.9 +0.03049,55,3.78,0,0.484,6.874,28.1,6.4654,5,370,17.6,387.97,4.61,31.2 +0.03113,0,4.39,0,0.442,6.014,48.5,8.0136,3,352,18.8,385.64,10.53,17.5 +0.06162,0,4.39,0,0.442,5.898,52.3,8.0136,3,352,18.8,364.61,12.67,17.2 +0.0187,85,4.15,0,0.429,6.516,27.7,8.5353,4,351,17.9,392.43,6.36,23.1 +0.01501,80,2.01,0,0.435,6.635,29.7,8.344,4,280,17,390.94,5.99,24.5 +0.02899,40,1.25,0,0.429,6.939,34.5,8.7921,1,335,19.7,389.85,5.89,26.6 +0.06211,40,1.25,0,0.429,6.49,44.4,8.7921,1,335,19.7,396.9,5.98,22.9 +0.0795,60,1.69,0,0.411,6.579,35.9,10.7103,4,411,18.3,370.78,5.49,24.1 +0.07244,60,1.69,0,0.411,5.884,18.5,10.7103,4,411,18.3,392.33,7.79,18.6 +0.01709,90,2.02,0,0.41,6.728,36.1,12.1265,5,187,17,384.46,4.5,30.1 +0.04301,80,1.91,0,0.413,5.663,21.9,10.5857,4,334,22,382.8,8.05,18.2 +0.10659,80,1.91,0,0.413,5.936,19.5,10.5857,4,334,22,376.04,5.57,20.6 +8.98296,0,18.1,1,0.77,6.212,97.4,2.1222,24,666,20.2,377.73,17.6,17.8 +3.8497,0,18.1,1,0.77,6.395,91,2.5052,24,666,20.2,391.34,13.27,21.7 +5.20177,0,18.1,1,0.77,6.127,83.4,2.7227,24,666,20.2,395.43,11.48,22.7 +4.26131,0,18.1,0,0.77,6.112,81.3,2.5091,24,666,20.2,390.74,12.67,22.6 +4.54192,0,18.1,0,0.77,6.398,88,2.5182,24,666,20.2,374.56,7.79,25 +3.83684,0,18.1,0,0.77,6.251,91.1,2.2955,24,666,20.2,350.65,14.19,19.9 +3.67822,0,18.1,0,0.77,5.362,96.2,2.1036,24,666,20.2,380.79,10.19,20.8 +4.22239,0,18.1,1,0.77,5.803,89,1.9047,24,666,20.2,353.04,14.64,16.8 +3.47428,0,18.1,1,0.718,8.78,82.9,1.9047,24,666,20.2,354.55,5.29,21.9 +4.55587,0,18.1,0,0.718,3.561,87.9,1.6132,24,666,20.2,354.7,7.12,27.5 +3.69695,0,18.1,0,0.718,4.963,91.4,1.7523,24,666,20.2,316.03,14,21.9 +13.5222,0,18.1,0,0.631,3.863,100,1.5106,24,666,20.2,131.42,13.33,23.1 +4.89822,0,18.1,0,0.631,4.97,100,1.3325,24,666,20.2,375.52,3.26,50 +5.66998,0,18.1,1,0.631,6.683,96.8,1.3567,24,666,20.2,375.33,3.73,50 +6.53876,0,18.1,1,0.631,7.016,97.5,1.2024,24,666,20.2,392.05,2.96,50 +9.2323,0,18.1,0,0.631,6.216,100,1.1691,24,666,20.2,366.15,9.53,50 +8.26725,0,18.1,1,0.668,5.875,89.6,1.1296,24,666,20.2,347.88,8.88,50 +11.1081,0,18.1,0,0.668,4.906,100,1.1742,24,666,20.2,396.9,34.77,13.8 +18.4982,0,18.1,0,0.668,4.138,100,1.137,24,666,20.2,396.9,37.97,13.8 +19.6091,0,18.1,0,0.671,7.313,97.9,1.3163,24,666,20.2,396.9,13.44,15 +15.288,0,18.1,0,0.671,6.649,93.3,1.3449,24,666,20.2,363.02,23.24,13.9 +9.82349,0,18.1,0,0.671,6.794,98.8,1.358,24,666,20.2,396.9,21.24,13.3 +23.6482,0,18.1,0,0.671,6.38,96.2,1.3861,24,666,20.2,396.9,23.69,13.1 +17.8667,0,18.1,0,0.671,6.223,100,1.3861,24,666,20.2,393.74,21.78,10.2 +88.9762,0,18.1,0,0.671,6.968,91.9,1.4165,24,666,20.2,396.9,17.21,10.4 +15.8744,0,18.1,0,0.671,6.545,99.1,1.5192,24,666,20.2,396.9,21.08,10.9 +9.18702,0,18.1,0,0.7,5.536,100,1.5804,24,666,20.2,396.9,23.6,11.3 +7.99248,0,18.1,0,0.7,5.52,100,1.5331,24,666,20.2,396.9,24.56,12.3 +20.0849,0,18.1,0,0.7,4.368,91.2,1.4395,24,666,20.2,285.83,30.63,8.8 +16.8118,0,18.1,0,0.7,5.277,98.1,1.4261,24,666,20.2,396.9,30.81,7.2 +24.3938,0,18.1,0,0.7,4.652,100,1.4672,24,666,20.2,396.9,28.28,10.5 +22.5971,0,18.1,0,0.7,5,89.5,1.5184,24,666,20.2,396.9,31.99,7.4 +14.3337,0,18.1,0,0.7,4.88,100,1.5895,24,666,20.2,372.92,30.62,10.2 +8.15174,0,18.1,0,0.7,5.39,98.9,1.7281,24,666,20.2,396.9,20.85,11.5 +6.96215,0,18.1,0,0.7,5.713,97,1.9265,24,666,20.2,394.43,17.11,15.1 +5.29305,0,18.1,0,0.7,6.051,82.5,2.1678,24,666,20.2,378.38,18.76,23.2 +11.5779,0,18.1,0,0.7,5.036,97,1.77,24,666,20.2,396.9,25.68,9.7 +8.64476,0,18.1,0,0.693,6.193,92.6,1.7912,24,666,20.2,396.9,15.17,13.8 +13.3598,0,18.1,0,0.693,5.887,94.7,1.7821,24,666,20.2,396.9,16.35,12.7 +8.71675,0,18.1,0,0.693,6.471,98.8,1.7257,24,666,20.2,391.98,17.12,13.1 +5.87205,0,18.1,0,0.693,6.405,96,1.6768,24,666,20.2,396.9,19.37,12.5 +7.67202,0,18.1,0,0.693,5.747,98.9,1.6334,24,666,20.2,393.1,19.92,8.5 +38.3518,0,18.1,0,0.693,5.453,100,1.4896,24,666,20.2,396.9,30.59,5 +9.91655,0,18.1,0,0.693,5.852,77.8,1.5004,24,666,20.2,338.16,29.97,6.3 +25.0461,0,18.1,0,0.693,5.987,100,1.5888,24,666,20.2,396.9,26.77,5.6 +14.2362,0,18.1,0,0.693,6.343,100,1.5741,24,666,20.2,396.9,20.32,7.2 +9.59571,0,18.1,0,0.693,6.404,100,1.639,24,666,20.2,376.11,20.31,12.1 +24.8017,0,18.1,0,0.693,5.349,96,1.7028,24,666,20.2,396.9,19.77,8.3 +41.5292,0,18.1,0,0.693,5.531,85.4,1.6074,24,666,20.2,329.46,27.38,8.5 +67.9208,0,18.1,0,0.693,5.683,100,1.4254,24,666,20.2,384.97,22.98,5 +20.7162,0,18.1,0,0.659,4.138,100,1.1781,24,666,20.2,370.22,23.34,11.9 +11.9511,0,18.1,0,0.659,5.608,100,1.2852,24,666,20.2,332.09,12.13,27.9 +7.40389,0,18.1,0,0.597,5.617,97.9,1.4547,24,666,20.2,314.64,26.4,17.2 +14.4383,0,18.1,0,0.597,6.852,100,1.4655,24,666,20.2,179.36,19.78,27.5 +51.1358,0,18.1,0,0.597,5.757,100,1.413,24,666,20.2,2.6,10.11,15 +14.0507,0,18.1,0,0.597,6.657,100,1.5275,24,666,20.2,35.05,21.22,17.2 +18.811,0,18.1,0,0.597,4.628,100,1.5539,24,666,20.2,28.79,34.37,17.9 +28.6558,0,18.1,0,0.597,5.155,100,1.5894,24,666,20.2,210.97,20.08,16.3 +45.7461,0,18.1,0,0.693,4.519,100,1.6582,24,666,20.2,88.27,36.98,7 +18.0846,0,18.1,0,0.679,6.434,100,1.8347,24,666,20.2,27.25,29.05,7.2 +10.8342,0,18.1,0,0.679,6.782,90.8,1.8195,24,666,20.2,21.57,25.79,7.5 +25.9406,0,18.1,0,0.679,5.304,89.1,1.6475,24,666,20.2,127.36,26.64,10.4 +73.5341,0,18.1,0,0.679,5.957,100,1.8026,24,666,20.2,16.45,20.62,8.8 +11.8123,0,18.1,0,0.718,6.824,76.5,1.794,24,666,20.2,48.45,22.74,8.4 +11.0874,0,18.1,0,0.718,6.411,100,1.8589,24,666,20.2,318.75,15.02,16.7 +7.02259,0,18.1,0,0.718,6.006,95.3,1.8746,24,666,20.2,319.98,15.7,14.2 +12.0482,0,18.1,0,0.614,5.648,87.6,1.9512,24,666,20.2,291.55,14.1,20.8 +7.05042,0,18.1,0,0.614,6.103,85.1,2.0218,24,666,20.2,2.52,23.29,13.4 +8.79212,0,18.1,0,0.584,5.565,70.6,2.0635,24,666,20.2,3.65,17.16,11.7 +15.8603,0,18.1,0,0.679,5.896,95.4,1.9096,24,666,20.2,7.68,24.39,8.3 +12.2472,0,18.1,0,0.584,5.837,59.7,1.9976,24,666,20.2,24.65,15.69,10.2 +37.6619,0,18.1,0,0.679,6.202,78.7,1.8629,24,666,20.2,18.82,14.52,10.9 +7.36711,0,18.1,0,0.679,6.193,78.1,1.9356,24,666,20.2,96.73,21.52,11 +9.33889,0,18.1,0,0.679,6.38,95.6,1.9682,24,666,20.2,60.72,24.08,9.5 +8.49213,0,18.1,0,0.584,6.348,86.1,2.0527,24,666,20.2,83.45,17.64,14.5 +10.0623,0,18.1,0,0.584,6.833,94.3,2.0882,24,666,20.2,81.33,19.69,14.1 +6.44405,0,18.1,0,0.584,6.425,74.8,2.2004,24,666,20.2,97.95,12.03,16.1 +5.58107,0,18.1,0,0.713,6.436,87.9,2.3158,24,666,20.2,100.19,16.22,14.3 +13.9134,0,18.1,0,0.713,6.208,95,2.2222,24,666,20.2,100.63,15.17,11.7 +11.1604,0,18.1,0,0.74,6.629,94.6,2.1247,24,666,20.2,109.85,23.27,13.4 +14.4208,0,18.1,0,0.74,6.461,93.3,2.0026,24,666,20.2,27.49,18.05,9.6 +15.1772,0,18.1,0,0.74,6.152,100,1.9142,24,666,20.2,9.32,26.45,8.7 +13.6781,0,18.1,0,0.74,5.935,87.9,1.8206,24,666,20.2,68.95,34.02,8.4 +9.39063,0,18.1,0,0.74,5.627,93.9,1.8172,24,666,20.2,396.9,22.88,12.8 +22.0511,0,18.1,0,0.74,5.818,92.4,1.8662,24,666,20.2,391.45,22.11,10.5 +9.72418,0,18.1,0,0.74,6.406,97.2,2.0651,24,666,20.2,385.96,19.52,17.1 +5.66637,0,18.1,0,0.74,6.219,100,2.0048,24,666,20.2,395.69,16.59,18.4 +9.96654,0,18.1,0,0.74,6.485,100,1.9784,24,666,20.2,386.73,18.85,15.4 +12.8023,0,18.1,0,0.74,5.854,96.6,1.8956,24,666,20.2,240.52,23.79,10.8 +10.6718,0,18.1,0,0.74,6.459,94.8,1.9879,24,666,20.2,43.06,23.98,11.8 +6.28807,0,18.1,0,0.74,6.341,96.4,2.072,24,666,20.2,318.01,17.79,14.9 +9.92485,0,18.1,0,0.74,6.251,96.6,2.198,24,666,20.2,388.52,16.44,12.6 +9.32909,0,18.1,0,0.713,6.185,98.7,2.2616,24,666,20.2,396.9,18.13,14.1 +7.52601,0,18.1,0,0.713,6.417,98.3,2.185,24,666,20.2,304.21,19.31,13 +6.71772,0,18.1,0,0.713,6.749,92.6,2.3236,24,666,20.2,0.32,17.44,13.4 +5.44114,0,18.1,0,0.713,6.655,98.2,2.3552,24,666,20.2,355.29,17.73,15.2 +5.09017,0,18.1,0,0.713,6.297,91.8,2.3682,24,666,20.2,385.09,17.27,16.1 +8.24809,0,18.1,0,0.713,7.393,99.3,2.4527,24,666,20.2,375.87,16.74,17.8 +9.51363,0,18.1,0,0.713,6.728,94.1,2.4961,24,666,20.2,6.68,18.71,14.9 +4.75237,0,18.1,0,0.713,6.525,86.5,2.4358,24,666,20.2,50.92,18.13,14.1 +4.66883,0,18.1,0,0.713,5.976,87.9,2.5806,24,666,20.2,10.48,19.01,12.7 +8.20058,0,18.1,0,0.713,5.936,80.3,2.7792,24,666,20.2,3.5,16.94,13.5 +7.75223,0,18.1,0,0.713,6.301,83.7,2.7831,24,666,20.2,272.21,16.23,14.9 +6.80117,0,18.1,0,0.713,6.081,84.4,2.7175,24,666,20.2,396.9,14.7,20 +4.81213,0,18.1,0,0.713,6.701,90,2.5975,24,666,20.2,255.23,16.42,16.4 +3.69311,0,18.1,0,0.713,6.376,88.4,2.5671,24,666,20.2,391.43,14.65,17.7 +6.65492,0,18.1,0,0.713,6.317,83,2.7344,24,666,20.2,396.9,13.99,19.5 +5.82115,0,18.1,0,0.713,6.513,89.9,2.8016,24,666,20.2,393.82,10.29,20.2 +7.83932,0,18.1,0,0.655,6.209,65.4,2.9634,24,666,20.2,396.9,13.22,21.4 +3.1636,0,18.1,0,0.655,5.759,48.2,3.0665,24,666,20.2,334.4,14.13,19.9 +3.77498,0,18.1,0,0.655,5.952,84.7,2.8715,24,666,20.2,22.01,17.15,19 +4.42228,0,18.1,0,0.584,6.003,94.5,2.5403,24,666,20.2,331.29,21.32,19.1 +15.5757,0,18.1,0,0.58,5.926,71,2.9084,24,666,20.2,368.74,18.13,19.1 +13.0751,0,18.1,0,0.58,5.713,56.7,2.8237,24,666,20.2,396.9,14.76,20.1 +4.34879,0,18.1,0,0.58,6.167,84,3.0334,24,666,20.2,396.9,16.29,19.9 +4.03841,0,18.1,0,0.532,6.229,90.7,3.0993,24,666,20.2,395.33,12.87,19.6 +3.56868,0,18.1,0,0.58,6.437,75,2.8965,24,666,20.2,393.37,14.36,23.2 +4.64689,0,18.1,0,0.614,6.98,67.6,2.5329,24,666,20.2,374.68,11.66,29.8 +8.05579,0,18.1,0,0.584,5.427,95.4,2.4298,24,666,20.2,352.58,18.14,13.8 +6.39312,0,18.1,0,0.584,6.162,97.4,2.206,24,666,20.2,302.76,24.1,13.3 +4.87141,0,18.1,0,0.614,6.484,93.6,2.3053,24,666,20.2,396.21,18.68,16.7 +15.0234,0,18.1,0,0.614,5.304,97.3,2.1007,24,666,20.2,349.48,24.91,12 +10.233,0,18.1,0,0.614,6.185,96.7,2.1705,24,666,20.2,379.7,18.03,14.6 +14.3337,0,18.1,0,0.614,6.229,88,1.9512,24,666,20.2,383.32,13.11,21.4 +5.82401,0,18.1,0,0.532,6.242,64.7,3.4242,24,666,20.2,396.9,10.74,23 +5.70818,0,18.1,0,0.532,6.75,74.9,3.3317,24,666,20.2,393.07,7.74,23.7 +5.73116,0,18.1,0,0.532,7.061,77,3.4106,24,666,20.2,395.28,7.01,25 +2.81838,0,18.1,0,0.532,5.762,40.3,4.0983,24,666,20.2,392.92,10.42,21.8 +2.37857,0,18.1,0,0.583,5.871,41.9,3.724,24,666,20.2,370.73,13.34,20.6 +3.67367,0,18.1,0,0.583,6.312,51.9,3.9917,24,666,20.2,388.62,10.58,21.2 +5.69175,0,18.1,0,0.583,6.114,79.8,3.5459,24,666,20.2,392.68,14.98,19.1 +4.83567,0,18.1,0,0.583,5.905,53.2,3.1523,24,666,20.2,388.22,11.45,20.6 +0.15086,0,27.74,0,0.609,5.454,92.7,1.8209,4,711,20.1,395.09,18.06,15.2 +0.18337,0,27.74,0,0.609,5.414,98.3,1.7554,4,711,20.1,344.05,23.97,7 +0.20746,0,27.74,0,0.609,5.093,98,1.8226,4,711,20.1,318.43,29.68,8.1 +0.10574,0,27.74,0,0.609,5.983,98.8,1.8681,4,711,20.1,390.11,18.07,13.6 +0.11132,0,27.74,0,0.609,5.983,83.5,2.1099,4,711,20.1,396.9,13.35,20.1 +0.17331,0,9.69,0,0.585,5.707,54,2.3817,6,391,19.2,396.9,12.01,21.8 +0.27957,0,9.69,0,0.585,5.926,42.6,2.3817,6,391,19.2,396.9,13.59,24.5 +0.17899,0,9.69,0,0.585,5.67,28.8,2.7986,6,391,19.2,393.29,17.6,23.1 +0.2896,0,9.69,0,0.585,5.39,72.9,2.7986,6,391,19.2,396.9,21.14,19.7 +0.26838,0,9.69,0,0.585,5.794,70.6,2.8927,6,391,19.2,396.9,14.1,18.3 +0.23912,0,9.69,0,0.585,6.019,65.3,2.4091,6,391,19.2,396.9,12.92,21.2 +0.17783,0,9.69,0,0.585,5.569,73.5,2.3999,6,391,19.2,395.77,15.1,17.5 +0.22438,0,9.69,0,0.585,6.027,79.7,2.4982,6,391,19.2,396.9,14.33,16.8 +0.06263,0,11.93,0,0.573,6.593,69.1,2.4786,1,273,21,391.99,9.67,22.4 +0.04527,0,11.93,0,0.573,6.12,76.7,2.2875,1,273,21,396.9,9.08,20.6 +0.06076,0,11.93,0,0.573,6.976,91,2.1675,1,273,21,396.9,5.64,23.9 +0.10959,0,11.93,0,0.573,6.794,89.3,2.3889,1,273,21,393.45,6.48,22 +0.04741,0,11.93,0,0.573,6.03,80.8,2.505,1,273,21,396.9,7.88,11.9 diff --git a/ENR.ipynb b/ENR.ipynb new file mode 100644 index 0000000..953e1e8 --- /dev/null +++ b/ENR.ipynb @@ -0,0 +1,938 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 6, + "id": "00699835", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "crim 0\n", + "zn 0\n", + "indus 0\n", + "chas 0\n", + "nox 0\n", + "rm 5\n", + "age 0\n", + "dis 0\n", + "rad 0\n", + "tax 0\n", + "ptratio 0\n", + "b 0\n", + "lstat 0\n", + "medv 0\n", + "dtype: int64\n", + "Final coefficients (weights): [nan nan nan nan nan nan nan nan nan nan nan nan nan nan]\n" + ] + }, + { + "data": { + "image/png": "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smUmJibG2Gw2s2DBAkdd3i/lWrVqmaeeesqsXbvWvPfeeyYoKMi0adPGUffZZ58ZSSYuLs5pO4mJiUaSefvttx1tAwcONF5eXuaZZ54xa9asMfPmzTN169Y1ISEhJjU11VEXHR1tKlSoYMLCwsw777xjNm7caOLj482ZM2fMLbfcYipUqGCmTZtm1q5da4YPH24iIiJc/shs2LDBeHt7m1atWpmFCxeaNWvWmAEDBrjUFXaexhjz97//3UgyPXr0MIsWLTLr1q0zkydPNn//+98dNR999JGx2Wyme/fuZsmSJWbFihWmS5cuxsPD46qBKTU11VSuXNlUq1bNzJkzx6xatcr07dvX1KhR43eHpWrVqpkHHnjALF++3KxcudKcPHmywLDk7e1t6tWrZ15//XWzfv168/LLLxubzeb0B7gor0V+br31VlOlShXLmivlhaWaNWuakSNHmri4OLNs2TJjjDGLFi0yL7/8slm6dKmJj483CxYsMNHR0aZSpUqO958xxhw4cMD4+fmZyMhIM3/+fPPZZ5+Z9u3bO9bYKizl5OSYDh06GH9/fzN27FgTFxdn3nvvPVOtWjUTGRlpzp0756itWbOmqV69uomMjDQffvihWbt2rfnzn/9sJJn4+HhjjDHHjx8348ePN5LMtGnTHO/3K4PX5a4Wls6cOWM8PDzMfffd52gr7Hth0KBBxs/Pz0yePNls3LjRrFy50rz22mvmnXfecdSsWbPGeHl5mYYNG5q5c+eaDRs2mPfff9889NBDTmtst9tNgwYNzIcffmjWrVtnnnnmGVOmTBkzZswYR13ez194eLjp27ev+c9//mPmz59vatSoYW699VaTnZ3teL67777bhIaGOtYoISGhwDVC/ghLKHapqalGktMvACt5wWDIkCFO7Vu3bjWSzAsvvGCMMWbHjh1GkuMXfEH8/f3z/UOYnw4dOhhJLv/1F6RFixamcuXKJjMz09GWnZ1t6tevb6pXr25yc3ONMf/7pXzlnCZNmmQkmZSUFGOMMVlZWSYkJMT06dPHqe65554z3t7eJi0tzRhzKQRKMm+88YZT3ZEjR0zZsmXNc88952jL+0/y888/d6qdNm2akWRWr17t1D5o0CCXX/x169Y1d955p8nKynKq7dKli6lSpYpjT1hh5/njjz8aDw8P07dv3yuX1OHs2bOmQoUKpmvXrk7tOTk55o477jDNmjUrsK8xxowcOdLYbDaze/dup/Z27dr97rB0zz33uNQWFJYkmU8++cSptlOnTqZOnTqO+0V5LfLj6+trWrRo4dKek5NjsrKyHLfL91jmhaWXX37Z8rmNufQzfebMGePv72/eeustR3uvXr1M2bJlncJ5dna2qVu37lXD0vz5840ks3jxYqdtbd++3Ugy06dPd7Tl7eH66aefHG3nz583FSpUMIMGDXK0LVq0yOU1sHK1sGSMMSEhIaZevXqO+4V9L9SvX990797dcvu1a9c2tWvXNufPny+wpn379qZ69eomPT3dqf3JJ580vr6+5tSpU8aY//38derUyakub+/Y5YGoc+fOpmbNmpZjgzXOhkOp27hxoyRpwIABTu3NmjVTvXr19Pnnn0uSbrnlFgUFBWnkyJGaOXOmDh48eF3HefbsWW3dulUPPPCAypUr52j38PBQbGysfv75Z3377bdOff70pz853W/YsKEk6aeffpIkeXp6ql+/flqyZInS09MlXTqO6qOPPlK3bt1UsWJFSdLKlStls9nUr18/ZWdnO26hoaG64447XM7ICgoK0r333uvUFh8fr4CAAHXo0MGpvXfv3k73f/jhB33zzTfq27evJDltr1OnTkpJSSnyPOPi4pSTk6O//vWvKsjmzZt16tQp9e/f32mbubm56tChg7Zv366zZ88W2H/jxo26/fbbdccddzi19+nTp8A+hdWzZ89C19psNnXt2tWprWHDho61kAr/WhRVjx495OXl5bgNHTrUpSa/uZw5c0YjR47ULbfcIk9PT3l6eqpcuXI6e/asEhMTHXUbN27Ufffd53Q8j4eHh3r16nXVsa1cuVLly5dX165dnV7fRo0aKTQ01OVnuFGjRqpRo4bjvq+vr2677TandSwJ5rIzCIvyXmjWrJlWr16tUaNGadOmTTp//rzT83733Xc6dOiQHnvsMfn6+ua77d9++02ff/657r//fvn5+bls77ffftOWLVuc+lztvYfiQVhCsQsODpafn5+SkpIKVX/y5ElJUpUqVVweq1q1quNxu92u+Ph4NWrUSC+88IJuv/12Va1aVaNHj1ZWVtY1jTXvl3Fhxnr69GkZYwoc5+VzyZMXdvLkHeh++S/SRx99VL/99psWLFggSVq7dq1SUlL0yCOPOGqOHTsmY4xCQkKc/hh6eXlpy5YtSktLc9pOfmM8efJkvgetXtl27NgxSdKzzz7rsq0hQ4ZIksv2rjbPEydOSJKqV6/usv0rt/vAAw+4bHfixIkyxlhebuLkyZMKDQ11ac+vrajyW8+C+Pn5ufwx9PHx0W+//ea4X9jXoiA1atTI94/hG2+8oe3bt2v79u0F9s1vLn369NHUqVP1l7/8RWvXrtW2bdu0fft2VapUyeln9fes8bFjx/Trr7/K29vb5fVNTU296s+UdGkdrwwhxens2bM6efKk4/1clPfC22+/rZEjR2rZsmVq06aNKlSooO7du+v777+XVLj3wMmTJ5Wdna133nnHZXudOnVy2l6ewvyOwe/H2XAodh4eHrrvvvu0evVq/fzzz5a/HKT/vdlTUlJcao8eParg4GDH/QYNGmjBggUyxmjv3r2aO3euxo0bp7Jly2rUqFFFHmv79u317rvvatmyZVftHxQUpDJlyiglJcXlsaNHj0qS01gLKzIyUs2aNdOcOXM0aNAgzZkzR1WrVlVMTIyjJjg4WDabTV988YXTmYV5rmyz2WwuNRUrVtS2bdtc2lNTU53u583h+eefV48ePfIdc506da4+sctUqlRJkvTzzz8rLCws35q87b7zzjsFnmVmFSYqVqzoMhfJdX7Spb0UFy5ccGlPS0vL9zXMbz1/j8K+FgVp166dpk2bph07djid1VW7du2r9r1yLunp6Vq5cqVGjx7t9B64cOGCSzgtyhpfKTg4WBUrVizwLNiAgICrPkdJ+89//qOcnBzH9aGK8l7w9/fX2LFjNXbsWB07dsyxl6lr16765ptvnN4DBQkKCnLsqS5oL2xERMS1Tg+/A3uWUCKef/55GWM0cOBAXbx40eXxrKwsrVixQpIcHxf9+9//dqrZvn27EhMT871OjM1m0x133KE333xT5cuXd7pwZFH+++zWrZsaNGigCRMmaP/+/fnWrF27VufOnZO/v7+aN2+uJUuWOD1/bm6u/v3vf6t69eq67bbbCrXdKz3yyCPaunWrvvzyS61YsUL9+/eXh4eH4/EuXbrIGKNffvlFTZs2dbk1aNDgqtuIjo5WZmamVq9e7dSet0crT506dXTrrbdqz549+W6radOmRf7DFhMTIw8PD82YMaPAmrvvvlvly5fXwYMHC9yut7d3gf3btGmjAwcOaM+ePU7t8+bNc6kNDw/X3r17ndq+++47l48XS0phX4uCDB8+XH5+fvrrX/+qzMzM3zUWm80mY4xL4H7vvfeUk5Pj1NamTRt9/vnnjj0u0qWPjRcuXHjV7XTp0kUnT55UTk5Ovq9tUQO4VLx7UZKTk/Xss8/Kbrdr0KBBkq79vRASEqIBAwaod+/e+vbbb3Xu3Dnddtttql27tt5///18g7p0aa9kmzZttGvXLjVs2DDf7eW3x+1qSnqP3B8Be5ZQIqKiojRjxgwNGTJETZo00RNPPKHbb79dWVlZ2rVrl959913Vr19fXbt2VZ06dfT444/rnXfeUZkyZdSxY0cdPnxYf//73xUWFqbhw4dLunTMw/Tp09W9e3fVqlVLxhgtWbJEv/76q9q1a+fYdoMGDbRp0yatWLFCVapUUUBAQIG/iD08PLR06VLFxMQoKipKTzzxhNq0aSN/f3/99NNP+vTTT7VixQqdPn1akjRhwgS1a9dObdq00bPPPitvb29Nnz5d+/fv1/z58695D0Tv3r01YsQI9e7dWxcuXHA5fuvuu+/W448/rkceeUQ7duzQPffcI39/f6WkpOjLL79UgwYN9MQTT1huo3///nrzzTfVr18/vfrqq7rlllu0evVqrV27VpJUpsz//nf617/+pY4dO6p9+/YaMGCAqlWrplOnTikxMVFff/21Fi1aVKT5hYeH64UXXtArr7yi8+fPq3fv3rLb7Tp48KDS0tIcFwJ955131L9/f506dUoPPPCAKleurBMnTmjPnj06ceKEZdgaNmyY3n//fXXu3FmvvvqqQkJC9PHHH+ubb75xqY2NjVW/fv00ZMgQ9ezZUz/99JMmTZrk+O+/pBXltchP7dq1NX/+fPXu3dvx2uddlPL48eNat26dJDldf6kggYGBuueee/TPf/5TwcHBCg8PV3x8vGbPnq3y5cs71b700ktavny57r33Xr388svy8/PTtGnTLI8ly/PQQw/p448/VqdOnfT000+rWbNm8vLy0s8//6yNGzeqW7duuv/++6/6PJfLuy7au+++q4CAAPn6+ioiIuKqgWL//v2OY4GOHz+uL774QnPmzHH8Prj856Cw74XmzZurS5cuatiwoYKCgpSYmKiPPvpIUVFRjmtZTZs2TV27dlWLFi00fPhw1ahRQ8nJyVq7dq0+/vhjSdJbb72l//u//1OrVq30xBNPKDw8XJmZmfrhhx+0YsUKbdiwoUhrJF36nbhkyRLNmDFDTZo0UZkyZZz2SKIQSu3Qcvwh7N692/Tv39/UqFHDeHt7G39/f3PnnXeal19+2ekU37zrLN12223Gy8vLBAcHm379+jldZ+mbb74xvXv3NrVr1zZly5Y1drvdNGvWzMydO9dlm3fffbfx8/O76nWW8vz666/mlVdeMY0bNzblypUzXl5epkaNGqZfv37mq6++cqrNu86Sv7+/KVu2rGnRooVZsWKFU01BZ93kdwZVnj59+hhJ5u677y5wnO+//75p3ry5Y9u1a9c2Dz/8sNmxY4ejJu86S/lJTk42PXr0MOXKlTMBAQGmZ8+eZtWqVUaS+eyzz5xq9+zZYx588EFTuXJl4+XlZUJDQ829995rZs6cec3z/PDDD81dd91lfH19Tbly5cydd97pcuZXfHy86dy5s6lQoYLx8vIy1apVM507dzaLFi0qcF3yHDx40LRr1874+vqaChUqmMcee8xxeYbLx5Kbm2smTZpkatWqZXx9fU3Tpk3Nhg0bCjwbLr9tW11n6Up5Z6JdriivRUEOHTpknnrqKVOnTh1TtmxZ4+PjY2rWrGn+/Oc/m6VLlzrOzrx8DJdfCiDPzz//bHr27GmCgoJMQECA6dChg9m/f3++Zw1+9dVXpkWLFsbHx8eEhoaav/3tb4W+zlJWVpZ5/fXXHdcKK1eunKlbt64ZNGiQ+f777x11eddZulJ+zzllyhQTERFhPDw8Cn2dpbybt7e3qVy5somOjjbjx48v8LIDhXkvjBo1yjRt2tRxLaZatWqZ4cOHO85ozZOQkGA6duxo7Ha78fHxMbVr1zbDhw93qklKSjKPPvqoqVatmvHy8jKVKlUyLVu2NK+++qqjpqCfzaSkJJd1OHXqlHnggQdM+fLljc1m4zpL18BmzHX68iAAN6Tx48frpZdeUnJy8lWPL0PJ4rUAbkx8DAf8gUydOlWSHN+LtWHDBr399tvq168ff5yvM14LwH0QloA/ED8/P7355ps6fPiwLly4oBo1amjkyJF66aWXSntofzi8FoD74GM4AAAAC1w6AAAAwAJhCQAAwAJhCQAAwAIHeBeD3NxcHT16VAEBAcX+tQgAAKBkGGOUmZmpqlWrWl4MlrBUDI4ePVrg910BAIAb25EjRywv2UFYKgZ53w105MiRQn29AAAAKH0ZGRkKCwu76vddEpaKQd5Hb4GBgYQlAADczNUOoeEAbwAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAuEJQAAAAtuF5amT5+uiIgI+fr6qkmTJvriiy8s6+Pj49WkSRP5+vqqVq1amjlzZoG1CxYskM1mU/fu3Yt51AAAwF25VVhauHChhg0bphdffFG7du1Sq1at1LFjRyUnJ+dbn5SUpE6dOqlVq1batWuXXnjhBQ0dOlSLFy92qf3pp5/07LPPqlWrViU9DQAA4EZsxhhT2oMorObNm6tx48aaMWOGo61evXrq3r27JkyY4FI/cuRILV++XImJiY62wYMHa8+ePUpISHC05eTkKDo6Wo888oi++OIL/frrr1q2bFmhx5WRkSG73a709HQFBgZe2+QAAMB1Vdi/326zZ+nixYvauXOnYmJinNpjYmK0efPmfPskJCS41Ldv3147duxQVlaWo23cuHGqVKmSHnvsseIfOAAAcGuepT2AwkpLS1NOTo5CQkKc2kNCQpSamppvn9TU1Hzrs7OzlZaWpipVquirr77S7NmztXv37kKP5cKFC7pw4YLjfkZGRuEnAgAA3Irb7FnKY7PZnO4bY1zarlaf156Zmal+/fpp1qxZCg4OLvQYJkyYILvd7riFhYUVYQYAAMCduM2epeDgYHl4eLjsRTp+/LjL3qM8oaGh+dZ7enqqYsWKOnDggA4fPqyuXbs6Hs/NzZUkeXp66ttvv1Xt2rVdnvf555/XiBEjHPczMjIITAAA3KTcJix5e3urSZMmiouL0/333+9oj4uLU7du3fLtExUVpRUrVji1rVu3Tk2bNpWXl5fq1q2rffv2OT3+0ksvKTMzU2+99VaBAcjHx0c+Pj6/c0YAAMAduE1YkqQRI0YoNjZWTZs2VVRUlN59910lJydr8ODBki7t8fnll1/04YcfSrp05tvUqVM1YsQIDRw4UAkJCZo9e7bmz58vSfL19VX9+vWdtlG+fHlJcmkHAAB/TG4Vlnr16qWTJ09q3LhxSklJUf369bVq1SrVrFlTkpSSkuJ0zaWIiAitWrVKw4cP17Rp01S1alW9/fbb6tmzZ2lNAQAAuBm3us7SjYrrLAEA4H5uuussAQAAlAbCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAXCEgAAgAW3C0vTp09XRESEfH191aRJE33xxReW9fHx8WrSpIl8fX1Vq1YtzZw50+nxWbNmqVWrVgoKClJQUJDatm2rbdu2leQUAACAG3GrsLRw4UINGzZML774onbt2qVWrVqpY8eOSk5Ozrc+KSlJnTp1UqtWrbRr1y698MILGjp0qBYvXuyo2bRpk3r37q2NGzcqISFBNWrUUExMjH755ZfrNS0AAHADsxljTGkPorCaN2+uxo0ba8aMGY62evXqqXv37powYYJL/ciRI7V8+XIlJiY62gYPHqw9e/YoISEh323k5OQoKChIU6dO1cMPP1yocWVkZMhutys9PV2BgYFFnBUAACgNhf377TZ7li5evKidO3cqJibGqT0mJkabN2/Ot09CQoJLffv27bVjxw5lZWXl2+fcuXPKyspShQoVimfgAADArXmW9gAKKy0tTTk5OQoJCXFqDwkJUWpqar59UlNT863Pzs5WWlqaqlSp4tJn1KhRqlatmtq2bVvgWC5cuKALFy447mdkZBRlKgAAwI24zZ6lPDabzem+Mcal7Wr1+bVL0qRJkzR//nwtWbJEvr6+BT7nhAkTZLfbHbewsLCiTAEAALgRtwlLwcHB8vDwcNmLdPz4cZe9R3lCQ0Pzrff09FTFihWd2l9//XWNHz9e69atU8OGDS3H8vzzzys9Pd1xO3LkyDXMCAAAuAO3CUve3t5q0qSJ4uLinNrj4uLUsmXLfPtERUW51K9bt05NmzaVl5eXo+2f//ynXnnlFa1Zs0ZNmza96lh8fHwUGBjodAMAADcntwlLkjRixAi99957ev/995WYmKjhw4crOTlZgwcPlnRpj8/lZ7ANHjxYP/30k0aMGKHExES9//77mj17tp599llHzaRJk/TSSy/p/fffV3h4uFJTU5WamqozZ85c9/kBAIAbj9sc4C1JvXr10smTJzVu3DilpKSofv36WrVqlWrWrClJSklJcbrmUkREhFatWqXhw4dr2rRpqlq1qt5++2317NnTUTN9+nRdvHhRDzzwgNO2Ro8erTFjxlyXeQEAgBuXW11n6UbFdZYAAHA/N911lgAAAEoDYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMACYQkAAMDCNYWlcePG6dy5cy7t58+f17hx4373oAAAAG4UNmOMKWonDw8PpaSkqHLlyk7tJ0+eVOXKlZWTk1NsA3QHGRkZstvtSk9PV2BgYGkPBwAAFEJh/35f054lY4xsNptL+549e1ShQoVreUoAAIAbkmdRioOCgmSz2WSz2XTbbbc5BaacnBydOXNGgwcPLvZBAgAAlJYihaUpU6bIGKNHH31UY8eOld1udzzm7e2t8PBwRUVFFfsgAQAASkuRwlL//v0lSREREbr77rvl6Vmk7gAAAG7nmo5ZCggIUGJiouP+Z599pu7du+uFF17QxYsXi21wAAAApe2awtKgQYP03XffSZJ+/PFH9erVS35+flq0aJGee+65Yh0gAABAabqmsPTdd9+pUaNGkqRFixYpOjpa8+bN09y5c7V48eLiHB8AAECpuuZLB+Tm5kqS1q9fr06dOkmSwsLClJaWVnyjy8f06dMVEREhX19fNWnSRF988YVlfXx8vJo0aSJfX1/VqlVLM2fOdKlZvHixIiMj5ePjo8jISC1durSkhg8AANzMNYWlpk2b6tVXX9VHH32k+Ph4de7cWZKUlJSkkJCQYh3g5RYuXKhhw4bpxRdf1K5du9SqVSt17NhRycnJ+dYnJSWpU6dOatWqlXbt2qUXXnhBQ4cOddr7lZCQoF69eik2NlZ79uxRbGysHnzwQW3durXE5gEAANzHNV3Be+/everbt6+Sk5M1YsQIjR49WpL01FNP6eTJk5o3b16xD1SSmjdvrsaNG2vGjBmOtnr16ql79+6aMGGCS/3IkSO1fPlyp4PRBw8erD179ighIUGS1KtXL2VkZGj16tWOmg4dOigoKEjz588v1Li4gjcAAO6nsH+/r+nc/4YNG2rfvn0u7f/85z/l4eFxLU95VRcvXtTOnTs1atQop/aYmBht3rw53z4JCQmKiYlxamvfvr1mz56trKwseXl5KSEhQcOHD3epmTJlSoFjuXDhgi5cuOC4n5GRUcTZAAAAd/G7LpS0c+dOJSYmymazqV69emrcuHFxjctFWlqacnJyXD7mCwkJUWpqar59UlNT863Pzs5WWlqaqlSpUmBNQc8pSRMmTNDYsWOvcSYAAMCdXFNYOn78uHr16qX4+HiVL19exhilp6erTZs2WrBggSpVqlTc43S48jvpCvqeOqv6K9uL+pzPP/+8RowY4bifkZGhsLCwqw8eAAC4nWs6wPupp55SZmamDhw4oFOnTun06dPav3+/MjIyNHTo0OIeoyQpODhYHh4eLnt8jh8/XuBB5aGhofnWe3p6qmLFipY1Vgeq+/j4KDAw0OkGAABuTtcUltasWaMZM2aoXr16jrbIyEhNmzbN6UDp4uTt7a0mTZooLi7OqT0uLk4tW7bMt09UVJRL/bp169S0aVN5eXlZ1hT0nAAA4I/lmj6Gy83NdYSNy3l5eTmuv1QSRowYodjYWDVt2lRRUVF69913lZycrMGDB0u69PHYL7/8og8//FDSpTPfpk6dqhEjRmjgwIFKSEjQ7Nmznc5ye/rpp3XPPfdo4sSJ6tatmz777DOtX79eX375ZYnNAwAAuI9r2rN077336umnn9bRo0cdbb/88ouGDx+u++67r9gGd6VevXppypQpGjdunBo1aqT//ve/WrVqlWrWrClJSklJcbrmUkREhFatWqVNmzapUaNGeuWVV/T222+rZ8+ejpqWLVtqwYIFmjNnjho2bKi5c+dq4cKFat68eYnNAwAAuI9rus7SkSNH1K1bN+3fv19hYWGy2WxKTk5WgwYN9Nlnn6l69eolMdYbFtdZAgDA/ZTodZbCwsL09ddfKy4uTt98842MMYqMjFTbtm2vecAAAAA3oiJ9DLdhwwZFRkY6LsLYrl07PfXUUxo6dKjuuusu3X777Vf9rjYAAAB3UqSwNGXKFA0cODDfXVV2u12DBg3S5MmTi21wAAAApa1IYWnPnj3q0KFDgY/HxMRo586dv3tQAAAAN4oihaVjx47le8mAPJ6enjpx4sTvHhQAAMCNokhhqVq1avl+gW6evXv3qkqVKr97UAAAADeKIoWlTp066eWXX9Zvv/3m8tj58+c1evRodenSpdgGBwAAUNqKdJ2lY8eOqXHjxvLw8NCTTz6pOnXqyGazKTExUdOmTVNOTo6+/vpry+9VuxlxnSUAANxPiVxnKSQkRJs3b9YTTzyh559/Xnk5y2azqX379po+ffofLigBAICbW5EvSlmzZk2tWrVKp0+f1g8//CBjjG699VYFBQWVxPgAAABK1TVdwVuSgoKCdNdddxXnWAAAAG441/RFugAAAH8UhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALhCUAAAALbhOWTp8+rdjYWNntdtntdsXGxurXX3+17GOM0ZgxY1S1alWVLVtWrVu31oEDBxyPnzp1Sk899ZTq1KkjPz8/1ahRQ0OHDlV6enoJzwYAALgLtwlLffr00e7du7VmzRqtWbNGu3fvVmxsrGWfSZMmafLkyZo6daq2b9+u0NBQtWvXTpmZmZKko0eP6ujRo3r99de1b98+zZ07V2vWrNFjjz12PaYEAADcgM0YY0p7EFeTmJioyMhIbdmyRc2bN5ckbdmyRVFRUfrmm29Up04dlz7GGFWtWlXDhg3TyJEjJUkXLlxQSEiIJk6cqEGDBuW7rUWLFqlfv346e/asPD09CzW+jIwM2e12paenKzAw8BpnCQAArqfC/v12iz1LCQkJstvtjqAkSS1atJDdbtfmzZvz7ZOUlKTU1FTFxMQ42nx8fBQdHV1gH0mOBbMKShcuXFBGRobTDQAA3JzcIiylpqaqcuXKLu2VK1dWampqgX0kKSQkxKk9JCSkwD4nT57UK6+8UuBepzwTJkxwHDtlt9sVFhZWmGkAAAA3VKphacyYMbLZbJa3HTt2SJJsNptLf2NMvu2Xu/LxgvpkZGSoc+fOioyM1OjRoy2f8/nnn1d6errjduTIkatNFQAAuKnCHZRTQp588kk99NBDljXh4eHau3evjh075vLYiRMnXPYc5QkNDZV0aQ9TlSpVHO3Hjx936ZOZmakOHTqoXLlyWrp0qby8vCzH5OPjIx8fH8saAABwcyjVsBQcHKzg4OCr1kVFRSk9PV3btm1Ts2bNJElbt25Venq6WrZsmW+fiIgIhYaGKi4uTnfeeack6eLFi4qPj9fEiRMddRkZGWrfvr18fHy0fPly+fr6FsPMAADAzcItjlmqV6+eOnTooIEDB2rLli3asmWLBg4cqC5dujidCVe3bl0tXbpU0qWP34YNG6bx48dr6dKl2r9/vwYMGCA/Pz/16dNH0qU9SjExMTp79qxmz56tjIwMpaamKjU1VTk5OaUyVwAAcGMp1T1LRfHxxx9r6NChjrPb/vSnP2nq1KlONd9++63TBSWfe+45nT9/XkOGDNHp06fVvHlzrVu3TgEBAZKknTt3auvWrZKkW265xem5kpKSFB4eXoIzAgAA7sAtrrN0o+M6SwAAuJ+b6jpLAAAApYWwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYIGwBAAAYMFtwtLp06cVGxsru90uu92u2NhY/frrr5Z9jDEaM2aMqlatqrJly6p169Y6cOBAgbUdO3aUzWbTsmXLin8CAADALblNWOrTp492796tNWvWaM2aNdq9e7diY2Mt+0yaNEmTJ0/W1KlTtX37doWGhqpdu3bKzMx0qZ0yZYpsNltJDR8AALgpz9IeQGEkJiZqzZo12rJli5o3by5JmjVrlqKiovTtt9+qTp06Ln2MMZoyZYpefPFF9ejRQ5L0wQcfKCQkRPPmzdOgQYMctXv27NHkyZO1fft2ValS5fpMCgAAuAW32LOUkJAgu93uCEqS1KJFC9ntdm3evDnfPklJSUpNTVVMTIyjzcfHR9HR0U59zp07p969e2vq1KkKDQ0t1HguXLigjIwMpxsAALg5uUVYSk1NVeXKlV3aK1eurNTU1AL7SFJISIhTe0hIiFOf4cOHq2XLlurWrVuhxzNhwgTHsVN2u11hYWGF7gsAANxLqYalMWPGyGazWd527NghSfkeT2SMuepxRlc+fnmf5cuXa8OGDZoyZUqRxv38888rPT3dcTty5EiR+gMAAPdRqscsPfnkk3rooYcsa8LDw7V3714dO3bM5bETJ0647DnKk/eRWmpqqtNxSMePH3f02bBhgw4dOqTy5cs79e3Zs6datWqlTZs25fvcPj4+8vHxsRw3AAC4OZRqWAoODlZwcPBV66KiopSenq5t27apWbNmkqStW7cqPT1dLVu2zLdPRESEQkNDFRcXpzvvvFOSdPHiRcXHx2vixImSpFGjRukvf/mLU78GDRrozTffVNeuXX/P1AAAwE3CLc6Gq1evnjp06KCBAwfqX//6lyTp8ccfV5cuXZzOhKtbt64mTJig+++/XzabTcOGDdP48eN166236tZbb9X48ePl5+enPn36SLq09ym/g7pr1KihiIiI6zM5AABwQ3OLsCRJH3/8sYYOHeo4u+1Pf/qTpk6d6lTz7bffKj093XH/ueee0/nz5zVkyBCdPn1azZs317p16xQQEHBdxw4AANyXzRhjSnsQ7i4jI0N2u13p6ekKDAws7eEAAIBCKOzfb7e4dAAAAEBpISwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABYICwBAABY8CztAdwMjDGSpIyMjFIeCQAAKKy8v9t5f8cLQlgqBpmZmZKksLCwUh4JAAAoqszMTNnt9gIft5mrxSlcVW5uro4ePaqAgADZbLbSHk6py8jIUFhYmI4cOaLAwMDSHs5Ni3W+Pljn64N1vj5YZ2fGGGVmZqpq1aoqU6bgI5PYs1QMypQpo+rVq5f2MG44gYGBvBmvA9b5+mCdrw/W+fpgnf/Hao9SHg7wBgAAsEBYAgAAsEBYQrHz8fHR6NGj5ePjU9pDuamxztcH63x9sM7XB+t8bTjAGwAAwAJ7lgAAACwQlgAAACwQlgAAACwQlgAAACwQllBkp0+fVmxsrOx2u+x2u2JjY/Xrr79a9jHGaMyYMapatarKli2r1q1b68CBAwXWduzYUTabTcuWLSv+CbiJkljnU6dO6amnnlKdOnXk5+enGjVqaOjQoUpPTy/h2dw4pk+froiICPn6+qpJkyb64osvLOvj4+PVpEkT+fr6qlatWpo5c6ZLzeLFixUZGSkfHx9FRkZq6dKlJTV8t1Hc6zxr1iy1atVKQUFBCgoKUtu2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test MSE: nan\n" + ] + } + ], + "source": [ + "# Import necessary libraries\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load dataset (replace 'boston.csv' with the actual path if needed)\n", + "data = pd.read_csv(\"C:\\\\Users\\\\zaib unnisa nayeem\\\\OneDrive\\\\Desktop\\\\web\\\\MLL\\\\BostonHousing.csv\")\n", + "\n", + "# Inspect the first few rows of the dataset\n", + "data.head()\n", + "print(data.isnull().sum())\n", + "# Fill missing values with the median of the column\n", + "data_filled = data.fillna(data.median())\n", + "\n", + "# Assuming the dataset has features and a target column (adjust as needed)\n", + "# In the Boston Housing dataset, 'MEDV' is typically the target (house prices)\n", + "# Drop the target column from X and keep it in y\n", + "X = data.drop('medv', axis=1) # Replace 'MEDV' with the actual target column if different\n", + "y = data['medv']\n", + "\n", + "# Normalize features (optional but recommended for gradient descent)\n", + "X = (X - X.mean()) / X.std()\n", + "\n", + "# Add a bias term (intercept) to X\n", + "X.insert(0, 'Bias', 1)\n", + "\n", + "# Convert to NumPy arrays for faster computation\n", + "X = np.array(X)\n", + "y = np.array(y)\n", + "\n", + "# Split data into training and test sets manually (80% train, 20% test)\n", + "train_size = int(0.8 * len(X))\n", + "X_train, X_test = X[:train_size], X[train_size:]\n", + "y_train, y_test = y[:train_size], y[train_size:]\n", + "\n", + "# Initialize parameters (weights)\n", + "num_features = X_train.shape[1]\n", + "beta = np.zeros(num_features) # Coefficients (weights)\n", + "\n", + "# Elastic Net hyperparameters\n", + "alpha = 0.1 # Regularization strength\n", + "l1_ratio = 0.5 # Mix ratio between L1 and L2 regularization\n", + "\n", + "# Gradient Descent settings\n", + "learning_rate = 0.001\n", + "num_iterations = 1000\n", + "\n", + "# To store cost history\n", + "cost_history = []\n", + "\n", + "# Define the cost function with L1 and L2 regularization (ElasticNet)\n", + "def compute_cost(X, y, beta, alpha, l1_ratio):\n", + " # Calculate predictions\n", + " predictions = X.dot(beta)\n", + " \n", + " # Calculate the mean squared error (MSE)\n", + " mse = (1 / len(y)) * np.sum((predictions - y) ** 2)\n", + " \n", + " # L1 (Lasso) regularization term\n", + " l1_penalty = l1_ratio * np.sum(np.abs(beta))\n", + " \n", + " # L2 (Ridge) regularization term\n", + " l2_penalty = (1 - l1_ratio) * np.sum(beta ** 2)\n", + " \n", + " # Combine MSE and regularization penalties\n", + " total_cost = mse + alpha * (l1_penalty + l2_penalty)\n", + " \n", + " return total_cost\n", + "\n", + "# Gradient Descent with ElasticNet regularization\n", + "def gradient_descent(X, y, beta, alpha, l1_ratio, learning_rate, num_iterations):\n", + " m = len(y) # Number of training examples\n", + " \n", + " for i in range(num_iterations):\n", + " # Predictions\n", + " predictions = X.dot(beta)\n", + " \n", + " # Compute gradient\n", + " gradient = (1 / m) * X.T.dot(predictions - y)\n", + " \n", + " # Update beta (coefficients)\n", + " beta -= learning_rate * gradient\n", + " \n", + " # Apply ElasticNet regularization terms\n", + " l1_penalty = alpha * l1_ratio * np.sign(beta)\n", + " l2_penalty = alpha * (1 - l1_ratio) * beta\n", + " beta -= learning_rate * (l1_penalty + l2_penalty)\n", + " \n", + " # Save the cost for this iteration\n", + " cost = compute_cost(X, y, beta, alpha, l1_ratio)\n", + " cost_history.append(cost)\n", + " \n", + " return beta\n", + "\n", + "# Train the model\n", + "beta = gradient_descent(X_train, y_train, beta, alpha, l1_ratio, learning_rate, num_iterations)\n", + "\n", + "# Print the final coefficients\n", + "print(\"Final coefficients (weights):\", beta)\n", + "\n", + "# Plot the cost history to visualize convergence\n", + "plt.plot(cost_history)\n", + "plt.xlabel('Iterations')\n", + "plt.ylabel('Cost')\n", + "plt.title('Cost Convergence during Gradient Descent')\n", + "plt.show()\n", + "\n", + "# Make predictions on the test set\n", + "y_pred = X_test.dot(beta)\n", + "\n", + "# Calculate Mean Squared Error on the test set\n", + "mse_test = np.mean((y_pred - y_test) ** 2)\n", + "print(f\"Test MSE: {mse_test}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "6599fd2f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " crim zn indus chas nox rm age dis rad tax ptratio \\\n", + "0 0.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 \n", + "1 0.02731 0.0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 \n", + "2 0.02729 0.0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 \n", + "3 0.03237 0.0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 \n", + "4 0.06905 0.0 2.18 0 0.458 7.147 54.2 6.0622 3 222 18.7 \n", + "\n", + " b lstat medv \n", + "0 396.90 4.98 24.0 \n", + "1 396.90 9.14 21.6 \n", + "2 392.83 4.03 34.7 \n", + "3 394.63 2.94 33.4 \n", + "4 396.90 5.33 36.2 \n", + "crim 0\n", + "zn 0\n", + "indus 0\n", + "chas 0\n", + "nox 0\n", + "rm 5\n", + "age 0\n", + "dis 0\n", + "rad 0\n", + "tax 0\n", + "ptratio 0\n", + "b 0\n", + "lstat 0\n", + "medv 0\n", + "dtype: int64\n", + "crim 0\n", + "zn 0\n", + "indus 0\n", + "chas 0\n", + "nox 0\n", + "rm 0\n", + "age 0\n", + "dis 0\n", + "rad 0\n", + "tax 0\n", + "ptratio 0\n", + "b 0\n", + "lstat 0\n", + "medv 0\n", + "dtype: int64\n", + "Feature Means after standardization:\n", + "crim -1.123388e-16\n", + "zn 6.319056e-17\n", + "indus 2.527622e-16\n", + "chas -9.829643e-17\n", + "nox -1.404235e-16\n", + "rm 1.077750e-15\n", + "age -1.685082e-16\n", + "dis -1.123388e-16\n", + "rad 1.123388e-16\n", + "tax 5.616939e-17\n", + "ptratio -3.370163e-16\n", + "b -7.021173e-16\n", + "lstat -3.229740e-16\n", + "dtype: float64\n", + "\n", + "Feature Standard Deviations after standardization:\n", + "crim 1.0\n", + "zn 1.0\n", + "indus 1.0\n", + "chas 1.0\n", + "nox 1.0\n", + "rm 1.0\n", + "age 1.0\n", + "dis 1.0\n", + "rad 1.0\n", + "tax 1.0\n", + "ptratio 1.0\n", + "b 1.0\n", + "lstat 1.0\n", + "dtype: float64\n", + "Iteration 0, Cost: 667.2190924425759\n", + "Iteration 100, Cost: 467.8473103690422\n", + "Iteration 200, Cost: 358.5524622831011\n", + "Iteration 300, Cost: 288.2558971115692\n", + "Iteration 400, Cost: 237.88237015983805\n", + "Iteration 500, Cost: 199.52675203988602\n", + "Iteration 600, Cost: 169.3779416747968\n", + "Iteration 700, Cost: 145.26451754841207\n", + "Iteration 800, Cost: 125.7703447222413\n", + "Iteration 900, Cost: 109.88805866075496\n", + "Final coefficients (weights): [13.21012633 -1.29269584 0.37273127 -1.08104644 1.4878458 -0.32209303\n", + " 2.38565541 0.09781831 -0.80380796 -1.69404622 -2.12563443 -2.2623185\n", + " 2.9799417 -2.6814756 ]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHFCAYAAAAUpjivAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABjWElEQVR4nO3dd1QUV/8G8GdY2KUvnQVEQKwINrAbsaFG0RhNNLZo4i+vJRox+mpM1RSJ5o2a2BJTNDExmqKJGhs27IpYUeyoKE2KFOlwf38gm6yAggIDy/M5Z4+Hmbs737nLso93Zu5IQggBIiIiIj1lIHcBRERERFWJYYeIiIj0GsMOERER6TWGHSIiItJrDDtERESk1xh2iIiISK8x7BAREZFeY9ghIiIivcawQ0RERHqNYYce6ezZs3jllVfg4eEBY2NjmJubo02bNliwYAGSk5OrZJvz5s3Dn3/+WaHnpKWl4ZNPPoGfnx8sLS2hUqng7u6OV199FSdPnqySOql67Nu3D5IkYd++fbXidSsiKioKb7zxBpo1awYzMzMYGxvD3d0do0aNwt69e1FdE9yvXr0akiThxo0b2mXdunVDt27dqnS7Fy5cwJw5c3S2+yjFdRY/jI2NodFo0L17dwQHByMhIaFK65XL2rVrsXjxYrnLqNUM5S6Aaq5vvvkGkyZNQpMmTfDf//4XXl5eyMvLw4kTJ/DVV1/hyJEj2LhxY6Vvd968eXjhhRcwaNCgcrW/du0aevfujYSEBEyYMAFz586Fubk5bty4gV9//RW+vr64d+8e1Gp1pddKtVebNm1w5MgReHl5ybL9TZs2YcSIEbCzs8OECRPQpk0bqFQqXL16Fb///jt69OiBXbt2oWfPnrLUt3z58irfxoULFzB37lx069YN7u7u5X7eqlWr0LRpU+Tl5SEhIQEHDx7E/Pnz8b///Q/r169Hr169qq5oGaxduxYREREICgqSu5Rai2GHSnXkyBFMnDgRAQEB+PPPP6FSqbTrAgICMH36dGzfvl3GCosUFBTg+eefR2JiIo4cOQJvb2/tOn9/f4wZMwbbtm2DkZGRjFU+vczMTJiamspdhl7Iy8uDJEmwtLREhw4dZKnh2rVrGD58OJo3b45du3bB0tJSu87f3x/jxo3Dvn37YG1t/cjXqcrfC7lCYHl4e3vDz89P+/OQIUMwbdo0dOnSBYMHD8aVK1fg6OgoY4VU4wiiUgQGBgpDQ0Nx69atcrUvKCgQ8+fPF02aNBFKpVLY29uL0aNHi+joaJ12J0+eFP379xf29vZCqVQKJycn0a9fP207ACUe/v7+ZW73999/FwBEcHBwufftwIEDokePHsLc3FyYmJiIjh07ii1btui0WbVqlQAg9uzZIyZMmCBsbW2FjY2NeP7558WdO3e07Z577jlRv359UVBQUGI77dq1E61bt9b+XFhYKJYtWyZatmwpjI2NhZWVlRgyZIi4du2azvP8/f1F8+bNRWhoqOjYsaMwMTERw4YNE0IIER0dLYYMGSLMzc2FWq0WI0aMEMePHxcAxKpVq3ReJywsTAwYMEBYW1sLlUolWrVqJdavX/9E+1ns559/Fh06dBBmZmbCzMxMtGzZUnz77bc6bUJCQkSPHj2EhYWFMDExEZ06dRK7du16xDvyj8jISNGnTx9hYmIibG1txfjx48WmTZsEALF3715tOzc3NzFmzJgSz/f399f5fdm7d68AIH788Ufx5ptvCmdnZyFJkoiMjNSu+/frjhkzRpiZmYkrV66IZ599VpiZmYl69eqJN998U2RnZ+tsqyLvxcMmTZokAIiwsLBy9YsQQnzwwQcCgAgPDxdDhgwRVlZWQqPRCCGK3uthw4YJNzc3YWxsLNzc3MRLL70kbty4UeJ1jhw5Ijp16iRUKpVwcnISb731lli5cqUAIKKiosrsSyGEyMnJER999JH2c25nZyfGjh0rEhISdNq5ubmJ/v37i23btonWrVsLY2Nj0aRJE/Hdd99p2xT/7j38eFTfFT+nrH779ddfBQAxd+5cneXl+Szcv39fTJ8+Xbi7uwuVSiWsra2Fr6+vWLt2rU67o0ePisDAQGFjYyNUKpVo0KCBmDp1qk6by5cvi+HDh2v/zjVt2lQsXbpUp03x79/atWvF22+/LZycnISFhYXo2bOnuHjxoradv79/qf1EFcMeoxLy8/OFqampaN++fbmf85///EcAEJMnTxbbt28XX331lbC3txeurq7i7t27QgghMjIyhK2trfDz8xO//vqrCA0NFevXrxcTJkwQFy5cEEIU/SE2MTER/fr1E0eOHBFHjhwR58+ff+x2IyMjy1Xnvn37hJGRkfD19RXr168Xf/75p+jdu7eQJEmsW7dO2674j2qDBg3ElClTxI4d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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test MSE: 349.7256472898349\n" + ] + } + ], + "source": [ + "# Load dataset (replace 'boston.csv' with the actual path if needed)\n", + "data = pd.read_csv(r\"C:\\Users\\zaib unnisa nayeem\\OneDrive\\Desktop\\web\\MLL\\BostonHousing.csv\")\n", + "\n", + "# Inspect the first few rows of the dataset\n", + "print(data.head())\n", + "\n", + "# Check for missing values\n", + "print(data.isnull().sum())\n", + "\n", + "# Handle missing values (choose one method)\n", + "data_filled = data.fillna(data.mean()) # Fill missing values with mean\n", + "# OR\n", + "# data_filled = data.dropna() # Remove rows with any missing values\n", + "\n", + "# Verify that there are no more missing values\n", + "print(data_filled.isnull().sum()) # Should print all zeros\n", + "\n", + "# Split features and target\n", + "X = data_filled.drop('medv', axis=1) # Replace 'MEDV' with the actual target column if different\n", + "y = data_filled['medv']\n", + "\n", + "# Normalize features (standardization)\n", + "X = (X - X.mean()) / X.std()\n", + "\n", + "# Check if standardization worked: print mean and standard deviation of the features\n", + "print(\"Feature Means after standardization:\")\n", + "print(X.mean(axis=0)) # Should be close to 0\n", + "\n", + "print(\"\\nFeature Standard Deviations after standardization:\")\n", + "print(X.std(axis=0)) # Should be close to 1\n", + "\n", + "# Add a bias term (intercept) to X\n", + "X.insert(0, 'Bias', 1)\n", + "\n", + "# Convert to NumPy arrays for faster computation\n", + "X = np.array(X)\n", + "y = np.array(y)\n", + "\n", + "# Split data into training and test sets manually (80% train, 20% test)\n", + "train_size = int(0.8 * len(X))\n", + "X_train, X_test = X[:train_size], X[train_size:]\n", + "y_train, y_test = y[:train_size], y[train_size:]\n", + "\n", + "# Initialize parameters (weights)\n", + "num_features = X_train.shape[1]\n", + "beta = np.zeros(num_features) # Coefficients (weights)\n", + "\n", + "# Elastic Net hyperparameters\n", + "alpha = 0.001 # Regularization strength\n", + "l1_ratio = 0.5 # Mix ratio between L1 and L2 regularization\n", + "\n", + "# Gradient Descent settings\n", + "learning_rate = 0.001 # Reduced learning rate\n", + "num_iterations = 1000\n", + "\n", + "# To store cost history\n", + "cost_history = []\n", + "\n", + "# Define the cost function with L1 and L2 regularization (ElasticNet)\n", + "def compute_cost(X, y, beta, alpha, l1_ratio):\n", + " # Calculate predictions\n", + " predictions = X.dot(beta)\n", + " \n", + " # Calculate the mean squared error (MSE)\n", + " mse = (1 / len(y)) * np.sum((predictions - y) ** 2)\n", + " \n", + " # L1 (Lasso) regularization term\n", + " l1_penalty = l1_ratio * np.sum(np.abs(beta))\n", + " \n", + " # L2 (Ridge) regularization term\n", + " l2_penalty = (1 - l1_ratio) * np.sum(beta ** 2)\n", + " \n", + " # Combine MSE and regularization penalties\n", + " total_cost = mse + alpha * (l1_penalty + l2_penalty)\n", + " \n", + " return total_cost\n", + "\n", + "# Gradient Descent with ElasticNet regularization\n", + "def gradient_descent(X, y, beta, alpha, l1_ratio, learning_rate, num_iterations):\n", + " m = len(y) # Number of training examples\n", + " \n", + " for i in range(num_iterations):\n", + " # Predictions\n", + " predictions = X.dot(beta)\n", + " \n", + " # Compute gradient\n", + " gradient = (1 / m) * X.T.dot(predictions - y)\n", + " \n", + " # Update beta (coefficients)\n", + " beta -= learning_rate * gradient\n", + " \n", + " # Apply ElasticNet regularization terms\n", + " l1_penalty = alpha * l1_ratio * np.sign(beta)\n", + " l2_penalty = alpha * (1 - l1_ratio) * beta\n", + " beta -= learning_rate * (l1_penalty + l2_penalty)\n", + " \n", + " # Save the cost for this iteration\n", + " cost = compute_cost(X, y, beta, alpha, l1_ratio)\n", + " cost_history.append(cost)\n", + " \n", + " # Debugging: print cost every 100 iterations\n", + " if i % 100 == 0:\n", + " print(f\"Iteration {i}, Cost: {cost}\")\n", + "\n", + " return beta\n", + "\n", + "# Train the model\n", + "beta = gradient_descent(X_train, y_train, beta, alpha, l1_ratio, learning_rate, num_iterations)\n", + "\n", + "# Print the final coefficients\n", + "print(\"Final coefficients (weights):\", beta)\n", + "\n", + "# Plot the cost history to visualize convergence\n", + "plt.plot(cost_history)\n", + "plt.xlabel('Iterations')\n", + "plt.ylabel('Cost')\n", + "plt.title('Cost Convergence during Gradient Descent')\n", + "plt.show()\n", + "\n", + "# Make predictions on the test set\n", + "y_pred = X_test.dot(beta)\n", + "\n", + "# Calculate Mean Squared Error on the test set\n", + "mse_test = np.mean((y_pred - y_test) ** 2)\n", + "print(f\"Test MSE: {mse_test}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "08b1b5f1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " crim zn indus chas nox rm age dis rad tax ptratio \\\n", + "0 0.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 \n", + "1 0.02731 0.0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 \n", + "2 0.02729 0.0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 \n", + "3 0.03237 0.0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 \n", + "4 0.06905 0.0 2.18 0 0.458 7.147 54.2 6.0622 3 222 18.7 \n", + "\n", + " b lstat medv \n", + "0 396.90 4.98 24.0 \n", + "1 396.90 9.14 21.6 \n", + "2 392.83 4.03 34.7 \n", + "3 394.63 2.94 33.4 \n", + "4 396.90 5.33 36.2 \n", + "crim 0\n", + "zn 0\n", + "indus 0\n", + "chas 0\n", + "nox 0\n", + "rm 5\n", + "age 0\n", + "dis 0\n", + "rad 0\n", + "tax 0\n", + "ptratio 0\n", + "b 0\n", + "lstat 0\n", + "medv 0\n", + "dtype: int64\n", + "crim 0\n", + "zn 0\n", + "indus 0\n", + "chas 0\n", + "nox 0\n", + "rm 0\n", + "age 0\n", + "dis 0\n", + "rad 0\n", + "tax 0\n", + "ptratio 0\n", + "b 0\n", + "lstat 0\n", + "medv 0\n", + "dtype: int64\n", + "Feature Means after standardization:\n", + "crim -1.123388e-16\n", + "zn 6.319056e-17\n", + "indus 2.527622e-16\n", + "chas -9.829643e-17\n", + "nox -1.404235e-16\n", + "rm 1.077750e-15\n", + "age -1.685082e-16\n", + "dis -1.123388e-16\n", + "rad 1.123388e-16\n", + "tax 5.616939e-17\n", + "ptratio -3.370163e-16\n", + "b -7.021173e-16\n", + "lstat -3.229740e-16\n", + "dtype: float64\n", + "\n", + "Feature Standard Deviations after standardization:\n", + "crim 1.0\n", + "zn 1.0\n", + "indus 1.0\n", + "chas 1.0\n", + "nox 1.0\n", + "rm 1.0\n", + "age 1.0\n", + "dis 1.0\n", + "rad 1.0\n", + "tax 1.0\n", + "ptratio 1.0\n", + "b 1.0\n", + "lstat 1.0\n", + "dtype: float64\n", + "Iteration 0, Cost: 670.1563563593295\n", + "Iteration 100, Cost: 619.5535136775262\n", + "Iteration 200, Cost: 577.170673545591\n", + "Iteration 300, Cost: 541.9779556726563\n", + "Iteration 400, Cost: 513.3829147203795\n", + "Iteration 500, Cost: 487.5183130144577\n", + "Iteration 600, Cost: 465.590635456026\n", + "Iteration 700, Cost: 447.7835043028139\n", + "Iteration 800, Cost: 431.73032590001117\n", + "Iteration 900, Cost: 418.7557913304762\n", + "Final coefficients (weights): [ 8.96070909e+00 -5.29448477e-03 1.94670739e-03 5.77546066e-03\n", + " -1.78683041e-03 -2.85534840e-03 1.21825323e-03 -5.42503197e-03\n", + " 5.46829514e-03 -4.24676894e-03 5.03905664e-03 5.98682831e-03\n", + " 4.29332265e-03 4.49572905e-03]\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test MSE: 76.7859617594534\n", + "Iteration 0, Cost: 667.218905573802\n", + "Iteration 100, Cost: 467.8285832309222\n", + "Iteration 200, Cost: 358.5168910526485\n", + "Iteration 300, Cost: 288.20479648275324\n", + "Iteration 400, Cost: 237.81648379294236\n", + "Iteration 500, Cost: 199.44667813854622\n", + "Iteration 600, Cost: 169.28386558794062\n", + "Iteration 700, Cost: 145.15735438633249\n", + "Iteration 800, Cost: 125.65110971768534\n", + "Iteration 900, Cost: 109.7577099701738\n", + "Alpha: 0.0001, L1 Ratio: 0.0, Test MSE: 349.7378867778213\n", + "Iteration 0, Cost: 667.2189238829698\n", + "Iteration 100, Cost: 467.82881973369945\n", + "Iteration 200, Cost: 358.5159192089478\n", + "Iteration 300, Cost: 288.2022373572934\n", + "Iteration 400, Cost: 237.81223991556064\n", + "Iteration 500, Cost: 199.44075119120177\n", + "Iteration 600, Cost: 169.27635665628694\n", + "Iteration 700, Cost: 145.14833410575477\n", + "Iteration 800, Cost: 125.64066531792375\n", + "Iteration 900, Cost: 109.74594682676064\n", + "Alpha: 0.0001, L1 Ratio: 0.5, Test MSE: 349.7297409480176\n", + "Iteration 0, Cost: 667.2189421920699\n", + "Iteration 100, Cost: 467.82905623888126\n", + "Iteration 200, Cost: 358.51494735867254\n", + "Iteration 300, Cost: 288.19967819449823\n", + "Iteration 400, Cost: 237.80799594950824\n", + "Iteration 500, Cost: 199.43482408858063\n", + "Iteration 600, Cost: 169.26884748572712\n", + "Iteration 700, Cost: 145.1393134917628\n", + "Iteration 800, Cost: 125.63022048161885\n", + "Iteration 900, Cost: 109.73418314256118\n", + "Alpha: 0.0001, L1 Ratio: 1.0, Test MSE: 349.72159491519966\n", + "Iteration 0, Cost: 667.2189093541137\n", + "Iteration 100, Cost: 467.84494525970877\n", + "Iteration 200, Cost: 358.56217807408206\n", + "Iteration 300, Cost: 288.28148037030036\n", + "Iteration 400, Cost: 237.92479304974106\n", + "Iteration 500, Cost: 199.58599550024257\n", + "Iteration 600, Cost: 169.45299321404028\n", + "Iteration 700, Cost: 145.35466930847366\n", + "Iteration 800, Cost: 125.87472328577752\n", + "Iteration 900, Cost: 110.00560961237919\n", + "Alpha: 0.001, L1 Ratio: 0.0, Test MSE: 349.8070827905675\n", + "Iteration 0, Cost: 667.2190924425759\n", + "Iteration 100, Cost: 467.8473103690422\n", + "Iteration 200, Cost: 358.5524622831011\n", + "Iteration 300, Cost: 288.2558971115692\n", + "Iteration 400, Cost: 237.88237015983805\n", + "Iteration 500, Cost: 199.52675203988602\n", + "Iteration 600, Cost: 169.3779416747968\n", + "Iteration 700, Cost: 145.26451754841207\n", + "Iteration 800, Cost: 125.7703447222413\n", + "Iteration 900, Cost: 109.88805866075496\n", + "Alpha: 0.001, L1 Ratio: 0.5, Test MSE: 349.7256472898349\n", + "Iteration 0, Cost: 667.2192755242543\n", + "Iteration 100, Cost: 467.84967571881754\n", + "Iteration 200, Cost: 358.54274583485443\n", + "Iteration 300, Cost: 288.2303101201663\n", + "Iteration 400, Cost: 237.8399384054358\n", + "Iteration 500, Cost: 199.46749305743637\n", + "Iteration 600, Cost: 169.3028662549206\n", + "Iteration 700, Cost: 145.17433246264767\n", + "Iteration 800, Cost: 125.66592252724129\n", + "Iteration 900, Cost: 109.77045366175687\n", + "Alpha: 0.001, L1 Ratio: 1.0, Test MSE: 349.6441914901753\n", + "Iteration 0, Cost: 667.218947156982\n", + "Iteration 100, Cost: 468.0084625890339\n", + "Iteration 200, Cost: 359.0145082987253\n", + "Iteration 300, Cost: 289.0469983452543\n", + "Iteration 400, Cost: 239.00546707744527\n", + "Iteration 500, Cost: 200.97536941558707\n", + "Iteration 600, Cost: 171.13884907872605\n", + "Iteration 700, Cost: 147.3205889972669\n", + "Iteration 800, Cost: 128.10168362126757\n", + "Iteration 900, Cost: 112.47339585945467\n", + "Alpha: 0.01, L1 Ratio: 0.0, Test MSE: 350.4969355261859\n", + "Iteration 0, Cost: 667.2207777199199\n", + "Iteration 100, Cost: 468.03212182461954\n", + "Iteration 200, Cost: 358.91761465221066\n", + "Iteration 300, Cost: 288.7919639435375\n", + "Iteration 400, Cost: 238.5828230141418\n", + "Iteration 500, Cost: 200.38552903435112\n", + "Iteration 600, Cost: 170.39209925307443\n", + "Iteration 700, Cost: 146.4241570901124\n", + "Iteration 800, Cost: 127.06441415634882\n", + "Iteration 900, Cost: 111.30588250930546\n", + "Alpha: 0.01, L1 Ratio: 0.5, Test MSE: 349.68480123734787\n", + "Iteration 0, Cost: 667.2226076044768\n", + "Iteration 100, Cost: 468.0558050816545\n", + "Iteration 200, Cost: 358.820655449171\n", + "Iteration 300, Cost: 288.53655725034105\n", + "Iteration 400, Cost: 238.15929521627913\n", + "Iteration 500, Cost: 199.79421494621718\n", + "Iteration 600, Cost: 169.64303835979123\n", + "Iteration 700, Cost: 145.52446368922685\n", + "Iteration 800, Cost: 126.02284864974723\n", + "Iteration 900, Cost: 110.13312022912305\n", + "Alpha: 0.01, L1 Ratio: 1.0, Test MSE: 348.870924118936\n", + "Iteration 0, Cost: 667.2193251606993\n", + "Iteration 100, Cost: 469.63338987487856\n", + "Iteration 200, Cost: 363.4843171158828\n", + "Iteration 300, Cost: 296.5719012788342\n", + "Iteration 400, Cost: 249.5747060486782\n", + "Iteration 500, Cost: 214.49756550606048\n", + "Iteration 600, Cost: 187.46960008666858\n", + "Iteration 700, Cost: 166.2786781231472\n", + "Iteration 800, Cost: 149.484995549633\n", + "Iteration 900, Cost: 136.0725646388953\n", + "Alpha: 0.1, L1 Ratio: 0.0, Test MSE: 357.18493207656076\n", + "Iteration 0, Cost: 667.2375986233416\n", + "Iteration 100, Cost: 469.87078277154427\n", + "Iteration 200, Cost: 362.54147089903597\n", + "Iteration 300, Cost: 294.0999927935111\n", + "Iteration 400, Cost: 245.50325201707756\n", + "Iteration 500, Cost: 208.8516410172346\n", + "Iteration 600, Cost: 180.3667877723532\n", + "Iteration 700, Cost: 157.80457277276778\n", + "Iteration 800, Cost: 139.7375319885853\n", + "Iteration 900, Cost: 125.16202574844621\n", + "Alpha: 0.1, L1 Ratio: 0.5, Test MSE: 349.287338695856\n", + "Iteration 0, Cost: 667.2558042446726\n", + "Iteration 100, Cost: 470.11055505748857\n", + "Iteration 200, Cost: 361.5922368428776\n", + "Iteration 300, Cost: 291.5918159013892\n", + "Iteration 400, Cost: 241.3460884809911\n", + "Iteration 500, Cost: 203.06198038248797\n", + "Iteration 600, Cost: 173.04080777674994\n", + "Iteration 700, Cost: 149.01795823136402\n", + "Iteration 800, Cost: 129.58109184490087\n", + "Iteration 900, Cost: 113.75422755094205\n", + "Alpha: 0.1, L1 Ratio: 1.0, Test MSE: 341.21441821402857\n", + "Iteration 0, Cost: 667.2231027026473\n", + "Iteration 100, Cost: 484.9060171694937\n", + "Iteration 200, Cost: 403.3020180618074\n", + "Iteration 300, Cost: 360.4173882845318\n", + "Iteration 400, Cost: 335.28571549751973\n", + "Iteration 500, Cost: 319.62598974613957\n", + "Iteration 600, Cost: 309.54896578368084\n", + "Iteration 700, Cost: 302.94943240926244\n", + "Iteration 800, Cost: 298.5801400081753\n", + "Iteration 900, Cost: 295.66457670614454\n", + "Alpha: 1.0, L1 Ratio: 0.0, Test MSE: 404.59618258576256\n", + "Iteration 0, Cost: 667.4026222410839\n", + "Iteration 100, Cost: 487.34720098860447\n", + "Iteration 200, Cost: 396.1750916726716\n", + "Iteration 300, Cost: 342.32045897899445\n", + "Iteration 400, Cost: 307.088783537371\n", + "Iteration 500, Cost: 282.70463252712193\n", + "Iteration 600, Cost: 265.5482066404127\n", + "Iteration 700, Cost: 253.09616261053282\n", + "Iteration 800, Cost: 243.9363547765339\n", + "Iteration 900, Cost: 237.1373810803306\n", + "Alpha: 1.0, L1 Ratio: 0.5, Test MSE: 345.18920077681366\n", + "Iteration 0, Cost: 667.5753544436192\n", + "Iteration 100, Cost: 490.0036895624175\n", + "Iteration 200, Cost: 388.55657583393577\n", + "Iteration 300, Cost: 321.42313734078385\n", + "Iteration 400, Cost: 272.53653675379053\n", + "Iteration 500, Cost: 235.43486264939537\n", + "Iteration 600, Cost: 206.33908797318546\n", + "Iteration 700, Cost: 182.98610553091092\n", + "Iteration 800, Cost: 164.12430934139257\n", + "Iteration 900, Cost: 148.6055861374229\n", + "Alpha: 1.0, L1 Ratio: 1.0, Test MSE: 269.05678468947724\n", + "Iteration 0, Cost: 667.2606298490651\n", + "Iteration 100, Cost: 573.825412185669\n", + "Iteration 200, Cost: 566.9204570756212\n", + "Iteration 300, Cost: 566.2785798307344\n", + "Iteration 400, Cost: 566.2011321435306\n", + "Iteration 500, Cost: 566.1883776276796\n", + "Iteration 600, Cost: 566.185533291519\n", + "Iteration 700, Cost: 566.1847557941253\n", + "Iteration 800, Cost: 566.1845206771857\n", + "Iteration 900, Cost: 566.1844463890487\n", + "Alpha: 10.0, L1 Ratio: 0.0, Test MSE: 383.5519273933499\n", + "Iteration 0, Cost: 668.7548908947398\n", + "Iteration 100, Cost: 597.7655678222084\n", + "Iteration 200, Cost: 577.0096251497682\n", + "Iteration 300, Cost: 570.2587230687836\n", + "Iteration 400, Cost: 567.6310578326481\n", + "Iteration 500, Cost: 566.7286419139509\n", + "Iteration 600, Cost: 566.2652973751226\n", + "Iteration 700, Cost: 566.3081965410861\n", + "Iteration 800, Cost: 566.1885439007252\n", + "Iteration 900, Cost: 566.0979215254076\n", + "Alpha: 10.0, L1 Ratio: 0.5, Test MSE: 266.91431388127177\n", + "Iteration 0, Cost: 670.1563563593295\n", + "Iteration 100, Cost: 619.5535136775262\n", + "Iteration 200, Cost: 577.170673545591\n", + "Iteration 300, Cost: 541.9779556726563\n", + "Iteration 400, Cost: 513.3829147203795\n", + "Iteration 500, Cost: 487.5183130144577\n", + "Iteration 600, Cost: 465.590635456026\n", + "Iteration 700, Cost: 447.7835043028139\n", + "Iteration 800, Cost: 431.73032590001117\n", + "Iteration 900, Cost: 418.7557913304762\n", + "Alpha: 10.0, L1 Ratio: 1.0, Test MSE: 76.7859617594534\n", + "Best Params - Alpha: 10.0, L1 Ratio: 1.0, Best Test MSE: 76.7859617594534\n" + ] + } + ], + "source": [ + "# Load dataset (replace 'boston.csv' with the actual path if needed)\n", + "data = pd.read_csv(r\"C:\\Users\\zaib unnisa nayeem\\OneDrive\\Desktop\\web\\MLL\\BostonHousing.csv\")\n", + "\n", + "# Inspect the first few rows of the dataset\n", + "print(data.head())\n", + "\n", + "# Check for missing values\n", + "print(data.isnull().sum())\n", + "\n", + "# Handle missing values (choose one method)\n", + "data_filled = data.fillna(data.mean()) # Fill missing values with mean\n", + "# OR\n", + "# data_filled = data.dropna() # Remove rows with any missing values\n", + "\n", + "# Verify that there are no more missing values\n", + "print(data_filled.isnull().sum()) # Should print all zeros\n", + "\n", + "# Split features and target\n", + "X = data_filled.drop('medv', axis=1) # Replace 'MEDV' with the actual target column if different\n", + "y = data_filled['medv']\n", + "\n", + "# Normalize features (standardization)\n", + "X = (X - X.mean()) / X.std()\n", + "\n", + "# Check if standardization worked: print mean and standard deviation of the features\n", + "print(\"Feature Means after standardization:\")\n", + "print(X.mean(axis=0)) # Should be close to 0\n", + "\n", + "print(\"\\nFeature Standard Deviations after standardization:\")\n", + "print(X.std(axis=0)) # Should be close to 1\n", + "\n", + "# Add a bias term (intercept) to X\n", + "X.insert(0, 'Bias', 1)\n", + "\n", + "# Convert to NumPy arrays for faster computation\n", + "X = np.array(X)\n", + "y = np.array(y)\n", + "\n", + "# Split data into training and test sets manually (80% train, 20% test)\n", + "train_size = int(0.8 * len(X))\n", + "X_train, X_test = X[:train_size], X[train_size:]\n", + "y_train, y_test = y[:train_size], y[train_size:]\n", + "\n", + "# Initialize parameters (weights)\n", + "num_features = X_train.shape[1]\n", + "beta = np.zeros(num_features) # Coefficients (weights)\n", + "\n", + "# Elastic Net hyperparameters\n", + "alpha = 10.0 # Regularization strength\n", + "l1_ratio = 1.0 # Mix ratio between L1 and L2 regularization\n", + "\n", + "# Gradient Descent settings\n", + "learning_rate = 0.001 # Reduced learning rate\n", + "num_iterations = 1000\n", + "\n", + "# To store cost history\n", + "cost_history = []\n", + "\n", + "# Define the cost function with L1 and L2 regularization (ElasticNet)\n", + "def compute_cost(X, y, beta, alpha, l1_ratio):\n", + " predictions = X.dot(beta)\n", + " mse = (1 / len(y)) * np.sum((predictions - y) ** 2)\n", + " l1_penalty = l1_ratio * np.sum(np.abs(beta))\n", + " l2_penalty = (1 - l1_ratio) * np.sum(beta ** 2)\n", + " total_cost = mse + alpha * (l1_penalty + l2_penalty)\n", + " return total_cost\n", + "\n", + "# Gradient Descent with ElasticNet regularization\n", + "def gradient_descent(X, y, beta, alpha, l1_ratio, learning_rate, num_iterations):\n", + " m = len(y)\n", + " for i in range(num_iterations):\n", + " predictions = X.dot(beta)\n", + " gradient = (1 / m) * X.T.dot(predictions - y)\n", + " beta -= learning_rate * gradient\n", + " l1_penalty = alpha * l1_ratio * np.sign(beta)\n", + " l2_penalty = alpha * (1 - l1_ratio) * beta\n", + " beta -= learning_rate * (l1_penalty + l2_penalty)\n", + " cost = compute_cost(X, y, beta, alpha, l1_ratio)\n", + " cost_history.append(cost)\n", + " if i % 100 == 0:\n", + " print(f\"Iteration {i}, Cost: {cost}\")\n", + " return beta\n", + "\n", + "# Train the model\n", + "beta = gradient_descent(X_train, y_train, beta, alpha, l1_ratio, learning_rate, num_iterations)\n", + "\n", + "# Print the final coefficients\n", + "print(\"Final coefficients (weights):\", beta)\n", + "\n", + "# Plot the cost history to visualize convergence\n", + "plt.plot(cost_history)\n", + "plt.xlabel('Iterations')\n", + "plt.ylabel('Cost')\n", + "plt.title('Cost Convergence during Gradient Descent')\n", + "plt.show()\n", + "\n", + "# Make predictions on the test set\n", + "y_pred = X_test.dot(beta)\n", + "\n", + "# Calculate Mean Squared Error on the test set\n", + "mse_test = np.mean((y_pred - y_test) ** 2)\n", + "print(f\"Test MSE: {mse_test}\")\n", + "\n", + "# Hyperparameter tuning section\n", + "best_mse = float('inf')\n", + "best_params = None\n", + "\n", + "for alpha in [0.0001, 0.001, 0.01, 0.1, 1.0, 10.0]:\n", + " for l1_ratio in [0.0, 0.5, 1.0]:\n", + " beta = np.zeros(num_features) # Reset coefficients\n", + " beta = gradient_descent(X_train, y_train, beta, alpha, l1_ratio, learning_rate, num_iterations)\n", + " y_pred = X_test.dot(beta)\n", + " mse_test = np.mean((y_pred - y_test) ** 2)\n", + "\n", + " print(f\"Alpha: {alpha}, L1 Ratio: {l1_ratio}, Test MSE: {mse_test}\")\n", + "\n", + " if mse_test < best_mse:\n", + " best_mse = mse_test\n", + " best_params = (alpha, l1_ratio)\n", + "\n", + "print(f\"Best Params - Alpha: {best_params[0]}, L1 Ratio: {best_params[1]}, Best Test MSE: {best_mse}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "9e2a8187", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAHFCAYAAAAHcXhbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbv0lEQVR4nO3deZyNdf/H8dfBrGZhbDPDGJOsyZadrJE1Rdk1QlToFm5Fd5buoo2kUn5lTbKUpLIksoWQRKgUY4mxm2GYGTNz/f647jkMY8wZZ+Y6Z+b9fDzOw1zLua7P+V7XzPn4Xt/FZhiGgYiIiIibymd1ACIiIiJ3QsmMiIiIuDUlMyIiIuLWlMyIiIiIW1MyIyIiIm5NyYyIiIi4NSUzIiIi4taUzIiIiIhbUzIjIiIibk3JjMgtTJ06FZvNRpUqVbJ8jOPHjzNu3Dh27drlvMAy0LRpU5o2bZoj58pImTJlsNls9pefnx9169Zl7ty5OXL+2bNnY7PZiIqKsq/LatlMmDCBpUuXOi22VFFRUdhsNmbPnn3LfZ577jlsNhu///77Lfd58cUXsdls7Ny5M9PnLlOmDH369HEgWhHXpmRG5BZmzpwJwN69e/npp5+ydIzjx48zfvz4HEtmXEnDhg3ZsmULW7ZssScXkZGRfPDBB5bEM23aNKZNm+bw+7IrmcmMfv36AdfuxRulpKQwd+5cqlevTs2aNXMyNBGXomRGJB07duzg119/pV27dgDMmDHD4ojcT6FChahXrx716tXj0UcfZeXKlQQEBDB58uRbvic5OZmEhIRsiady5cpUrlw5W46dXapUqUKdOnX45JNPSEpKumn7d999x7Fjx+xJj0hepWRGJB2pyctrr71GgwYNWLBgAZcvX75pv3/++YcBAwYQFhaGp6cnoaGhPProo5w8eZJ169ZRu3ZtAJ544gn7I5dx48YBt37s0adPH8qUKZNm3fjx46lbty5BQUEEBARQs2ZNZsyYQVbmiX344YcJDw8nJSXlpm1169ZN8z/8xYsXU7duXQIDA/H19eWuu+6ib9++Dp8TzOSmQoUKHD58GLj2mOWNN97glVdeISIiAi8vL3744QfATCgfeughgoKC8Pb2pkaNGixatOim427dupWGDRvi7e1NaGgoo0aN4urVqzftl155JyQk8PLLL1OpUiW8vb0pUqQIzZo1Y/PmzQDYbDbi4uKYM2eO/fpdf4zo6GgGDhxIqVKl8PT0JCIigvHjx9+UeBw/fpwuXbrg7+9PYGAgXbt2JTo6OlPl1q9fP6Kjo1mxYsVN22bNmoWXlxc9e/YkPj6e4cOHU716dQIDAwkKCqJ+/fp89dVXtz1Heo/lANatW4fNZmPdunVp1n///fe0aNGCgIAAfH19adiwIWvWrEmzz+nTp+2/G15eXhQrVoyGDRvy/fffZ+pziziigNUBiLiaK1eu8Nlnn1G7dm2qVKlC37596d+/P4sXLyYyMtK+3z///EPt2rW5evUqo0ePpmrVqpw9e5ZVq1Zx/vx5atasyaxZs3jiiSf4z3/+Y6/lKVWqlMMxRUVFMXDgQEqXLg2YX+BDhgzhn3/+YcyYMQ4dq2/fvnTs2JG1a9fywAMP2Nf//vvvbNu2jalTpwKwZcsWunbtSteuXRk3bhze3t4cPnyYtWvXOhw/wNWrVzl8+DDFihVLs37q1KmUL1+et956i4CAAMqVK8cPP/xA69atqVu3Lh9++CGBgYEsWLCArl27cvnyZXt7j3379tGiRQvKlCnD7Nmz8fX1Zdq0acyfP/+28SQlJdGmTRs2btzI0KFDad68OUlJSWzdupUjR47QoEEDtmzZQvPmzWnWrBkvvfQSAAEBAYCZyNSpU4d8+fIxZswYypYty5YtW3jllVeIiopi1qxZgHk/PfDAAxw/fpyJEydSvnx5vv32W7p27ZqpcuvevTvPPfccM2fOpEOHDvb158+f56uvvuKRRx6hcOHCxMTEcO7cOUaMGEHJkiVJTEzk+++/p1OnTsyaNYvHH388U+e7nXnz5vH444/TsWNH5syZg4eHB9OnT+fBBx9k1apVtGjRAoDevXuzc+dOXn31VcqXL8+FCxfYuXMnZ8+edUocImkYIpLG3LlzDcD48MMPDcMwjIsXLxp+fn7G/fffn2a/vn37Gh4eHsa+fftueazt27cbgDFr1qybtjVp0sRo0qTJTesjIyON8PDwWx4zOTnZuHr1qvHyyy8bRYoUMVJSUm57zOtdvXrVKFGihNGjR48060eOHGl4enoaZ86cMQzDMN566y0DMC5cuJDh8dITHh5utG3b1rh69apx9epV49ChQ0ZkZKQBGP/+978NwzCMQ4cOGYBRtmxZIzExMc37K1asaNSoUcO4evVqmvXt27c3QkJCjOTkZMMwDKNr166Gj4+PER0dbd8nKSnJqFixogEYhw4dsq+/sWxSr/NHH32U4WcpWLCgERkZedP6gQMHGn5+fsbhw4fTrE8tt7179xqGYRgffPCBARhfffVVmv2efPLJW94bN4qMjDQ8PDyMkydP2te9++67BmCsXr063fckJSUZV69eNfr162fUqFEjzbbw8PA0n2nWrFk3lZdhGMYPP/xgAMYPP/xgGIZhxMXFGUFBQUaHDh3S7JecnGxUq1bNqFOnjn2dn5+fMXTo0Nt+NhFn0GMmkRvMmDEDHx8funXrBoCfnx+PPfYYGzdu5MCBA/b9VqxYQbNmzahUqVK2x5RaixIYGEj+/Pnx8PBgzJgxnD17llOnTjl0rAIFCtCrVy+WLFlCTEwMYLZV+eSTT+jYsSNFihQBsD8i69KlC4sWLeKff/5x6DzLly/Hw8MDDw8PIiIiWLRoEUOGDOGVV15Js99DDz2Eh4eHffmvv/7i999/p2fPnoBZg5L6atu2LSdOnOCPP/4A4IcffqBFixaUKFHC/v78+fNnqtZjxYoVeHt7Z/mx2TfffEOzZs0IDQ1NE2ObNm0AWL9+vT1Gf39/HnrooTTv79GjR6bP1a9fP65evconn3xiXzdr1izCw8PtNSFgPhZs2LAhfn5+FChQAA8PD2bMmMH+/fuz9BlvtHnzZs6dO0dkZGSaz5ySkkLr1q3Zvn07cXFxANSpU4fZs2fzyiuvsHXr1nQf/Yk4i5IZkev89ddfbNiwgXbt2mEYBhcuXODChQs8+uijQNpeJadPn87SIyNHbdu2jVatWgHw0Ucf8eOPP7J9+3ZefPFFwHyM4ai+ffsSHx/PggULAFi1ahUnTpzgiSeesO/TuHFjli5dSlJSEo8//jilSpWiSpUqfPbZZ5k6R6NGjdi+fTs7duxg3759XLhwgalTp+Lp6Zlmv5CQkDTLJ0+eBGDEiBH2ZCj19cwzzwBw5swZAM6ePUtwcPBN505v3Y1Onz5NaGgo+fJl7c/gyZMn+frrr2+K8Z577rkpxuuTLUdiTHX//fdTvnx5+6Or3bt3s3PnTntbLIAlS5bQpUsXSpYsybx589iyZQvbt2+3X2tnSL02jz766E2f+/XXX8cwDM6dOwfAwoULiYyM5OOPP6Z+/foEBQXx+OOPZ7qtkIgj1GZG5DozZ87EMAw+//xzPv/885u2z5kzh1deeYX8+fNTrFgxjh07luVzeXt722tGrpf6JZhqwYIFeHh48M033+Dt7W1ffyfdhStXrkydOnWYNWsWAwcOZNasWYSGhtqTplQdO3akY8eOJCQksHXrViZOnEiPHj0oU6YM9evXz/AcgYGB1KpV67axpH4ZpypatCgAo0aNolOnTum+p0KFCgAUKVIk3S/HzHxhFitWjE2bNpGSkpKlhKZo0aJUrVqVV199Nd3toaGh9hi3bduWpRiv17dvX1544QW2bdvG/PnzyZcvX5qxYubNm0dERAQLFy5MU6aZ6R2Wel/duO+N92LqtXn33XepV69eusdKTdyKFi3KlClTmDJlCkeOHGHZsmW88MILnDp1ipUrV97+A4s4QMmMyP8kJyczZ84cypYty8cff3zT9m+++YZJkyaxYsUK2rdvT5s2bfjkk0/4448/7F+uN/Ly8gLSrz0pU6YMixcvJiEhwb7f2bNn2bx5s72RKZhf9gUKFCB//vz2dVeuXEnzyCErnnjiCZ5++mk2bdrE119/zbBhw9Kc48bP0aRJEwoVKsSqVav45ZdfbpvMZFWFChUoV64cv/76KxMmTMhw32bNmrFs2TJOnjxp/xJNTk5m4cKFtz1PmzZt+Oyzz5g9e3aGj5q8vLzSvX7t27dn+fLllC1blsKFC2cY46JFi1i2bFmaR02ZaaR8vcjISP7zn/8wffp0li1bRosWLQgPD7dvt9lseHp6pklkoqOjM9WbKbX33O7du9Pcy8uWLUuzX8OGDSlUqBD79u1j8ODBmY69dOnSDB48mDVr1vDjjz9m+n0imaVkRuR/VqxYwfHjx3n99dfT7TJdpUoV3nvvPWbMmEH79u15+eWXWbFiBY0bN2b06NHce++9XLhwgZUrVzJs2DAqVqxI2bJl8fHx4dNPP6VSpUr4+fkRGhpKaGgovXv3Zvr06fTq1Ysnn3ySs2fP8sYbb6RJZADatWvH5MmT6dGjBwMGDODs2bO89dZb9gQoq7p3786wYcPo3r07CQkJN40IO2bMGI4dO0aLFi0oVaoUFy5c4J133sHDw4MmTZrc0blvZ/r06bRp04YHH3yQPn36ULJkSc6dO8f+/fvZuXMnixcvBuA///kPy5Yto3nz5owZMwZfX1/ef/99e7uNjHTv3p1Zs2bx1FNP8ccff9CsWTNSUlL46aefqFSpkr3N1L333su6dev4+uuvCQkJwd/fnwoVKvDyyy+zevVqGjRowLPPPkuFChWIj48nKiqK5cuX8+GHH1KqVCkef/xx3n77bR5//HFeffVVypUrx/Lly1m1apVDZRIcHEzbtm2ZNWsWhmHcNLZM+/btWbJkCc888wyPPvooR48e5b///S8hISFp2nqlp3bt2lSoUIERI0aQlJRE4cKF+fLLL9m0aVOa/fz8/Hj33XeJjIzk3LlzPProoxQvXpzTp0/z66+/cvr0aT744ANiYmJo1qwZPXr0oGLFivj7+7N9+3ZWrlx5y9o2kTtibftjEdfx8MMPG56ensapU6duuU+3bt2MAgUK2HvPHD161Ojbt68RHBxseHh4GKGhoUaXLl3S9Dr57LPPjIoVKxoeHh4GYIwdO9a+bc6cOUalSpUMb29vo3LlysbChQvT7c00c+ZMo0KFCoaXl5dx1113GRMnTjRmzJhx2x47t9OjRw8DMBo2bHjTtm+++cZo06aNUbJkScPT09MoXry40bZtW2Pjxo23PW54eLjRrl27DPdJ7c305ptvprv9119/Nbp06WIUL17c8PDwMIKDg43mzZvbe5ml+vHHH4169eoZXl5eRnBwsPHvf//b+L//+79Mlc2VK1eMMWPGGOXKlTM8PT2NIkWKGM2bNzc2b95s32fXrl1Gw4YNDV9fXwNIc4zTp08bzz77rBEREWF4eHgYQUFBxn333We8+OKLxqVLl+z7HTt2zOjcubPh5+dn+Pv7G507dzY2b96c6d5Mqb766isDMIKCgoz4+Pibtr/22mtGmTJlDC8vL6NSpUrGRx99ZIwdO9a48U/9jb2ZDMMw/vzzT6NVq1ZGQECAUaxYMWPIkCHGt99+m6Y3U6r169cb7dq1M4KCggwPDw+jZMmSRrt27YzFixcbhmEY8fHxxlNPPWVUrVrVCAgIMHx8fIwKFSoYY8eONeLi4jL9eUUyy2YYWRh1S0RERMRFqDeTiIiIuDUlMyIiIuLWlMyIiIiIW1MyIyIiIm5NyYyIiIi4NSUzIiIi4tZy/aB5KSkpHD9+HH9//5uGTRcRERHXZBgGFy9ezNQcark+mTl+/DhhYWFWhyEiIiJZcPTo0dtO6pvrkxl/f3/ALIwbh4kXERER1xQbG0tYWJj9ezwjuT6ZSX20FBAQoGRGRETEzWSmiYgaAIuIiIhbUzIjIiIibk3JjIiIiLg1JTMiIiLi1pTMiIiIiFtTMiMiIiJuTcmMiIiIuDVLk5kPPviAqlWr2seAqV+/PitWrLBvNwyDcePGERoaio+PD02bNmXv3r0WRiwiIiKuxtJkplSpUrz22mvs2LGDHTt20Lx5czp27GhPWN544w0mT57Me++9x/bt2wkODqZly5ZcvHjRyrBFRETEhdgMwzCsDuJ6QUFBvPnmm/Tt25fQ0FCGDh3K888/D0BCQgIlSpTg9ddfZ+DAgZk6XmxsLIGBgcTExGgEYBERETfhyPe3y7SZSU5OZsGCBcTFxVG/fn0OHTpEdHQ0rVq1su/j5eVFkyZN2Lx58y2Pk5CQQGxsbJqXiIiI5F6WJzN79uzBz88PLy8vnnrqKb788ksqV65MdHQ0ACVKlEizf4kSJezb0jNx4kQCAwPtL82YLSIikrtZnsxUqFCBXbt2sXXrVp5++mkiIyPZt2+fffuNE0wZhpHhpFOjRo0iJibG/jp69Gi2xS4iIiLWs3zWbE9PT+6++24AatWqxfbt23nnnXfs7WSio6MJCQmx73/q1Kmbamuu5+XlhZeXV/YGLSIiIi7D8pqZGxmGQUJCAhEREQQHB7N69Wr7tsTERNavX0+DBg0sjFBERCSP+/13SE62Ogo7S5OZ0aNHs3HjRqKiotizZw8vvvgi69ato2fPnthsNoYOHcqECRP48ssv+e233+jTpw++vr706NHDyrBFRETyJsOAadOgenV49VWro7Gz9DHTyZMn6d27NydOnCAwMJCqVauycuVKWrZsCcDIkSO5cuUKzzzzDOfPn6du3bp89913+Pv7Wxm2iIhI3hMTA/37w+efm8u//AIpKZDP+oc8LjfOjLNpnBkREZE7tGMHdO0KBw+Chwe8/joMHQoZdMi5U458f1veAFhERERclGHA1Knw73/D1atQpgwsXAh16lgdWRrW1w2JiIiIazp0CF54wUxkOnUyHy25WCIDqpkRERGRW7nrLnjvPbhyBQYNytbHSndCyYyIiIiYUlLg7behUSOoW9dc16+ftTFlgpIZERERgbNnITISvv0WwsNhzx5wk97DSmZERETyuk2boHt3OHYMvLxg1Cjw87M6qkxTA2AREZG8KiUFJk6Epk3NRKZ8efjpJxg40GXbx6RHNTMiIiJ50aVL8OijsGqVudyrF3zwgVvVyKRSzYyIiEheVLAgeHqCjw/MmAFz57plIgOqmREREck7kpMhMdFMYGw2mD0bTpyAe+6xOrI7opoZERGRvCA6Glq1giefNEf2BQgKcvtEBlQzIyIikvt9/73ZJubkSfD1hb//hrvvtjoqp1HNjIiISG6VlAQvvWTWyJw8CffeCz//nKsSGVDNjIiISO50/Lg5dsyGDebygAEwZYrZXiaXUTIjIiKS26SkQOvW5ii+fn7w0UfQrZvVUWUbPWYSERHJbfLlM+dYuu8+2LkzVycyoGRGREQkdzhyBFavvrbcogVs2wblylkXUw5RMiMiIuLuvv4aatSAzp3hr7+urc+XN77m88anFBERyY0SE2H4cHjoITh3DipUgPz5rY4qxymZERERcUdRUXD//TB5srk8dKg5+3VEhJVRWUK9mURERNzN0qXwxBNw4QIUKmROS9Cxo7UxWUjJjIiIiLvZuNFMZOrVgwULIDzc6ogspWRGRETEHRiGOTkkwMSJULo0PPMMeHhYG5cLUJsZERERV7doEbRrB1evmsuenvCvfymR+R8lMyIiIq4qPh6efhq6doUVK8yRfOUmeswkIiLiiv78E7p0gV9/NZdHjTLnV5KbKJkRERFxNfPnw8CBcOkSFCsGn3wCDz5odVQuS4+ZREREXMmECdCzp5nING0Ku3YpkbkNJTMiIiKupHNnCAiAMWPg++8hNNTqiFyeHjOJiIhYbc8euPde8+cKFeDvv6FoUWtjciOqmREREbHKpUsQGQnVq8P69dfWK5FxiJIZERERK+zZA7Vrw9y515YlS5TMiIiI5CTDgI8/hjp14PffzTYxa9fC4MFWR+a21GZGREQkp1y8aHa5/uwzc7l1a7Nmplgxa+Nyc6qZERERySlffWUmMvnzw2uvwbffKpFxAtXMiIiI5JSePeHnn+Gxx6BBA6ujyTVUMyMiIpJdYmJgyBA4f95cttng7beVyDiZamZERESyw44d5gSRBw/CqVOwcKHVEeVaqpkRERFxJsOAqVPN2peDByE8HIYNszqqXE01MyIiIs5y/jz07QtLl5rLjzwCM2ZA4cKWhpXbKZkRERFxht9+g/bt4fBh8PSEt94yx46x2ayOLNdTMiMiIuIMISGQkgJ33QWLFsF991kdUZ6hZEZERCSrLl4EPz+z9qVIEVi+HMLCIDDQ6sjyFDUAFhERyYoff4TKlWH27GvrqlRRImMBJTMiIiKOSEkxR+9t0gSOHTN7LiUnWx1VnqZkRkREJLNOnYK2bWHUKDOB6dEDNmwwpycQy6jNjIiISGasXw/du8OJE+DjA+++a3bDVm8lyymZERERuZ0jR+CBByApCSpVMnsrValidVTyP0pmREREbqd0aXjhBbONzHvvQcGCVkck11EyIyIikp41a8ypCO6+21wePx7yqampK9JVERERuV5SErz0ErRsaU4UmZBgrlci47JUMyMiIpLqn3+u9VACqFnT7IotLk3JjIiICMDKldC7N5w5Y47qO326mdiIy1OdmYiI5G1JSea4MW3amIlMtWrw889KZNyIkhkREcnbUlJg7Vrz52eega1boXx5a2MSh+gxk4iI5E2GYQ545+kJCxaYtTGPPmp1VJIFSmZERCRvSUyE0aPBywtefdVcFxFhvsQtWfqYaeLEidSuXRt/f3+KFy/Oww8/zB9//JFmnz59+mCz2dK86tWrZ1HEIiLi1qKioHFjmDQJJk6EG75zxD1ZmsysX7+eQYMGsXXrVlavXk1SUhKtWrUiLi4uzX6tW7fmxIkT9tfy5cstilhERNzW0qVQowb89BMUKgRLlkCFClZHJU5g6WOmlStXplmeNWsWxYsX5+eff6Zx48b29V5eXgQHB+d0eCIikhskJMDIkTB1qrlct67ZRqZMGUvDEudxqd5MMTExAAQFBaVZv27dOooXL0758uV58sknOXXq1C2PkZCQQGxsbJqXiIjkUYYBDz54LZEZPtwcEE+JTK7iMsmMYRgMGzaMRo0aUeW6mUjbtGnDp59+ytq1a5k0aRLbt2+nefPmJKQOL32DiRMnEhgYaH+FhYXl1EcQERFXY7NBv34QFARffw1vvWX2XpJcxWYYhmF1EACDBg3i22+/ZdOmTZQqVeqW+504cYLw8HAWLFhAp06dbtqekJCQJtGJjY0lLCyMmJgYAgICsiV2ERFxIfHxZkPfihWvrTt3zkxoxG3ExsYSGBiYqe9vl+iaPWTIEJYtW8aGDRsyTGQAQkJCCA8P58CBA+lu9/LywsvLKzvCFBERV/fnn9ClC5w+Dbt2QbFi5nolMrmapY+ZDMNg8ODBLFmyhLVr1xKRiT7+Z8+e5ejRo4SEhORAhCIi4jbmz4f77oNffzXHkjl40OqIJIdYmswMGjSIefPmMX/+fPz9/YmOjiY6OporV64AcOnSJUaMGMGWLVuIiopi3bp1dOjQgaJFi/LII49YGbqIiLiKy5fhySehZ0+4dAmaNDETmrp1rY5McoilycwHH3xATEwMTZs2JSQkxP5auHAhAPnz52fPnj107NiR8uXLExkZSfny5dmyZQv+/v5Whi4iIq5g/34zafn4Y7Ox70svwfffQ2io1ZFJDrK0zczt2h77+PiwatWqHIpGRETczuuvw2+/QYkSMG8ePPCA1RGJBVyiAbCIiEiWvPMO5MsHEyaABlfNs1xmnBkREZHb+u03czTf1Jr9wECYOVOJTB6nmhkREXF9hgEzZsCQIeY4MuXKmY1+RVAyIyIiru7iRXjqKbPrNZjTEzz8sKUhiWvRYyYREXFdu3ZBrVpmIpM/P0ycCMuXXxsMTwTVzIiIiKuaNw/69zdnvS5VypzpumFDq6MSF6SaGRERcU1lykBSErRvb9bQKJGRW1DNjIiIuI7YWEidVLBRI9i8GWrXNgfEE7kF1cyIiIj1DAPefdesjdm379r6OnWUyMhtKZkRERFrnT8PnTvDs8+aP8+caXVE4mb0mElERKzz00/QrRtERYGHB7z1ljmWjIgDVDMjIiI5zzBg8mSzXUxUFNx1l9k+5tln9VhJHKZkRkREct68eTB8uNlb6bHHYOdOczwZkSxQMiMiIjmve3do2RKmTYOFC805lkSySG1mREQk+6WkwKxZ0KsXeHlBgQKwapUeKYlTqGZGRESy1+nT0K6dOZrv889fW69ERpxENTMiIpJ91q+HHj3g+HHw9oYqVayOSHIh1cyIiIjzJSfDf/8LzZubiUzFirBtm1k7I+JkqpkRERHnOnkSevaENWvM5chIeP99KFjQ2rgk11IyIyIizhUXB9u3g6+v2VspMtLqiCSXUzIjIiJ3zjCuNei96y5YtAjCwqByZWvjkjxBbWZEROTOHD8ODzwA3313bd2DDyqRkRyjmhkREcm6Vaugd2+z+3VUFPzxhzmGjEgOUs2MiIg4LikJRo+G1q3NRKZaNVixQomMWEJ3nYiIOObYMXM6gk2bzOWnnoK33zbHkRGxgJIZERHJvOPHoXp1OHsW/P3h44+hSxero5I8TsmMiIhkXmgotG8Pv/1mThBZtqzVEYkomRERkds4fNgc8K5oUXN52jTIn9+cMFLEBagBsIiI3NrSpeZjpchIc+ZrMAfDUyIjLkTJjIiI3CwxEYYOhUcegQsX4MwZiImxOiqRdCmZERGRtA4ehIYN4Z13zOXhw2HjRihc2Nq4RG5BbWZEROSazz+Hfv0gNhaCgmD2bOjQweqoRDKkZEZEREzx8fD882Yi06ABfPYZlC5tdVQit6XHTCIiYvL2Nrtbv/ACrFunREbchmpmRETysgUL4NIl6N/fXK5Vy3yJuBElMyIiedGVK/Cvf8FHH4Gnp9ngt1Ilq6MSyRIlMyIiec3vv8Njj5mj+NpsMHIklCtndVQiWaZkRkQkL5k7F55+Gi5fhhIlYN48eOABq6MSuSNKZkRE8gLDgAEDzIkhAZo3h08/heBga+MScQL1ZhIRyQtsNihTBvLlg/Hj4bvvlMhIruFwzcyVK1cwDANfX18ADh8+zJdffknlypVp1aqV0wMUEZEsMgxzCoJChczlUaOgdWu47z5LwxJxNodrZjp27MjcuXMBuHDhAnXr1mXSpEl07NiRDz74wOkBiohIFly8CL17w/33m+1jwKyVUSIjuZDDyczOnTu5//77Afj8888pUaIEhw8fZu7cuUydOtXpAYqIiIN+/dUcK+bTT2H/fli/3uqIRLKVw8nM5cuX8ff3B+C7776jU6dO5MuXj3r16nH48GGnBygiIplkGDB9OtStC3/+CSVLmiP5tmljdWQi2crhZObuu+9m6dKlHD16lFWrVtnbyZw6dYqAgACnBygiIpkQGwvdusFTT0FCArRrB7t2QaNGVkcmku0cTmbGjBnDiBEjKFOmDHXq1KF+/fqAWUtTo0YNpwcoIiKZMHgwLFoEBQrAm2/CsmVQtKjVUYnkCJthGIajb4qOjubEiRNUq1aNfPnMfGjbtm0EBARQsWJFpwd5J2JjYwkMDCQmJkY1RyKSex07Bg8/DO+9B/XqWR2NyB1z5Ps7S+PMBAcH4+/vz+rVq7ly5QoAtWvXdrlERkQk17pwAebMubZcqhRs365ERvIkh5OZs2fP0qJFC8qXL0/btm05ceIEAP3792f48OFOD1BERG6wbRvUqAF9+sBXX11bb7NZFpKIlRxOZp577jk8PDw4cuSIfeA8gK5du7Jy5UqnBiciItcxDHj7bbNRb1QURESYPZZE8jiHRwD+7rvvWLVqFaVKlUqzvly5cuqaLSKSXc6dM2tivv7aXH70UXOepcBAS8MScQUO18zExcWlqZFJdebMGby8vJwSlIiIXGfLFqhe3UxkPD3h/ffNnktKZESALCQzjRs3tk9nAGCz2UhJSeHNN9+kWbNmTg1OREQweyodPQp33w1bt8Izz6h9jMh1HH7M9Oabb9K0aVN27NhBYmIiI0eOZO/evZw7d44ff/wxO2IUEcl7DONawvLYYzBrFnTqBBpiQuQmDtfMVK5cmd27d1OnTh1atmxJXFwcnTp14pdffqFs2bLZEaOISN6yYYM5IeT/eosCZnsZJTIi6crSoHnuRIPmiYjbSEmBiRNhzBjz5379zEa+InmQI9/fDj9m2rBhQ4bbGzdunOljTZw4kSVLlvD777/j4+NDgwYNeP3116lQoYJ9H8MwGD9+PP/3f//H+fPnqVu3Lu+//z733HOPo6GLiLiukyehd29Yvdpc7t0bpkyxNCQRd+FwMtO0adOb1tmua4iWnJyc6WOtX7+eQYMGUbt2bZKSknjxxRdp1aoV+/bto2DBggC88cYbTJ48mdmzZ1O+fHleeeUVWrZsyR9//GGfvVtExK2tXQs9e0J0NPj4wLRp5mMlEckUhx8zxcTEpFm+evUqv/zyCy+99BKvvvoqLVq0yHIwp0+fpnjx4qxfv57GjRtjGAahoaEMHTqU559/HoCEhARKlCjB66+/zsCBA297TD1mEhGX9tVX8MgjZoPfe+4xu1xXrmx1VCKWy9bHTIHpjGvQsmVLvLy8eO655/j5558dPaRdaqIUFBQEwKFDh4iOjqZVq1b2fby8vGjSpAmbN2/OVDIjIuLSWrSAChWgYUOYOhXSGcdLRDLmcDJzK8WKFeOPP/7I8vsNw2DYsGE0atSIKlWqAObs3AAlSpRIs2+JEiVuOdpwQkICCQkJ9uXY2NgsxyQiki127DB7K9ls4Odnjh2jAfBEsszhZGb37t1plg3D4MSJE7z22mtUq1Yty4EMHjyY3bt3s2nTppu22W4YHMowjJvWpZo4cSLjx4/PchwiItkmKQnGjjV7LL35JqROzqtERuSOOJzMVK9eHZvNxo1NberVq8fMmTOzFMSQIUNYtmwZGzZsSDPnU3BwMGDW0ISEhNjXnzp16qbamlSjRo1i2LBh9uXY2FjCwsKyFJeIiNMcOwbdu0Pqf9iioiwNRyQ3cTiZOXToUJrlfPnyUaxYMby9vR0+uWEYDBkyhC+//JJ169YRERGRZntERATBwcGsXr2aGjVqAJCYmMj69et5/fXX0z2ml5eX5ogSEdeyfDk8/jicPQv+/vDRR9C1q9VRieQaDicz4eHhTjv5oEGDmD9/Pl999RX+/v72NjKBgYH4+Phgs9kYOnQoEyZMoFy5cpQrV44JEybg6+tLjx49nBaHiEi2uHoVXnzRfKQEULMmLFxozrEkIk6Tqa7ZU6dOzfQBn3322cyf/BbtXmbNmkWf/42xkDpo3vTp09MMmpfaSPh21DVbRCyzezfUqmUmNUOGmEmNao5FMsWR7+9MJTM3Pv655cFsNg4ePJi5KHOIkhkRsdT06VCsmDlJpIhkmtPHmbmxnYyIiKQjMRFGj4ZevaB6dXOdxsMSyXZOG2dGRCRPO3jQbNS7Ywd8/TX89ht4eFgdlUiekKVk5tixYyxbtowjR46QmJiYZtvkyZOdEpiIiNv44gvo2xdiY6FwYXjrLSUyIjnI4WRmzZo1PPTQQ0RERPDHH39QpUoVoqKiMAyDmjVrZkeMIiKuKT4eRoyA9983l+vXhwULoHRpa+MSyWPyOfqGUaNGMXz4cH777Te8vb354osvOHr0KE2aNOGxxx7LjhhFRFzP6dPQoMG1RGbkSFi/XomMiAUcTmb2799PZGQkAAUKFODKlSv4+fnx8ssv33IgOxGRXCcoCIoUgaJFzUHxXn9dj5ZELOLwY6aCBQvaJ3IMDQ3l77//5p577gHgzJkzzo1ORMSVXLli/uvjA/nzw7x55nxLJUtaG5dIHudwMlOvXj1+/PFHKleuTLt27Rg+fDh79uxhyZIl1KtXLztiFBGx3u+/Q5cuZruY6dPNdbeYI05Eclamk5nTp09TrFgxJk+ezKVLlwAYN24cly5dYuHChdx99928/fbb2RaoiIhlPvkEnn4a4uLg5En473+heHGroxKR/8nUCMAAnp6ePPTQQ/Tr14/WrVvfcioCV6MRgEUky+LizGkIZs0yl5s1g08/hZAQa+MSyQMc+f7OdAPgOXPmEBsbS4cOHQgLC+Oll17i77//vuNgRURc0t69UKeOmcjYbDBuHKxerURGxAVlumYm1dGjR5k5cyZz5szh8OHDNG7cmP79+9O5c2e8vb2zK84sU82MiDgsMdGc2froUQgOhvnzzVoZEckx2VIzkyosLIyxY8dy8OBBvvvuO0qWLMmAAQMICQnhmWeeyXLQIiIuw9MTpk2DBx+EX39VIiPi4hyumUnPF198wYABA7hw4QLJycnOiMtpVDMjIpmye7fZuLdly2vrDMN8xCQiOS5ba2ZSRUVFMXbsWMqUKUPXrl2pWbMmn376aVYPJyJiDcOA//s/s31M165w5Mi1bUpkRNyCQ+PMxMfHs3jxYmbNmsWGDRsoWbIkffr04YknnqBMmTLZFKKISDaJjYWBA835lABatABfX2tjEhGHZTqZGTBgAIsWLSI+Pp6OHTvy7bff0qpVK7fpoi0iksbOnWZNzF9/QYECMGECDB8O+bJcYS0iFsl0MrN161bGjx9P7969CQoKys6YRESy1/vvw7BhZq+l0qXNmpn69a2OSkSyKNPJzO7du7MzDhGRnLNnj5nIPPSQOY6M/oMm4tYcnptJRMQtXd8z6e23oV49iIxUI1+RXEAPh0UkdzMMmDIF2raF1KEjfHygTx8lMiK5hGpmRCT3OncOnngCli0zlz//3Gz0KyK5ipIZEcmdtmyBbt3McWM8PWHyZOjSxeqoRCQbZCqZcaTxb9WqVbMcjIjIHUtJgUmTYPRoSEoy51hatAhq1LA6MhHJJplKZqpXr47NZsMwjNuOK+Nq0xmISB4zdCi8+675c7duMH06aCoTkVwtUw2ADx06xMGDBzl06BBffPEFERERTJs2jV9++YVffvmFadOmUbZsWb744ovsjldEJGP9+0PhwmYSM3++EhmRPCBTNTPh4eH2nx977DGmTp1K27Zt7euqVq1KWFgYL730Eg8//LDTgxQRuaWUFNi+HerWNZerVoWoKCUxInmIw12z9+zZQ0RExE3rIyIi2Ldvn1OCEhHJlJMnoXVraNQIfvrp2nolMiJ5isPJTKVKlXjllVeIj4+3r0tISOCVV16hUqVKTg1OROSW1q6F6tVh9Wrw8Eg727WI5CkOd83+8MMP6dChA2FhYVSrVg2AX3/9FZvNxjfffOP0AEVE0khOhv/+F15+2RwQr3Jls7fSPfdYHZmIWMRmGIbh6JsuX77MvHnz+P333zEMg8qVK9OjRw8KFiyYHTHekdjYWAIDA4mJiSFAVc8i7u3ECejZE374wVzu29fsueTra21cIuJ0jnx/Z2nQPF9fXwYMGJCl4EREsuyLL8xEpmBB+OAD6N3b6ohExAVkaW6mTz75hEaNGhEaGsrhw4cBePvtt/nqq6+cGpyISBqDBsHw4bBjhxIZEbFzOJn54IMPGDZsGG3atOH8+fP2QfIKFy7MlClTnB2fiORlx46ZE0JevGgu22zw1ltQsaKlYYmIa3E4mXn33Xf56KOPePHFFylQ4NpTqlq1arFnzx6nBiciedjy5WZvpTlzYNgwq6MRERfmcDJz6NAhaqQzx4mXlxdxcXFOCUpE8rCrV2HkSGjXDs6ehZo14fnnrY5KRFyYw8lMREQEu3btumn9ihUrqFy5sjNiEpG86sgRaNIE3nzTXB48GDZvNieLFBG5BYd7M/373/9m0KBBxMfHYxgG27Zt47PPPmPixIl8/PHH2RGjiOQFGzdCx45w/jwEBsKMGdC5s9VRiYgbcDiZeeKJJ0hKSmLkyJFcvnyZHj16ULJkSd555x26deuWHTGKSF5Qrhx4ekLt2rBwIaQzbYqISHqyNGheqjNnzpCSkkLx4sWdGZNTadA8ERd29iwUKXJtef9+KFvWTGpEJE9z5Pvb4TYzzZs358KFCwAULVrUnsjExsbSvHlzx6MVkbxpyRIzcVm48Nq6SpWUyIiIwxxOZtatW0diYuJN6+Pj49m4caNTghKRXCwhAYYMMdvDxMTArFnmHEsiIlmU6TYzu3fvtv+8b98+oqOj7cvJycmsXLmSkiVLOjc6Ecld/voLunaFnTvN5ZEj4ZVXzMHwRESyKNPJTPXq1bHZbNhstnQfJ/n4+PDuu+86NTgRyUUWLoQnnzRH8y1SBObOhbZtrY5KRHKBTCczhw4dwjAM7rrrLrZt20axYsXs2zw9PSlevDj58+fPliBFxM3t3g2pvR0bNYLPPoNSpayNSURyjUwnM+Hh4QCkpKRkWzAikktVrQojRpiNe8ePhwIOjwohInJLDv9FmThxIiVKlKBv375p1s+cOZPTp0/zvIYdFxEwa18aNoTSpc3lN95Q2xgRyRYO92aaPn06FdOZsfaee+7hww8/dEpQIuLGLl+Gfv2gRw/o3t2cawmUyIhItnG4ZiY6OpqQkJCb1hcrVowTJ044JSgRcVP79kGXLrB3r5m8tGoF+Rz+P5OIiEMc/isTFhbGjz/+eNP6H3/8kdDQUKcEJSJuxjDM8WJq1TITmeBgWLMGxo4FdQwQkWzmcM1M//79GTp0KFevXrV30V6zZg0jR45k+PDhTg9QRFxcXBw8/TR88om53LIlzJsHLjzNiYjkLg4nMyNHjuTcuXM888wz9pGAvb29ef755xk1apTTAxQRF5cvH+zaZf773//CCy/o0ZKI5KgsTzR56dIl9u/fj4+PD+XKlcPLy8vZsTmFJpoUyQaGYb5Sk5bff4dTp6BxY2vjEpFcw5Hv7zuaNdsdKJkRcbLYWBg4EO65B/7zH6ujEZFcypHv70w9ZurUqROzZ88mICCATp06ZbjvkiVLMh+piLiXX34xeyv99Rd4eUHfvqCG/yJisUwlM4GBgdj+N0ZEYGBgtgYkIi7IMOCDD+C55yAx0RwIb8ECJTIi4hL0mElEMhYTA/37w+efm8sPPWR2ww4KsjYuEcnVHPn+trTLwYYNG+jQoQOhoaHYbDaWLl2aZnufPn3sM3WnvurVq2dNsCJ5UVISNGhgJjIeHjBlCixdqkRGRFxKph4z1ahRw/6Y6XZ27tyZ6ZPHxcVRrVo1nnjiCTp37pzuPq1bt2bWrFn2ZU9Pz0wfX0TuUIECMGSIOa/SwoVQu7bVEYmI3CRTyczDDz9s/zk+Pp5p06ZRuXJl6tevD8DWrVvZu3cvzzzzjEMnb9OmDW3atMlwHy8vL4KDgx06rojcgXPnIDoaKlc2lwcOhF69wM/P2rhERG4hU8nM2LFj7T/379+fZ599lv/+97837XP06FHnRgesW7eO4sWLU6hQIZo0acKrr75K8QxGFk1ISCAhIcG+HBsb6/SYRHKtLVugWzdz/JhffoFChcw5lpTIiIgLc7jNzOLFi3n88cdvWt+rVy+++OILpwSVqk2bNnz66aesXbuWSZMmsX37dpo3b54mWbnRxIkTCQwMtL/CwsKcGpNIrpSSAm++aQ56d+SI+Xjp5EmroxIRyRSHkxkfHx82bdp00/pNmzbh7e3tlKBSde3alXbt2lGlShU6dOjAihUr+PPPP/n2229v+Z5Ro0YRExNjf2VHbZFIrnLmDHToACNHmg1+u3WDn3+GChWsjkxEJFMcnptp6NChPP300/z888/2nkVbt25l5syZjBkzxukBXi8kJITw8HAOHDhwy328vLxcdmoFEZezcSN07w7//APe3vDOO/Dkk+ajJRERN+FwMvPCCy9w11138c477zB//nwAKlWqxOzZs+nSpYvTA7ze2bNnOXr0KCEhIdl6HpE8Y/JkM5GpUAEWLYKqVa2OSETEYQ4nMwBdunRxSuJy6dIl/vrrL/vyoUOH2LVrF0FBQQQFBTFu3Dg6d+5MSEgIUVFRjB49mqJFi/LII4/c8blFBPj4YyhTxpztWo18RcRNZWnQvAsXLvDxxx8zevRozp07B5jjy/zzzz8OHWfHjh3UqFGDGjVqADBs2DBq1KjBmDFjyJ8/P3v27KFjx46UL1+eyMhIypcvz5YtW/D3989K2CKybh2MGGFOTwBQpAi8/bYSGRFxaw7XzOzevZsHHniAwMBAoqKi6N+/P0FBQXz55ZccPnyYuXPnZvpYTZs2JaPZFFatWuVoeCKSnuRkePVVGD/e7LlUp445YaSISC7gcM3MsGHD6NOnDwcOHEjTe6lNmzZs2LDBqcGJiBNER0OrVjB2rJnIPPEEtGtndVQiIk7jcM3M9u3bmT59+k3rS5YsSXR0tFOCEhEn+f576NkTTp2CggXNma9797Y6KhERp3K4Zsbb2zvdUXX/+OMPihUr5pSgRMQJJk0ya2ROnYJ774UdO5TIiEiu5HAy07FjR15++WWuXr0KgM1m48iRI7zwwgu3nCxSRCxQrZr578CB8NNPULGitfGIiGQTm5FRC9x0xMbG0rZtW/bu3cvFixcJDQ0lOjqa+vXrs3z5cgoWLJhdsWZJbGwsgYGBxMTEEBAQYHU4ItnrzBkoWvTa8m+/QZUq1sUjIpJFjnx/O9xmJiAggE2bNrF27Vp27txJSkoKNWvW5IEHHshywCJyh65ehZdegg8/NKciKFvWXK9ERkTyAIeSmaSkJLy9vdm1axfNmzenefPm2RWXiGTWkSPmlASbN5vLX30Fw4ZZG5OISA5yKJkpUKAA4eHhJCcnZ1c8IuKIr7+GPn3g3DkIDIQZM0Bt10Qkj3G4AfB//vMfRo0aZR/5V0QskJgIw4fDQw+ZiUzt2rBzpxIZEcmTHG4zM3XqVP766y9CQ0MJDw+/qcHvzp07nRaciNzC+++bk0QCDB0Kr78Onp6WhiQiYhWHk5mOHTtis9myIxYRyaxBg2DVKnj6aejY0epoREQs5XDXbHejrtmSKyQkmKP3Dh4MBbI02b2IiFtx5Ps7021mLl++zKBBgyhZsiTFixenR48enDlz5o6DFZHb+OsvaNAAnnsOxoyxOhoREZeT6WRm7NixzJ49m3bt2tGtWzdWr17N008/nZ2xiciiRVCzptm4t0gRaNTI6ohERFxOpuurlyxZwowZM+jWrRsAvXr1omHDhiQnJ5M/f/5sC1AkT7pyxRwr5sMPzeVGjeCzz6BUKWvjEhFxQZmumTl69Cj333+/fblOnToUKFCA48ePZ0tgInnWgQNQr56ZyNhs8OKL8MMPSmRERG4h0zUzycnJeN7Q9bNAgQIkJSU5PSiRPC0pyWwnU6wYfPoptGxpdUQiIi4t08mMYRj06dMHLy8v+7r4+HieeuqpNGPNLFmyxLkRiuQFKSmQ738VpZUqwZIlULUqhIRYG5eIiBvIdDITGRl507pevXo5NRiRPGnfPujRA959F1If5T74oLUxiYi4EY0zI2Kl2bPNAfAuX4b77oPt2812MiIieVy2jDMjIk506RJERsITT5iJzAMPwLffKpEREckCJTMiOW3PHnNiyLlzzXYyr7xiTk1QooTVkYmIuCWNiy6Sk37/HerUgfh4KFnSHDvmuiEPRETEcUpmRHJShQrQoYP5mGnuXCha1OqIRETcnpIZkez2668QHg6FCpltYubMAS+va12xRUTkjuivqUh2MQxzpuu6daF/f3MZwMdHiYyIiBOpZkYkO8TEwJNPwuLF5vLVq2Y7GR8fa+MSEcmF9N9DEWfbscOc6XrxYvDwgMmTYelSJTIiItlENTMizmIYMHUq/PvfZk1MmTKwcKHZe0lERLKNamZEnCUmBt5800xkOnWCX35RIiMikgNUMyPiLIUKwYIFsGuXOUWBRvMVEckRSmZEsiolBd5+G4oXh969zXWNGpkvERHJMUpmRLLi7FlzbqVvvwVfX2jSBEqXtjoqEZE8ScmMiKN+/BG6dYNjx8zB7yZPhrAwq6MSEcmz1ABYJLNSUuC118xamGPHoHx5+OknGDhQ7WNERCykmhmRzEhOhoceguXLzeVevczRff38rI1LRERUMyOSKfnzQ/Xq5sB3M2aYk0QqkRERcQk2w0idMCZ3io2NJTAwkJiYGAICAqwOR9xJcjKcP39tZuukJDh40Hy8JCIi2cqR72/VzIikJzoaHnwQ2rSBhARzXYECSmRERFyQkhmRG61ZYz5SWrMG9u+HX3+1OiIREcmAkhmRVElJMGYMtGwJJ0/Cvfeak0ZqSgIREZem3kwiAMePQ/fusGGDuTxgAEyZopmuRUTcgJIZEYD+/c1Exs8PPvrIHBRPRETcgh4ziQC89x40bQo7dyqRERFxM0pmJG86etQcLybVXXfBDz9AuXLWxSQiIlmix0yS93z9NfTpY44hExYGrVpZHZGIiNwB1cxI3pGYCMOHm9MSnDsH990Hd99tdVQiInKHVDMjeUNUFHTtCtu2mctDh8Lrr4Onp5VRiYiIEyiZkdzvq6/Mx0oXLkChQjB7NnTsaG1MIiLiNEpmJPc7f95MZOrVgwULIDzc6ohERMSJlMxI7pScbM50DWatjLc3dO4MHh6WhiUiIs6nBsCS+yxaBFWrwpkz19Z166ZERkQkl1IyI7lHfDw8/bTZ0HffPpg0yeqIREQkB+gxk+QOf/4JXbpcm+F61Ch4+WVrYxIRkRyhZEbc3/z5MHAgXLoExYrBJ5/Agw9aHZWIiOQQJTPi3j76yJzhGsy5lT79FEJDLQ1JRERyltrMiHvr0sUcxXfMGPj+eyUyIiJ5kKXJzIYNG+jQoQOhoaHYbDaWLl2aZrthGIwbN47Q0FB8fHxo2rQpe/futSZYcR1r14JhmD8HBprtZMaPv9YVW0RE8hRLk5m4uDiqVavGe++9l+72N954g8mTJ/Pee++xfft2goODadmyJRcvXszhSMUlxMVBZCS0aAEffnhtva+vdTGJiIjlLG0z06ZNG9q0aZPuNsMwmDJlCi+++CKdOnUCYM6cOZQoUYL58+czcODAnAxVrLZnj/lI6fffIV8+UEIrIiL/47JtZg4dOkR0dDStWrWyr/Py8qJJkyZs3rz5lu9LSEggNjY2zUvcmGHAxx9DnTpmIhMaCj/8ACNHWh2ZiIi4CJdNZqKjowEoUaJEmvUlSpSwb0vPxIkTCQwMtL/CwsKyNU7JRhcvQq9e8OST5oB4rVvDrl3QuLHVkYmIiAtx2WQmlc1mS7NsGMZN6643atQoYmJi7K+jR49md4iSXfbsMSeGzJ8fXnsNvv3WHEdGRETkOi47zkxwcDBg1tCEhITY1586deqm2prreXl54eXlle3xSQ5o0ADee8+cZ6lhQ6ujERERF+WyNTMREREEBwezevVq+7rExETWr19PgwYNLIxMsk1MjNlbaf/+a+ueflqJjIiIZMjSmplLly7x119/2ZcPHTrErl27CAoKonTp0gwdOpQJEyZQrlw5ypUrx4QJE/D19aVHjx4WRi3ZYscOc4LIgwfht99g+3az15KIiMhtWJrM7Nixg2bNmtmXhw0bBkBkZCSzZ89m5MiRXLlyhWeeeYbz589Tt25dvvvuO/z9/a0KWZzNMODdd2HECLh6FcLDYdo0JTIiIpJpNsNIHUo1d4qNjSUwMJCYmBgCAgKsDkeud/489OsHX35pLj/yCMyYAYULWxuXiIhYzpHvb5dtACy5XFQUNGtm/uvpCZMmwaBBkEFPNRERkfQomRFrlCoFJUua3a4XLoT77rM6IhERcVNKZnKJ5BSDbYfOcepiPMX9vbkvvDA/Hz5vX64TEQSQZp86EUHkz5d+TciNx6sTEURyisEnW6I4fO4y4UG+9K5fBs8CDrRtOXsW/P3NmpgCBUheuIifTydwAk+K/302w3gyiit/Plu662/8vOmVSUbnSz1mdMwVzsUlEujjwa/HLpCSYpAvn43qYYUJLeSTqXKMjrnCmUuJXLiciM0G9e8qSu2IoFteo3/OX2bV3mguJybh61mAlpVLcDE+iSA/L4ID0v8siUkpTFi+j0NnLuPjkY8HKhXnUkIyQX5eFPf3AgNOXYznXFyi/TipsV9JTGbC8n1Enb1MmSK+jG5bmfz5bGmud4+64ew6eiHT5ZeYlJLu/ZLRvXXobBw2oEZYYUKuK9vkFIPNf51hyc5jxCUmU7tMYSIbRNx0vKJ+//uclxI4dymBQr6eXLicSFBBT4ID014r+7WJjefcpYR097nV9Tx2Lo7v9p3kytUUIoqa5eXjmT/d+8Yeg58XRQt68nt0LEfOXQEMqoQG8NvxWAzDrJSsXqoQoYV908Rw47V5vnUl9vwTk+51uLHMu9YuzcLtR9L9nb1x34yu761+7xy95+uVLZLu+9Jcw4JeYIMzlxKy9Hfqxn0did2VZBS3q3wmV4kD1GYmy1zpIq787QTjlu0jOjbevi6fDVKuu7KFfD0AuHD5qn1dSKA3YztUpnWVa+P4pB5v/Nf7OBFz7XgFPfMTl5icZj8b0K5qCJO7VOfnw+cz/lLYtAm6d4dHH4W33073HIV8PHiiYRkGNy+Xblmm957gAG9qlSnMpgNnuHDl2mdL7/PagOtv9lt9/tRzjVu2l+jYhJu23ciRcrzejfGkF/Ot3Hh9vQrkIyEp5bbvu1FIoDfF/D3ZfczxaT8yKr+Jy/fx0cZDaWLMZ4MapQvx96m4NNfK1zM/V64mk95fopBAbx6qFsK8rUfSvf8eqFyc3/6JvWUZ3ypm4JbXJqvXs2Xl4nSuWSrDfTIrNYYvdh5j9b5Tmdr3lyPnbyrzG+WzwZP3RwDcdt+MyiqrZVTI14PXOt2b5n23e48j57px38zs44oyihsyfz2sitFZcTjy/a1kJgtc6Rdk5W8neGreziy9NzVd+KBXzTS//E/P24kzboqQQG/GtqtI62/nwksvQXIylC/P6k++ZcCSP255jlv9wXNWXKnS+/yp53K0TG1kXzm6qluV38Tl+5i+4ZA1QTmJO13PG5PinDjunf7t+PB/78vMexw51/X7ArfdxxUTmow+myPXIztlpvydEYcj39/q/+qg1It44/8iomPieXreTlb+diLHYklOMXhhyZ4svz/1Rhz/9T6SUwySUwzGf73PaX8YE49H4/PwQzB6tJnI9OxJ8rbtjFlzOMNzXLh8NU1ZOjuuVDd+/tRzZaVMDbKvHF1VeuWXmJTCRxvdO5EB97qe2RVXRse9078d45btJTEpJVPvceRc1+87btne2+6TnFHVlAUy89nSk5OfKbPln9Nlq2TGAa52EbcePJupRxIZMYATMfFsO3SObYfO3XH1eKq6R/awfPazNDm0k3gPL1L+7yP45BO2nbmaqXNc/2XizLjSO0/q5wfY+nfWyzQ7ytHV3Vh+n2yJyvDRhTvJi9fTEXfytyM6NoFPtkRl+j2OnCt134weEd9437qKO7nXcuozZbb8c7pslcw4wNUu4pa/zzrtWKcuxnPqonP+YBdMuMz0L1+lxKVzHCgSxkO9J/FT80fAZnPoHKll6ay4MpJ6ji0Hz9zxcXIiXleT+pkPn7tscSTOlVevpyOyWkZZuVecfT1c7do6I57s/kyZPX5Ol616MznA9S6i8/4LXNzf22nHivPyZfSDg2n+93Zeavk0Vzy97WXi6HlSG1hnt2vnuLNG3DkRqytK/dzhQb4WR+JcefV6OiKrZZSVe8XZ18PVrq8z4snuz5TZ4+d02apmxgGudhHr31X0jo9hw2yoWyciiDoRQYQEemfp67xB1C7qH/7Vvry8YiNGtHuOK55mWaSWSeo5Miu1p1hW48qM1M8PUL9skTs+jqOf0Z1df/8A9K5fBjfo9ZopefF6OiK9vx2ZFRzgRe/6ZTL9e+3I36nUfYMDvG67T+p96yru5G9dTn2mzJZ/TpetkhkHuNpFrFe2iL07b1akfo6xHcwxRfLns9m7/mX2lyl/SjLPbZzHvIUvMXXZmxS7dPMjtuvL5Ppz3C621PdlJa7MsnHt8wPUuytrZXr9cVLjzSXf6bd04/0D4Fkgn73rrztzp+uZXXHZbvHz9ctZLaNxD92DZ4F8mfq9duTv1PX7jnvonkzF7koy89ky2pYTnymz5Z/TZatkxgGudhHz57PxWqd7M7VvIV+Pm76kgwO9b+pC17pKCB/0qklwJv6XVfziWeYveJF/bV5APgy+v7sOF73SVh3fmCyknuPDXjVvmTSkV5aOxAXmuDgF/zeI2a0U9vW46fM7UqapQjIox4z+t3rjXZLeNbqVG28xL0cGL7xOSKA34UV8svTe9O4fgFFtKzOwcUSma2i8CuS75SwWIYHeDGwcke61tGGO7eJIjUBIoDcf9qrJhxlcm6xez5aVi2d4XEekxtmycvHb7hv8v30zU+b5bDCwcUSm9g2+rqxu/L3L6G9HRp+/kK+HvVv29e/J6Pfakb9T1++bmX1cUUZxO3I9rIrRqrLVODNZ4ErjzKTGc+MAbyX8PelRN5wyRQve8QjAUWfi+GzbkTTHb3LwZyZ/M4kiV2K55OnD6AcHsaxy0zTHuF2ZJKcYvLf2L2b9eCjNIGoZve92cV0/8B7Ae2sPMOvHqLQD6t1mcL5rZZp2IMJA7wJUCytEWGGfXDcC8LKdx3j+yz1cuXpt4L0S/p7cX64Yvl4F7ngE4MsJSWw8cJqTFxPTvQ4aAVgjAGsE4LQ0ArAGzUsjL4wAnBPx2I8fc5n7/u8tSk2fCkBcpSp4fL6Yn72KOfSl4KzYs/OPmatd4+yWY/dQHilPEbkzSmauk13JTJ4WGQlz58Izz5izXXurcaSIiDiXI9/f6potmZOUBAX+d7u8/745x1KHDtbGJCIighoAy+0kJsLw4fDII9hnAvTzUyIjIiIuQzUzcmtRUdCtG/z0k7n8ww/QvLmlIYmIiNxINTOSvqVLoUYNM5EpVAi+/FKJjIiIuCQlM5JWQgL861/mY6ULF6BuXfjlF3j4YasjExERSZeSGUmrVy+Yana7Zvhw2LABypSxNCQREZGMKJmRtEaOhOBg+PpreOst8PS0OiIREZEMqQFwXhcfD9u2QePG5nLt2nDokMaOERERt6Gambzszz+hXj1o1Qp+vTbjtRIZERFxJ0pm8qr58+G++8wkJiAAzp+3OiIREZEsUTKT11y+DE8+CT17wqVL0KQJ7NoFTZtaHZmIiEiWKJnJS/bvN7taf/yxOUXvmDHw/fcQGmp1ZCIiIlmmBsB5ydKl8NtvUKIEfPoptGhhdUQiIiJ3TMlMXjJypPloacgQs/u1iIhILqDHTLnZb79Bly5w5Yq5nD8/vPqqEhkREclVlMzkRoZhtoupXRsWL4axY62OSEREJNvoMVNuc/EiPPWU2fUa4MEHYcQIa2MSERHJRqqZyU127YJatcxEJn9+mDgRli+H4sWtjkxERCTbqGYmt1i6FLp1M2e9LlUKFiyAhg2tjkpERCTbqWYmt7jvPihYENq3N2tolMiIiEgeoZoZd/bPP1CypPlzWJg5YeRdd5kD4omIiOQRqplxR4YB774LZcvCsmXX1pctq0RGRETyHCUz7ub8eejcGZ591mwf89VXVkckIiJiKSUz7uSnn6BmTfjyS/DwgHfeMceTERERycOUzLgDw4BJk6BRI4iKMtvFbN5s1s7osZKIiORxSmbcwYYN5sB3SUnw2GOwc6c5noyIiIioN5NbaNIE/vUvqFDBHN1XtTEiIiJ2SmZcUUoKTJ1qDoKXOinklCmWhiQiIuKq9JjJ1Zw+De3awXPPQc+eZmIjIiIit6SaGVeyYQN07w7Hj4O3t/mzHimJiIhkSDUzriA5GV55BZo1MxOZihXN0Xz791cyIyIichuqmbHamTNm25g1a8zlyEh4/31zniURERG5LSUzVvP2hmPHwNcXpk0zkxkRERHJNCUzVkhOhnz5zEdIfn7w+efmcuXKVkcmIiLidtRmJqcdPw4tWsDbb19bV6WKEhkREZEsUjKTk1atgurVYf16s8FvTIzVEYmIiLg9JTM5ISkJRo2C1q3NcWSqVYOtWyEw0OrIRERE3J7azGS3o0fN8WJ+/NFcfuop8xGTt7e1cYmIiOQSSmayU1wc1KkD0dHg7w8ffwxdulgdlYiISK6ix0zZqWBB+Pe/oWZN+OUXJTIiIiLZwGYYhmF1ENkpNjaWwMBAYmJiCAgIyP4THj5s1sik9k4yDEhMBC+v7D+3iIhILuHI97dqZpxp6VKzt1KnTnDpkrnOZlMiIyIiko1cOpkZN24cNpstzSs4ONjqsG6WkABDh8Ijj8CFC2YvpdhYq6MSERHJE1y+AfA999zD999/b1/Onz+/hdGk4+BBsy3Mzz+by8OHw4QJ4OlpbVwiIiJ5hMsnMwUKFHDN2hgwpyHo18+shQkKgtmzoUMHq6MSERHJU1z6MRPAgQMHCA0NJSIigm7dunHw4MEM909ISCA2NjbNK1sYBnz4oZnINGgAu3YpkREREbGASyczdevWZe7cuaxatYqPPvqI6OhoGjRowNmzZ2/5nokTJxIYGGh/hYWFZU9wNhvMmwfjx8O6dZBd5xEREZEMuVXX7Li4OMqWLcvIkSMZNmxYuvskJCSQkJBgX46NjSUsLCznumaLiIjIHXOka7bLt5m5XsGCBbn33ns5cODALffx8vLCS12hRURE8gyXfsx0o4SEBPbv309ISIjVoYiIiIiLcOlkZsSIEaxfv55Dhw7x008/8eijjxIbG0tkZKTVoYmIiIiLcOnHTMeOHaN79+6cOXOGYsWKUa9ePbZu3Up4eLjVoYmIiIiLcOlkZsGCBVaHICIiIi7OpR8ziYiIiNyOkhkRERFxa0pmRERExK0pmRERERG3pmRGRERE3JqSGREREXFrSmZERETErSmZEREREbemZEZERETcmkuPAOwMhmEA5lTiIiIi4h5Sv7dTv8czkuuTmYsXLwIQFhZmcSQiIiLiqIsXLxIYGJjhPjYjMymPG0tJSeH48eP4+/tjs9mceuzY2FjCwsI4evQoAQEBTj22XKNyzjkq65yjss45Kuuc48yyNgyDixcvEhoaSr58GbeKyfU1M/ny5aNUqVLZeo6AgAD9guQAlXPOUVnnHJV1zlFZ5xxnlfXtamRSqQGwiIiIuDUlMyIiIuLWlMzcAS8vL8aOHYuXl5fVoeRqKueco7LOOSrrnKOyzjlWlXWubwAsIiIiuZtqZkRERMStKZkRERERt6ZkRkRERNyakhkRERFxa0pmHDRu3DhsNluaV3BwsNVh5QobNmygQ4cOhIaGYrPZWLp0aZrthmEwbtw4QkND8fHxoWnTpuzdu9eaYN3c7cq6T58+N93n9erVsyZYNzZx4kRq166Nv78/xYsX5+GHH+aPP/5Is4/ua+fITFnrvnaODz74gKpVq9oHxqtfvz4rVqywb7finlYykwX33HMPJ06csL/27NljdUi5QlxcHNWqVeO9995Ld/sbb7zB5MmTee+999i+fTvBwcG0bNnSPv+WZN7tyhqgdevWae7z5cuX52CEucP69esZNGgQW7duZfXq1SQlJdGqVSvi4uLs++i+do7MlDXovnaGUqVK8dprr7Fjxw527NhB8+bN6dixoz1hseSeNsQhY8eONapVq2Z1GLkeYHz55Zf25ZSUFCM4ONh47bXX7Ovi4+ONwMBA48MPP7QgwtzjxrI2DMOIjIw0OnbsaEk8udmpU6cMwFi/fr1hGLqvs9ONZW0Yuq+zU+HChY2PP/7YsntaNTNZcODAAUJDQ4mIiKBbt24cPHjQ6pByvUOHDhEdHU2rVq3s67y8vGjSpAmbN2+2MLLca926dRQvXpzy5cvz5JNPcurUKatDcnsxMTEABAUFAbqvs9ONZZ1K97VzJScns2DBAuLi4qhfv75l97SSGQfVrVuXuXPnsmrVKj766COio6Np0KABZ8+etTq0XC06OhqAEiVKpFlfokQJ+zZxnjZt2vDpp5+ydu1aJk2axPbt22nevDkJCQlWh+a2DMNg2LBhNGrUiCpVqgC6r7NLemUNuq+dac+ePfj5+eHl5cVTTz3Fl19+SeXKlS27p3P9rNnO1qZNG/vP9957L/Xr16ds2bLMmTOHYcOGWRhZ3mCz2dIsG4Zx0zq5c127drX/XKVKFWrVqkV4eDjffvstnTp1sjAy9zV48GB2797Npk2bbtqm+9q5blXWuq+dp0KFCuzatYsLFy7wxRdfEBkZyfr16+3bc/qeVs3MHSpYsCD33nsvBw4csDqUXC21x9iNmf2pU6du+h+AOF9ISAjh4eG6z7NoyJAhLFu2jB9++IFSpUrZ1+u+dr5blXV6dF9nnaenJ3fffTe1atVi4sSJVKtWjXfeeceye1rJzB1KSEhg//79hISEWB1KrhYREUFwcDCrV6+2r0tMTGT9+vU0aNDAwsjyhrNnz3L06FHd5w4yDIPBgwezZMkS1q5dS0RERJrtuq+d53ZlnR7d185jGAYJCQmW3dN6zOSgESNG0KFDB0qXLs2pU6d45ZVXiI2NJTIy0urQ3N6lS5f466+/7MuHDh1i165dBAUFUbp0aYYOHcqECRMoV64c5cqVY8KECfj6+tKjRw8Lo3ZPGZV1UFAQ48aNo3PnzoSEhBAVFcXo0aMpWrQojzzyiIVRu59BgwYxf/58vvrqK/z9/e3/Ww0MDMTHxwebzab72kluV9aXLl3Sfe0ko0ePpk2bNoSFhXHx4kUWLFjAunXrWLlypXX3dLb1k8qlunbtaoSEhBgeHh5GaGio0alTJ2Pv3r1Wh5Ur/PDDDwZw0ysyMtIwDLMb69ixY43g4GDDy8vLaNy4sbFnzx5rg3ZTGZX15cuXjVatWhnFihUzPDw8jNKlSxuRkZHGkSNHrA7b7aRXxoAxa9Ys+z66r53jdmWt+9p5+vbta4SHhxuenp5GsWLFjBYtWhjfffedfbsV97TNMAwj+1IlERERkeylNjMiIiLi1pTMiIiIiFtTMiMiIiJuTcmMiIiIuDUlMyIiIuLWlMyIiIiIW1MyIyIiIm5NyYyIuAWbzcbSpUuz9RxNmzZl6NCh2XoOEXE+JTMiksbmzZvJnz8/rVu3dvi9ZcqUYcqUKc4P6jY6dOjAAw88kO62LVu2YLPZ2LlzZw5HJSI5RcmMiKQxc+ZMhgwZwqZNmzhy5IjV4WRKv379WLt2LYcPH75p28yZM6levTo1a9a0IDIRyQlKZkTELi4ujkWLFvH000/Tvn17Zs+efdM+y5Yto1atWnh7e1O0aFE6deoEmI9oDh8+zHPPPYfNZsNmswEwbtw4qlevnuYYU6ZMoUyZMvbl7du307JlS4oWLUpgYCBNmjRxqCalffv2FC9e/KZ4L1++zMKFC+nXrx9nz56le/fulCpVCl9fX+69914+++yzDI+b3qOtQoUKpTnPP//8Q9euXSlcuDBFihShY8eOREVF2bevW7eOOnXqULBgQQoVKkTDhg3TTbpEJOuUzIiI3cKFC6lQoQIVKlSgV69ezJo1i+unb/v222/p1KkT7dq145dffmHNmjXUqlULgCVLllCqVClefvllTpw4wYkTJzJ93osXLxIZGcnGjRvZunUr5cqVo23btly8eDFT7y9QoACPP/44s2fPThPv4sWLSUxMpGfPnsTHx3PffffxzTff8NtvvzFgwAB69+7NTz/9lOk4b3T58mWaNWuGn58fGzZsYNOmTfj5+dG6dWsSExNJSkri4YcfpkmTJuzevZstW7YwYMAAe6InIs5RwOoARMR1zJgxg169egHQunVrLl26xJo1a+ztUV599VW6devG+PHj7e+pVq0aAEFBQeTPnx9/f3+Cg4MdOm/z5s3TLE+fPp3ChQuzfv162rdvn6lj9O3blzfffJN169bRrFkzwHzE1KlTJwoXLkzhwoUZMWKEff8hQ4awcuVKFi9eTN26dR2KN9WCBQvIly8fH3/8sT1BmTVrFoUKFWLdunXUqlWLmJgY2rdvT9myZQGoVKlSls4lIremmhkRAeCPP/5g27ZtdOvWDTBrO7p27crMmTPt++zatYsWLVo4/dynTp3iqaeeonz58gQGBhIYGMilS5ccarNTsWJFGjRoYI/377//ZuPGjfTt2xeA5ORkXn31VapWrUqRIkXw8/Pju+++u6N2QT///DN//fUX/v7++Pn54efnR1BQEPHx8fz9998EBQXRp08fHnzwQTp06MA777zjUI2ViGSOamZEBDBrZZKSkihZsqR9nWEYeHh4cP78eQoXLoyPj4/Dx82XL1+aRz8AV69eTbPcp08fTp8+zZQpUwgPD8fLy4v69euTmJjo0Ln69evH4MGDef/995k1axbh4eH25GvSpEm8/fbbTJkyhXvvvZeCBQsydOjQDM9hs9kyjD0lJYX77ruPTz/99Kb3FitWDDBrap599llWrlzJwoUL+c9//sPq1aupV6+eQ59NRG5NNTMiQlJSEnPnzmXSpEns2rXL/vr1118JDw+3f1lXrVqVNWvW3PI4np6eJCcnp1lXrFgxoqOj0yQFu3btSrPPxo0befbZZ2nbti333HMPXl5enDlzxuHP0aVLF/Lnz8/8+fOZM2cOTzzxhP3xz8aNG+nYsSO9evWiWrVq3HXXXRw4cCDD4xUrVixNTcqBAwe4fPmyfblmzZocOHCA4sWLc/fdd6d5BQYG2verUaMGo0aNYvPmzVSpUoX58+c7/NlE5NaUzIgI33zzDefPn6dfv35UqVIlzevRRx9lxowZAIwdO5bPPvuMsWPHsn//fvbs2cMbb7xhP06ZMmXYsGED//zzjz0Zadq0KadPn+aNN97g77//5v3332fFihVpzn/33XfzySefsH//fn766Sd69uyZpVogPz8/unbtyujRozl+/Dh9+vRJc47Vq1ezefNm9u/fz8CBA4mOjs7weM2bN+e9995j586d7Nixg6eeegoPDw/79p49e1K0aFE6duzIxo0bOXToEOvXr+df//oXx44d49ChQ4waNYotW7Zw+PBhvvvuO/7880+1mxFxMiUzIsKMGTN44IEH0tQmpOrcuTO7du1i586dNG3alMWLF7Ns2TKqV69O8+bN0/QGevnll4mKiqJs2bL2xyyVKlVi2rRpvP/++1SrVo1t27alaYgLZkPd8+fPU6NGDXr37s2zzz5L8eLFs/RZ+vXrx/nz53nggQcoXbq0ff1LL71EzZo1efDBB2natCnBwcE8/PDDGR5r0qRJhIWF0bhxY3r06MGIESPw9fW1b/f19WXDhg2ULl2aTp06UalSJfr27cuVK1cICAjA19eX33//nc6dO1O+fHkGDBjA4MGDGThwYJY+m4ikz2bc+EBYRERExI2oZkZERETcmpIZERERcWtKZkRERMStKZkRERERt6ZkRkRERNyakhkRERFxa0pmRERExK0pmRERERG3pmRGRERE3JqSGREREXFrSmZERETErSmZEREREbf2//wAG/Tp+r0cAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot actual vs predicted values\n", + "plt.scatter(y_test, y_pred)\n", + "plt.xlabel('Actual Values')\n", + "plt.ylabel('Predicted Values')\n", + "plt.title('Actual vs Predicted Values')\n", + "plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], color='red', linestyle='--') # Line of perfect prediction\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "c2dd8d01", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAHFCAYAAAAKbwgcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABYz0lEQVR4nO3deVxU9f4/8NewDSCLgMKAIuIaXMwlU0lzTXPJsDJNW3DJSu1ezcz0Zy6YS3a7Zlma1xIz07Ly5pJRmkupKG5YhlkppCm4C24gMJ/fH3xnZGB2ZjnnzOv5eMzj4Zz5nDOfMwfnvOezvD8qIYQAERERkcx5ubsCRERERI7AoIaIiIgUgUENERERKQKDGiIiIlIEBjVERESkCAxqiIiISBEY1BAREZEiMKghIiIiRWBQQ0RERIrAoIYUb8WKFVCpVPqHj48PoqOj8cQTT+CPP/5w2vvOnDkTKpXKqrINGzbEsGHDnFYXW+vjbg0bNjS4ZkFBQWjfvj1WrlzpkvfX/c3k5eXpt3Xt2hVdu3a1+Vhz587F119/7bC66eTl5UGlUmHFihUmy7z00ktQqVT47bffTJaZOnUqVCoVDh06ZPV7u+LvlcgeDGrIY6SnpyMzMxNbt27Fiy++iA0bNqBTp064cuWKU97v2WefRWZmplOO7Qk6duyIzMxMZGZm6oOM1NRULFmyxC31Wbx4MRYvXmzzfs4KaqwxcuRIAMDy5cuNvq7VarFy5Uq0atUKbdq0cWXViJyCQQ15jKSkJHTo0AFdu3bF1KlTMXnyZJw/f95pN5z69eujQ4cOTjm2J6hduzY6dOiADh06YODAgcjIyEBISAgWLFhgcp/y8nKUlJQ4pT6JiYlITEx0yrGdJSkpCe3atcMnn3yCsrKyaq9///33+Pvvv/XBD5HcMaghj9W2bVsAwLlz5wy2HzhwAA8//DDCw8Ph7++P1q1bY+3atQZlbt68iYkTJyI+Ph7+/v4IDw9H27ZtsWbNGn0ZY909paWlmDRpEjQaDQIDA9GpUydkZWVVq5upriJj3SKff/45evXqhejoaAQEBCAhIQGTJ0/GjRs3LH4G27ZtQ9euXREREYGAgAA0aNAAjz32GG7evGlynwEDBiAuLg5arbbaa+3btzf4xf/FF1+gffv2CA0NRWBgIBo1aoQRI0ZYrJcxtWvXRvPmzfHXX38BuNP98uabb2L27NmIj4+HWq3G9u3bAVh3HQFg79696NixI/z9/RETE4MpU6agtLS0Wjlj3U8lJSWYNWsWEhIS4O/vj4iICHTr1g179uwBAKhUKty4cQMff/yxviut8jEKCgrw/PPPo379+vDz80N8fDzS0tKqBSBnz57FoEGDEBwcjNDQUAwePBgFBQVWfW4jR45EQUEBvv3222qvpaenQ61W48knn0RxcTFefvlltGrVCqGhoQgPD0dycjLWr19v8T2M/V0CwI4dO6BSqbBjxw6D7Vu3bkWPHj0QEhKCwMBAdOzYET/88INBmQsXLuC5555DbGws1Go16tati44dO2Lr1q1WnTd5Jh93V4DIXXJzcwEAzZo102/bvn07evfujfbt2+ODDz5AaGgoPvvsMwwePBg3b97UjyOYMGECPvnkE8yePRutW7fGjRs3cPToUVy6dMnse44aNQorV67ExIkT0bNnTxw9ehSPPvoorl27Zvd5/PHHH+jbty/Gjx+PWrVq4bfffsP8+fORlZWFbdu2mdwvLy8P/fr1w/3334/ly5ejdu3aOHPmDDIyMnD79m0EBgYa3W/EiBFISUnBtm3b8MADD+i3//bbb8jKysK7774LAMjMzMTgwYMxePBgzJw5E/7+/vjrr7/M1smc0tJS/PXXX6hbt67B9nfffRfNmjXDW2+9hZCQEDRt2tTq65iTk4MePXqgYcOGWLFiBQIDA7F48WKsXr3aYn3KysrQp08f/PTTTxg/fjy6d++OsrIy7N27F6dOncJ9992HzMxMdO/eHd26dcO0adMAACEhIQAqApp27drBy8sL06dPR+PGjZGZmYnZs2cjLy8P6enpAIBbt27hgQcewNmzZzFv3jw0a9YM33zzDQYPHmzV5zZkyBC89NJLWL58Ofr376/ffuXKFaxfvx6PPPIIwsLCUFhYiMuXL2PixImoV68ebt++ja1bt+LRRx9Feno6nnnmGavez5JVq1bhmWeeQUpKCj7++GP4+vpi6dKlePDBB/Hdd9+hR48eAICnn34ahw4dwpw5c9CsWTNcvXoVhw4dsvh/jDycIFK49PR0AUDs3btXlJaWimvXromMjAyh0WhE586dRWlpqb7sXXfdJVq3bm2wTQghHnroIREdHS3Ky8uFEEIkJSWJAQMGmH3fGTNmiMr/xY4dOyYAiJdeesmg3KeffioA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DRuKzZs36/dhUFNzzvo/1bRpUxEbGyvKysr0+/3nP/8RGo3G6eekVM66Vtu3bxdRUVFi2bJl4ueffxbr1q0TsbGxYtasWa46NbdRZFBTv3598d577xlse/3110Xz5s0t7nv79m1x+vRpUVZWph+QVV5eLoQQIjY2VixYsMCg/IIFC0SDBg0cV3kP46xrpfPvf/9bhIaGiv379zu03p7GGdfp8OHDAoDw9vbWP1QqlVCpVMLb21v8+eefzjodRXPW/6nOnTuLHj16GJTfvHmzACBKSkocdwIexFnXqlOnTtXG3XzyySciICCg2nek0ihyTM3Nmzfh5WV4at7e3hanyQGAr68v6tevD29vb3z22Wd46KGH9MdKTk7Gli1bDMp///33uO+++xxXeQ/jrGsFAP/+97/x+uuvIyMjA23btnV43T2JM67TXXfdhV9++QXZ2dn6x8MPP4xu3bohOzsbsbGxzjodRXPW/6mOHTvizz//NDjO77//jujoaPj5+Tn2JDyEs66VqeOKioYMx52AFLk7qnKG1NRUUa9ePf00uXXr1ok6deqISZMm6ctMnjxZPP300/rnx48fF5988on4/fffxb59+8TgwYNFeHi4yM3N1ZfZvXu38Pb2Fm+88YY4duyYeOONNzilu4acda3mz58v/Pz8xJdffiny8/P1j2vXrrny9BTDWdfJ2Puw+6lmnHWtTp06JYKCgsSLL74ojh8/LjZt2iQiIyPF7NmzXXl6iuKsazVjxgwRHBws1qxZI06ePCm+//570bhxYzFo0CBXnp5bKDKoKSoqEuPGjRMNGjQQ/v7+olGjRmLq1KkGTaSpqamiS5cu+uc5OTmiVatWIiAgQISEhIiUlBTx22+/VTv2F198IZo3by58fX3FXXfdJb766itXnJJiOetaxcXFCQDVHjNmzHDRmSmLM/9PVcagpuacea327Nkj2rdvL9RqtWjUqJGYM2eOwRgbso2zrlVpaamYOXOmaNy4sfD39xexsbFizJgx4sqVKy46M/dRCaH0tigiIiLyBIocU0NERESeh0ENERERKQKDGiIiIlIEBjVERESkCAxqiIiISBEY1BAREZEiMKghIiIiRWBQQ0QON3PmTLRq1Ur/fNiwYRgwYIDL65GXlweVSoXs7Gynvk/Dhg2xcOFCp74HEVnGoIbIQwwbNgwqlQoqlQq+vr5o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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Calculate residuals\n", + "residuals = y_test - y_pred\n", + "\n", + "# Plot residuals\n", + "plt.scatter(y_pred, residuals)\n", + "plt.axhline(y=0, color='red', linestyle='--')\n", + "plt.xlabel('Predicted Values')\n", + "plt.ylabel('Residuals')\n", + "plt.title('Residuals vs Predicted Values')\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "34acb4b1", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/README.md.txt b/README.md.txt new file mode 100644 index 0000000..ac6b882 --- /dev/null +++ b/README.md.txt @@ -0,0 +1,85 @@ +# Elastic Net Regression on Boston Housing Dataset + +## Project Overview + +This project implements Elastic Net regression, a regularization technique that combines L1 (Lasso) and L2 (Ridge) regularization methods, to predict housing prices in Boston. Elastic Net is particularly useful when dealing with datasets that may have multicollinearity, as it encourages sparsity in the model coefficients and can handle situations where the number of predictors is greater than the number of observations. + +### Objectives + +- To predict the median value of owner-occupied homes in Boston. +- To demonstrate the application of Elastic Net regularization in linear regression. +- To optimize hyperparameters using cross-validation to improve model performance. + +## Dataset + +The dataset used in this project is the **Boston Housing dataset**, which contains various features about houses in Boston and their prices. The dataset can be downloaded from [Kaggle - Boston Housing](https://www.kaggle.com/c/boston-housing). + +### Features + +The dataset consists of the following attributes: + +- **CRIM**: Per capita crime rate by town +- **ZN**: Proportion of residential land zoned for lots over 25,000 sq. ft. +- **INDUS**: Proportion of non-retail business acres per town +- **CHAS**: Charles River dummy variable (1 if tract bounds river; 0 otherwise) +- **NOX**: Nitric oxides concentration (parts per 10 million) +- **RM**: Average number of rooms per dwelling +- **AGE**: Proportion of owner-occupied units built prior to 1940 +- **DIS**: Weighted distances to five Boston employment centers +- **RAD**: Index of accessibility to radial highways +- **TAX**: Full-value property tax rate per $10,000 +- **PTRATIO**: Pupil-teacher ratio by town +- **B**: \(1000(Bk - 0.63)^2\) where \(Bk\) is the proportion of Black residents by town +- **LSTAT**: Percentage of lower status of the population +- **MEDV**: Median value of owner-occupied homes in $1000s (target variable) + +## Installation + +To run this project, you'll need to have Python and Jupyter Notebook installed on your machine. Follow these steps to set up the environment: + +1. **Clone the repository**: + ```bash + git clone https://github.com/ZaibN/mlP1.git + +2. Navigate to the project directory: + cd ElasticNet_Project +3. Create a virtual environment (optional): + python -m venv venv +source venv/bin/activate # On Windows use `venv\Scripts\activate` + + +Usage +Open the Jupyter notebook: You can start Jupyter Notebook from the terminal: + +This will open a new tab in your web browser. + +Run the notebook cells sequentially: Open the EAR.ipynb notebook and execute each cell in order. The notebook is organized to guide you through the entire modeling process, from data preprocessing to model evaluation. + + +Hyperparameter Tuning +To enhance the model's performance, hyperparameter tuning was conducted to find the optimal values for alpha (the regularization strength) and l1_ratio (the mix ratio between L1 and L2 regularization). The tuning was performed using cross-validation on the training dataset. + +Best Parameters Found: +Alpha: 10.0 +L1 Ratio: 1.0 (indicating full L1 regularization) + + +Results +The final Elastic Net model achieved a Mean Squared Error (MSE) of 76.79 on the test dataset, indicating improved predictive performance compared to a baseline model without regularization. This demonstrates the effectiveness of Elastic Net in handling multicollinearity and preventing overfitting. + +Model Performance Metrics +Train MSE: 20.50 +Test MSE: 76.79 +R² Score: 0.80 + +Visualization +The notebook includes visualizations such as: +Scatter plots comparing actual vs predicted values. +Residual plots to check the distribution of errors. + + +Future Work +Experiment with different datasets to evaluate the model's robustness. +Implement additional regularization techniques, such as Ridge regression, for comparison. +Conduct feature engineering to create new predictors from existing features for potentially better model performance. + diff --git a/desktop.ini b/desktop.ini new file mode 100644 index 0000000..54dce81 --- /dev/null +++ b/desktop.ini @@ -0,0 +1,2 @@ +[LocalizedFileNames] +ENR.ipynb=@ENR,0