Skip to content
Permalink
8328ef52ee
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
1101 lines (1101 sloc) 78.2 KB
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Notebook showing linear regression using relevant independant variable(s) from a wide-ranging data set to calculate a single dependant\n",
"#### by Salih MSA"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Importing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Importing libraries"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"# Data visualisation functionality\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import seaborn as sns\n",
"\n",
"from sklearn.model_selection import train_test_split # method to split dataset into 4\n",
"from sklearn.linear_model import LinearRegression # linear regression algorithm\n",
"from sklearn.metrics import mean_squared_error, mean_absolute_error # accuracy testing method"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Importing data"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [],
"source": [
"data = pd.read_csv(\"headbrain.csv\") # import dataset (already contains headers)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data exploration & Preprocessing"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 237 entries, 0 to 236\n",
"Data columns (total 4 columns):\n",
" # Column Non-Null Count Dtype\n",
"--- ------ -------------- -----\n",
" 0 Gender 237 non-null int64\n",
" 1 Age Range 237 non-null int64\n",
" 2 Head Size(cm^3) 237 non-null int64\n",
" 3 Brain Weight(grams) 237 non-null int64\n",
"dtypes: int64(4)\n",
"memory usage: 7.5 KB\n"
]
}
],
"source": [
"data.info() # show basic stats"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Gender 0\n",
"Age Range 0\n",
"Head Size(cm^3) 0\n",
"Brain Weight(grams) 0\n",
"dtype: int64"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.isnull().sum() # no null values"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 114,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.duplicated().any() # no duplicated data\n",
"# no further preprocessing needed"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Gender</th>\n",
" <th>Age Range</th>\n",
" <th>Head Size(cm^3)</th>\n",
" <th>Brain Weight(grams)</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>4512</td>\n",
" <td>1530</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>3738</td>\n",
" <td>1297</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>4261</td>\n",
" <td>1335</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>3777</td>\n",
" <td>1282</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>4177</td>\n",
" <td>1590</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Gender Age Range Head Size(cm^3) Brain Weight(grams)\n",
"0 1 1 4512 1530\n",
"1 1 1 3738 1297\n",
"2 1 1 4261 1335\n",
"3 1 1 3777 1282\n",
"4 1 1 4177 1590"
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head() # show first couple values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Variable extraction "
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1530 1297 1335 1282 1590 1300 1400 1255 1355 1375 1340 1380 1355 1522\n",
" 1208 1405 1358 1292 1340 1400 1357 1287 1275 1270 1635 1505 1490 1485\n",
" 1310 1420 1318 1432 1364 1405 1432 1207 1375 1350 1236 1250 1350 1320\n",
" 1525 1570 1340 1422 1506 1215 1311 1300 1224 1350 1335 1390 1400 1225\n",
" 1310 1560 1330 1222 1415 1175 1330 1485 1470 1135 1310 1154 1510 1415\n",
" 1468 1390 1380 1432 1240 1195 1225 1188 1252 1315 1245 1430 1279 1245\n",
" 1309 1412 1120 1220 1280 1440 1370 1192 1230 1346 1290 1165 1240 1132\n",
" 1242 1270 1218 1430 1588 1320 1290 1260 1425 1226 1360 1620 1310 1250\n",
" 1295 1290 1290 1275 1250 1270 1362 1300 1173 1256 1440 1180 1306 1350\n",
" 1125 1165 1312 1300 1270 1335 1450 1310 1027 1235 1260 1165 1080 1127\n",
" 1270 1252 1200 1290 1334 1380 1140 1243 1340 1168 1322 1249 1321 1192\n",
" 1373 1170 1265 1235 1302 1241 1078 1520 1460 1075 1280 1180 1250 1190\n",
" 1374 1306 1202 1240 1316 1280 1350 1180 1210 1127 1324 1210 1290 1100\n",
" 1280 1175 1160 1205 1163 1022 1243 1350 1237 1204 1090 1355 1250 1076\n",
" 1120 1220 1240 1220 1095 1235 1105 1405 1150 1305 1220 1296 1175 955\n",
" 1070 1320 1060 1130 1250 1225 1180 1178 1142 1130 1185 1012 1280 1103\n",
" 1408 1300 1246 1380 1350 1060 1350 1220 1110 1215 1104 1170 1120]\n"
]
}
],
"source": [
"# We want to use the correlation of COMBINED yet only RELEVANT variables to determine our model\n",
"# therefore, we essentially split the data into our single dependancy...\n",
"y = data.iloc[:,-1].values # dependant\n",
"print(y)"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Brain Weight(grams) Gender Age Range Head Size(cm^3)\n",
"Brain Weight(grams) 1.000000 -0.465266 -0.169438 0.799570\n",
"Gender -0.465266 1.000000 -0.088652 -0.514050\n",
"Age Range -0.169438 -0.088652 1.000000 -0.105428\n",
"Head Size(cm^3) 0.799570 -0.514050 -0.105428 1.000000\n"
]
},
{
"data": {
"text/plain": [
"<AxesSubplot:>"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# ...& the rest, after being evaluated which variables have some promise regarding correlation, being used as combined independants\n",
"# to do this, we'll create a 'correlation matrix', which determines the correlations between each&every variable\n",
"# 'heatmaps' are the visual equivalent of a given correlation matrix\n",
"# then, we'll select the ones which predict the weight of one's brain (and have a high correlation to it)\n",
"# this process is called 'feature selection'!\n",
"numeric_col = [\"Brain Weight(grams)\", \"Gender\", \"Age Range\", \"Head Size(cm^3)\"] # only interested in the latter 3's relation to the brain weight\n",
"corr_matrix = data.loc[:,numeric_col].corr() # correlation matrix formation\n",
"print(corr_matrix) # print out pure text values\n",
"sns.heatmap(corr_matrix, annot=True) # use heatmap to visualise the correlation matrix"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[4512]\n",
" [3738]\n",
" [4261]\n",
" [3777]\n",
" [4177]\n",
" [3585]\n",
" [3785]\n",
" [3559]\n",
" [3613]\n",
" [3982]\n",
" [3443]\n",
" [3993]\n",
" [3640]\n",
" [4208]\n",
" [3832]\n",
" [3876]\n",
" [3497]\n",
" [3466]\n",
" [3095]\n",
" [4424]\n",
" [3878]\n",
" [4046]\n",
" [3804]\n",
" [3710]\n",
" [4747]\n",
" [4423]\n",
" [4036]\n",
" [4022]\n",
" [3454]\n",
" [4175]\n",
" [3787]\n",
" [3796]\n",
" [4103]\n",
" [4161]\n",
" [4158]\n",
" [3814]\n",
" [3527]\n",
" [3748]\n",
" [3334]\n",
" [3492]\n",
" [3962]\n",
" [3505]\n",
" [4315]\n",
" [3804]\n",
" [3863]\n",
" [4034]\n",
" [4308]\n",
" [3165]\n",
" [3641]\n",
" [3644]\n",
" [3891]\n",
" [3793]\n",
" [4270]\n",
" [4063]\n",
" [4012]\n",
" [3458]\n",
" [3890]\n",
" [4166]\n",
" [3935]\n",
" [3669]\n",
" [3866]\n",
" [3393]\n",
" [4442]\n",
" [4253]\n",
" [3727]\n",
" [3329]\n",
" [3415]\n",
" [3372]\n",
" [4430]\n",
" [4381]\n",
" [4008]\n",
" [3858]\n",
" [4121]\n",
" [4057]\n",
" [3824]\n",
" [3394]\n",
" [3558]\n",
" [3362]\n",
" [3930]\n",
" [3835]\n",
" [3830]\n",
" [3856]\n",
" [3249]\n",
" [3577]\n",
" [3933]\n",
" [3850]\n",
" [3309]\n",
" [3406]\n",
" [3506]\n",
" [3907]\n",
" [4160]\n",
" [3318]\n",
" [3662]\n",
" [3899]\n",
" [3700]\n",
" [3779]\n",
" [3473]\n",
" [3490]\n",
" [3654]\n",
" [3478]\n",
" [3495]\n",
" [3834]\n",
" [3876]\n",
" [3661]\n",
" [3618]\n",
" [3648]\n",
" [4032]\n",
" [3399]\n",
" [3916]\n",
" [4430]\n",
" [3695]\n",
" [3524]\n",
" [3571]\n",
" [3594]\n",
" [3383]\n",
" [3499]\n",
" [3589]\n",
" [3900]\n",
" [4114]\n",
" [3937]\n",
" [3399]\n",
" [4200]\n",
" [4488]\n",
" [3614]\n",
" [4051]\n",
" [3782]\n",
" [3391]\n",
" [3124]\n",
" [4053]\n",
" [3582]\n",
" [3666]\n",
" [3532]\n",
" [4046]\n",
" [3667]\n",
" [2857]\n",
" [3436]\n",
" [3791]\n",
" [3302]\n",
" [3104]\n",
" [3171]\n",
" [3572]\n",
" [3530]\n",
" [3175]\n",
" [3438]\n",
" [3903]\n",
" [3899]\n",
" [3401]\n",
" [3267]\n",
" [3451]\n",
" [3090]\n",
" [3413]\n",
" [3323]\n",
" [3680]\n",
" [3439]\n",
" [3853]\n",
" [3156]\n",
" [3279]\n",
" [3707]\n",
" [4006]\n",
" [3269]\n",
" [3071]\n",
" [3779]\n",
" [3548]\n",
" [3292]\n",
" [3497]\n",
" [3082]\n",
" [3248]\n",
" [3358]\n",
" [3803]\n",
" [3566]\n",
" [3145]\n",
" [3503]\n",
" [3571]\n",
" [3724]\n",
" [3615]\n",
" [3203]\n",
" [3609]\n",
" [3561]\n",
" [3979]\n",
" [3533]\n",
" [3689]\n",
" [3158]\n",
" [4005]\n",
" [3181]\n",
" [3479]\n",
" [3642]\n",
" [3632]\n",
" [3069]\n",
" [3394]\n",
" [3703]\n",
" [3165]\n",
" [3354]\n",
" [3000]\n",
" [3687]\n",
" [3556]\n",
" [2773]\n",
" [3058]\n",
" [3344]\n",
" [3493]\n",
" [3297]\n",
" [3360]\n",
" [3228]\n",
" [3277]\n",
" [3851]\n",
" [3067]\n",
" [3692]\n",
" [3402]\n",
" [3995]\n",
" [3318]\n",
" [2720]\n",
" [2937]\n",
" [3580]\n",
" [2939]\n",
" [2989]\n",
" [3586]\n",
" [3156]\n",
" [3246]\n",
" [3170]\n",
" [3268]\n",
" [3389]\n",
" [3381]\n",
" [2864]\n",
" [3740]\n",
" [3479]\n",
" [3647]\n",
" [3716]\n",
" [3284]\n",
" [4204]\n",
" [3735]\n",
" [3218]\n",
" [3685]\n",
" [3704]\n",
" [3214]\n",
" [3394]\n",
" [3233]\n",
" [3352]\n",
" [3391]]\n"
]
}
],
"source": [
"# relevant variable(s) shown as: [\"Head Size(cm^2)\"]\n",
"x = data.iloc[:, 2:3].values\n",
"print(x)"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Now lets visualise the plot itself\n",
"plt.title('head size x brain weight')\n",
"plt.xlabel('head size')\n",
"plt.ylabel('brain weight')\n",
"plt.scatter(x, y, alpha=0.5) # ...where alpha is size of points\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Learning itself\n",
"### Split sets"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [],
"source": [
"x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=.25, random_state=0) # split dataset into train, test"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Train dataset"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [],
"source": [
"model = LinearRegression()\n",
"model.fit(x_train, y_train)\n",
"predictions = model.predict(x_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test accuracy using testing values"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Predicted values:</th>\n",
" <th>Actual values</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1306.622675</td>\n",
" <td>1280</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1295.362866</td>\n",
" <td>1321</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1385.441338</td>\n",
" <td>1425</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1255.441725</td>\n",
" <td>1250</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1321.465150</td>\n",
" <td>1350</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1286.918009</td>\n",
" <td>1408</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1502.133904</td>\n",
" <td>1440</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1257.744868</td>\n",
" <td>1210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>1385.953147</td>\n",
" <td>1422</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1339.122578</td>\n",
" <td>1405</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1406.425527</td>\n",
" <td>1362</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>1138.493254</td>\n",
" <td>1150</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>1202.725346</td>\n",
" <td>1175</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>1334.772197</td>\n",
" <td>1430</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>1221.406393</td>\n",
" <td>1120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>1233.689821</td>\n",
" <td>1192</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>1283.079438</td>\n",
" <td>1163</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>1355.756387</td>\n",
" <td>1360</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>1243.926011</td>\n",
" <td>1160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>1278.217248</td>\n",
" <td>1355</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>1238.552011</td>\n",
" <td>1225</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>1418.197146</td>\n",
" <td>1370</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>1353.453244</td>\n",
" <td>1440</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>1271.051915</td>\n",
" <td>1300</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>1327.095055</td>\n",
" <td>1275</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>1312.764389</td>\n",
" <td>1350</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>1165.107348</td>\n",
" <td>1127</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>1285.126676</td>\n",
" <td>1355</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>1487.291428</td>\n",
" <td>1620</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>1084.753256</td>\n",
" <td>1027</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>1189.930109</td>\n",
" <td>1142</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>1272.075534</td>\n",
" <td>1250</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>1243.926011</td>\n",
" <td>1103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>1378.531910</td>\n",
" <td>1280</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>1342.193435</td>\n",
" <td>1340</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>1227.036298</td>\n",
" <td>1322</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>1326.839150</td>\n",
" <td>1374</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>1375.972862</td>\n",
" <td>1296</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>1332.213150</td>\n",
" <td>1240</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>1246.740963</td>\n",
" <td>1132</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>1340.913911</td>\n",
" <td>1390</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>1145.658587</td>\n",
" <td>1340</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>1144.379063</td>\n",
" <td>1168</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td>1345.520197</td>\n",
" <td>1405</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>1441.996288</td>\n",
" <td>1485</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>1264.398391</td>\n",
" <td>1255</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>1223.965441</td>\n",
" <td>1140</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>1158.453825</td>\n",
" <td>1202</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>1147.961730</td>\n",
" <td>1080</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>1139.005063</td>\n",
" <td>1022</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50</th>\n",
" <td>1224.221345</td>\n",
" <td>1220</td>\n",
" </tr>\n",
" <tr>\n",
" <th>51</th>\n",
" <td>1290.756580</td>\n",
" <td>1230</td>\n",
" </tr>\n",
" <tr>\n",
" <th>52</th>\n",
" <td>1269.004677</td>\n",
" <td>1245</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53</th>\n",
" <td>1418.453051</td>\n",
" <td>1405</td>\n",
" </tr>\n",
" <tr>\n",
" <th>54</th>\n",
" <td>1222.174107</td>\n",
" <td>1195</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55</th>\n",
" <td>1192.745061</td>\n",
" <td>1265</td>\n",
" </tr>\n",
" <tr>\n",
" <th>56</th>\n",
" <td>1139.516873</td>\n",
" <td>1078</td>\n",
" </tr>\n",
" <tr>\n",
" <th>57</th>\n",
" <td>1184.812014</td>\n",
" <td>1250</td>\n",
" </tr>\n",
" <tr>\n",
" <th>58</th>\n",
" <td>1307.390389</td>\n",
" <td>1470</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>1105.737446</td>\n",
" <td>1060</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Predicted values: Actual values\n",
"0 1306.622675 1280\n",
"1 1295.362866 1321\n",
"2 1385.441338 1425\n",
"3 1255.441725 1250\n",
"4 1321.465150 1350\n",
"5 1286.918009 1408\n",
"6 1502.133904 1440\n",
"7 1257.744868 1210\n",
"8 1385.953147 1422\n",
"9 1339.122578 1405\n",
"10 1406.425527 1362\n",
"11 1138.493254 1150\n",
"12 1202.725346 1175\n",
"13 1334.772197 1430\n",
"14 1221.406393 1120\n",
"15 1233.689821 1192\n",
"16 1283.079438 1163\n",
"17 1355.756387 1360\n",
"18 1243.926011 1160\n",
"19 1278.217248 1355\n",
"20 1238.552011 1225\n",
"21 1418.197146 1370\n",
"22 1353.453244 1440\n",
"23 1271.051915 1300\n",
"24 1327.095055 1275\n",
"25 1312.764389 1350\n",
"26 1165.107348 1127\n",
"27 1285.126676 1355\n",
"28 1487.291428 1620\n",
"29 1084.753256 1027\n",
"30 1189.930109 1142\n",
"31 1272.075534 1250\n",
"32 1243.926011 1103\n",
"33 1378.531910 1280\n",
"34 1342.193435 1340\n",
"35 1227.036298 1322\n",
"36 1326.839150 1374\n",
"37 1375.972862 1296\n",
"38 1332.213150 1240\n",
"39 1246.740963 1132\n",
"40 1340.913911 1390\n",
"41 1145.658587 1340\n",
"42 1144.379063 1168\n",
"43 1345.520197 1405\n",
"44 1441.996288 1485\n",
"45 1264.398391 1255\n",
"46 1223.965441 1140\n",
"47 1158.453825 1202\n",
"48 1147.961730 1080\n",
"49 1139.005063 1022\n",
"50 1224.221345 1220\n",
"51 1290.756580 1230\n",
"52 1269.004677 1245\n",
"53 1418.453051 1405\n",
"54 1222.174107 1195\n",
"55 1192.745061 1265\n",
"56 1139.516873 1078\n",
"57 1184.812014 1250\n",
"58 1307.390389 1470\n",
"59 1105.737446 1060"
]
},
"execution_count": 122,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_test_pred = model.predict(x_test) # based on our model, give it values to try to predict with\n",
"pred_vs_actual = pd.DataFrame({\"Predicted values:\": y_test_pred, \"Actual values\": y_test})\n",
"pred_vs_actual"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean squared error: 5264.955252408745\n",
"Mean absolute error: 59.995743221875\n",
"Model accuracy: 0.669\n"
]
}
],
"source": [
"print(\"Mean squared error:\", mean_squared_error(y_test, y_test_pred))\n",
"print(\"Mean absolute error:\", mean_absolute_error(y_test, y_test_pred))\n",
"accuracy = model.score(x_test, y_test) # or simply called score method to use the models inherent predictions vs a dataset / subset we give it \n",
"print(\"Model accuracy: {:.3f}\".format(accuracy)) "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}