Skip to content

Instantly share code, notes, and snippets.

@MohdAzamSayeed
Last active October 13, 2019 18:56
Show Gist options
  • Save MohdAzamSayeed/8b8c295323dfb5f6fa597b90c3a80506 to your computer and use it in GitHub Desktop.
Save MohdAzamSayeed/8b8c295323dfb5f6fa597b90c3a80506 to your computer and use it in GitHub Desktop.
Regression
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simple Linear Regression"
]
},
{
"cell_type": "code",
"execution_count": 1,
"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>Unnamed: 0</th>\n",
" <th>crim</th>\n",
" <th>zn</th>\n",
" <th>indus</th>\n",
" <th>chas</th>\n",
" <th>nox</th>\n",
" <th>rm</th>\n",
" <th>age</th>\n",
" <th>dis</th>\n",
" <th>rad</th>\n",
" <th>tax</th>\n",
" <th>ptratio</th>\n",
" <th>black</th>\n",
" <th>lstat</th>\n",
" <th>medv</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0.00632</td>\n",
" <td>18.0</td>\n",
" <td>2.31</td>\n",
" <td>0</td>\n",
" <td>0.538</td>\n",
" <td>6.575</td>\n",
" <td>65.2</td>\n",
" <td>4.0900</td>\n",
" <td>1</td>\n",
" <td>296</td>\n",
" <td>15.3</td>\n",
" <td>396.90</td>\n",
" <td>4.98</td>\n",
" <td>24.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>0.02731</td>\n",
" <td>0.0</td>\n",
" <td>7.07</td>\n",
" <td>0</td>\n",
" <td>0.469</td>\n",
" <td>6.421</td>\n",
" <td>78.9</td>\n",
" <td>4.9671</td>\n",
" <td>2</td>\n",
" <td>242</td>\n",
" <td>17.8</td>\n",
" <td>396.90</td>\n",
" <td>9.14</td>\n",
" <td>21.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>0.02729</td>\n",
" <td>0.0</td>\n",
" <td>7.07</td>\n",
" <td>0</td>\n",
" <td>0.469</td>\n",
" <td>7.185</td>\n",
" <td>61.1</td>\n",
" <td>4.9671</td>\n",
" <td>2</td>\n",
" <td>242</td>\n",
" <td>17.8</td>\n",
" <td>392.83</td>\n",
" <td>4.03</td>\n",
" <td>34.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>0.03237</td>\n",
" <td>0.0</td>\n",
" <td>2.18</td>\n",
" <td>0</td>\n",
" <td>0.458</td>\n",
" <td>6.998</td>\n",
" <td>45.8</td>\n",
" <td>6.0622</td>\n",
" <td>3</td>\n",
" <td>222</td>\n",
" <td>18.7</td>\n",
" <td>394.63</td>\n",
" <td>2.94</td>\n",
" <td>33.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0.06905</td>\n",
" <td>0.0</td>\n",
" <td>2.18</td>\n",
" <td>0</td>\n",
" <td>0.458</td>\n",
" <td>7.147</td>\n",
" <td>54.2</td>\n",
" <td>6.0622</td>\n",
" <td>3</td>\n",
" <td>222</td>\n",
" <td>18.7</td>\n",
" <td>396.90</td>\n",
" <td>5.33</td>\n",
" <td>36.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 crim zn indus chas nox rm age dis rad \\\n",
"0 1 0.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 \n",
"1 2 0.02731 0.0 7.07 0 0.469 6.421 78.9 4.9671 2 \n",
"2 3 0.02729 0.0 7.07 0 0.469 7.185 61.1 4.9671 2 \n",
"3 4 0.03237 0.0 2.18 0 0.458 6.998 45.8 6.0622 3 \n",
"4 5 0.06905 0.0 2.18 0 0.458 7.147 54.2 6.0622 3 \n",
"\n",
" tax ptratio black lstat medv \n",
"0 296 15.3 396.90 4.98 24.0 \n",
"1 242 17.8 396.90 9.14 21.6 \n",
"2 242 17.8 392.83 4.03 34.7 \n",
"3 222 18.7 394.63 2.94 33.4 \n",
"4 222 18.7 396.90 5.33 36.2 "
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Importing Dataset\n",
"import pandas as pd\n",
"data=pd.read_csv('Boston.csv')\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"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>crim</th>\n",
" <th>zn</th>\n",
" <th>indus</th>\n",
" <th>chas</th>\n",
" <th>nox</th>\n",
" <th>rm</th>\n",
" <th>age</th>\n",
" <th>dis</th>\n",
" <th>rad</th>\n",
" <th>tax</th>\n",
" <th>ptratio</th>\n",
" <th>black</th>\n",
" <th>lstat</th>\n",
" <th>medv</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.00632</td>\n",
" <td>18.0</td>\n",
" <td>2.31</td>\n",
" <td>0</td>\n",
" <td>0.538</td>\n",
" <td>6.575</td>\n",
" <td>65.2</td>\n",
" <td>4.0900</td>\n",
" <td>1</td>\n",
" <td>296</td>\n",
" <td>15.3</td>\n",
" <td>396.90</td>\n",
" <td>4.98</td>\n",
" <td>24.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.02731</td>\n",
" <td>0.0</td>\n",
" <td>7.07</td>\n",
" <td>0</td>\n",
" <td>0.469</td>\n",
" <td>6.421</td>\n",
" <td>78.9</td>\n",
" <td>4.9671</td>\n",
" <td>2</td>\n",
" <td>242</td>\n",
" <td>17.8</td>\n",
" <td>396.90</td>\n",
" <td>9.14</td>\n",
" <td>21.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.02729</td>\n",
" <td>0.0</td>\n",
" <td>7.07</td>\n",
" <td>0</td>\n",
" <td>0.469</td>\n",
" <td>7.185</td>\n",
" <td>61.1</td>\n",
" <td>4.9671</td>\n",
" <td>2</td>\n",
" <td>242</td>\n",
" <td>17.8</td>\n",
" <td>392.83</td>\n",
" <td>4.03</td>\n",
" <td>34.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.03237</td>\n",
" <td>0.0</td>\n",
" <td>2.18</td>\n",
" <td>0</td>\n",
" <td>0.458</td>\n",
" <td>6.998</td>\n",
" <td>45.8</td>\n",
" <td>6.0622</td>\n",
" <td>3</td>\n",
" <td>222</td>\n",
" <td>18.7</td>\n",
" <td>394.63</td>\n",
" <td>2.94</td>\n",
" <td>33.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.06905</td>\n",
" <td>0.0</td>\n",
" <td>2.18</td>\n",
" <td>0</td>\n",
" <td>0.458</td>\n",
" <td>7.147</td>\n",
" <td>54.2</td>\n",
" <td>6.0622</td>\n",
" <td>3</td>\n",
" <td>222</td>\n",
" <td>18.7</td>\n",
" <td>396.90</td>\n",
" <td>5.33</td>\n",
" <td>36.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 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",
" black 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 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#drop unwanted column - no value in analysis NaN(3)\n",
"data = data.drop(columns=['Unnamed: 0'])\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(506, 14)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#medv- Dependent varaible - median price value of houses in boston\n",
"#lstat- Independent varaiable - percentage of ppl below poverty line\n",
"\n",
"data.shape"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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>crim</th>\n",
" <th>zn</th>\n",
" <th>indus</th>\n",
" <th>chas</th>\n",
" <th>nox</th>\n",
" <th>rm</th>\n",
" <th>age</th>\n",
" <th>dis</th>\n",
" <th>rad</th>\n",
" <th>tax</th>\n",
" <th>ptratio</th>\n",
" <th>black</th>\n",
" <th>lstat</th>\n",
" <th>medv</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" <td>506.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>3.613524</td>\n",
" <td>11.363636</td>\n",
" <td>11.136779</td>\n",
" <td>0.069170</td>\n",
" <td>0.554695</td>\n",
" <td>6.284634</td>\n",
" <td>68.574901</td>\n",
" <td>3.795043</td>\n",
" <td>9.549407</td>\n",
" <td>408.237154</td>\n",
" <td>18.455534</td>\n",
" <td>356.674032</td>\n",
" <td>12.653063</td>\n",
" <td>22.532806</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>8.601545</td>\n",
" <td>23.322453</td>\n",
" <td>6.860353</td>\n",
" <td>0.253994</td>\n",
" <td>0.115878</td>\n",
" <td>0.702617</td>\n",
" <td>28.148861</td>\n",
" <td>2.105710</td>\n",
" <td>8.707259</td>\n",
" <td>168.537116</td>\n",
" <td>2.164946</td>\n",
" <td>91.294864</td>\n",
" <td>7.141062</td>\n",
" <td>9.197104</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>0.006320</td>\n",
" <td>0.000000</td>\n",
" <td>0.460000</td>\n",
" <td>0.000000</td>\n",
" <td>0.385000</td>\n",
" <td>3.561000</td>\n",
" <td>2.900000</td>\n",
" <td>1.129600</td>\n",
" <td>1.000000</td>\n",
" <td>187.000000</td>\n",
" <td>12.600000</td>\n",
" <td>0.320000</td>\n",
" <td>1.730000</td>\n",
" <td>5.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>0.082045</td>\n",
" <td>0.000000</td>\n",
" <td>5.190000</td>\n",
" <td>0.000000</td>\n",
" <td>0.449000</td>\n",
" <td>5.885500</td>\n",
" <td>45.025000</td>\n",
" <td>2.100175</td>\n",
" <td>4.000000</td>\n",
" <td>279.000000</td>\n",
" <td>17.400000</td>\n",
" <td>375.377500</td>\n",
" <td>6.950000</td>\n",
" <td>17.025000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>0.256510</td>\n",
" <td>0.000000</td>\n",
" <td>9.690000</td>\n",
" <td>0.000000</td>\n",
" <td>0.538000</td>\n",
" <td>6.208500</td>\n",
" <td>77.500000</td>\n",
" <td>3.207450</td>\n",
" <td>5.000000</td>\n",
" <td>330.000000</td>\n",
" <td>19.050000</td>\n",
" <td>391.440000</td>\n",
" <td>11.360000</td>\n",
" <td>21.200000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>3.677082</td>\n",
" <td>12.500000</td>\n",
" <td>18.100000</td>\n",
" <td>0.000000</td>\n",
" <td>0.624000</td>\n",
" <td>6.623500</td>\n",
" <td>94.075000</td>\n",
" <td>5.188425</td>\n",
" <td>24.000000</td>\n",
" <td>666.000000</td>\n",
" <td>20.200000</td>\n",
" <td>396.225000</td>\n",
" <td>16.955000</td>\n",
" <td>25.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>88.976200</td>\n",
" <td>100.000000</td>\n",
" <td>27.740000</td>\n",
" <td>1.000000</td>\n",
" <td>0.871000</td>\n",
" <td>8.780000</td>\n",
" <td>100.000000</td>\n",
" <td>12.126500</td>\n",
" <td>24.000000</td>\n",
" <td>711.000000</td>\n",
" <td>22.000000</td>\n",
" <td>396.900000</td>\n",
" <td>37.970000</td>\n",
" <td>50.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" crim zn indus chas nox rm \\\n",
"count 506.000000 506.000000 506.000000 506.000000 506.000000 506.000000 \n",
"mean 3.613524 11.363636 11.136779 0.069170 0.554695 6.284634 \n",
"std 8.601545 23.322453 6.860353 0.253994 0.115878 0.702617 \n",
"min 0.006320 0.000000 0.460000 0.000000 0.385000 3.561000 \n",
"25% 0.082045 0.000000 5.190000 0.000000 0.449000 5.885500 \n",
"50% 0.256510 0.000000 9.690000 0.000000 0.538000 6.208500 \n",
"75% 3.677082 12.500000 18.100000 0.000000 0.624000 6.623500 \n",
"max 88.976200 100.000000 27.740000 1.000000 0.871000 8.780000 \n",
"\n",
" age dis rad tax ptratio black \\\n",
"count 506.000000 506.000000 506.000000 506.000000 506.000000 506.000000 \n",
"mean 68.574901 3.795043 9.549407 408.237154 18.455534 356.674032 \n",
"std 28.148861 2.105710 8.707259 168.537116 2.164946 91.294864 \n",
"min 2.900000 1.129600 1.000000 187.000000 12.600000 0.320000 \n",
"25% 45.025000 2.100175 4.000000 279.000000 17.400000 375.377500 \n",
"50% 77.500000 3.207450 5.000000 330.000000 19.050000 391.440000 \n",
"75% 94.075000 5.188425 24.000000 666.000000 20.200000 396.225000 \n",
"max 100.000000 12.126500 24.000000 711.000000 22.000000 396.900000 \n",
"\n",
" lstat medv \n",
"count 506.000000 506.000000 \n",
"mean 12.653063 22.532806 \n",
"std 7.141062 9.197104 \n",
"min 1.730000 5.000000 \n",
"25% 6.950000 17.025000 \n",
"50% 11.360000 21.200000 \n",
"75% 16.955000 25.000000 \n",
"max 37.970000 50.000000 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.describe()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"#lets us take out the dependent and independent variables from the dataset"
]
},
{
"cell_type": "code",
"execution_count": 6,
"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>lstat</th>\n",
" <th>medv</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>4.98</td>\n",
" <td>24.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>9.14</td>\n",
" <td>21.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4.03</td>\n",
" <td>34.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2.94</td>\n",
" <td>33.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5.33</td>\n",
" <td>36.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" lstat medv\n",
"0 4.98 24.0\n",
"1 9.14 21.6\n",
"2 4.03 34.7\n",
"3 2.94 33.4\n",
"4 5.33 36.2"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_=data.loc[:,['lstat','medv']]\n",
"data_.head(5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Visualizing Variables"
]
},
{
"cell_type": "code",
"execution_count": 11,
"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": [
"import matplotlib.pyplot as plt\n",
"data.plot(x='lstat',y='medv',style='o')\n",
"plt.xlabel('lstat')#independent\n",
"plt.ylabel('medv')#dependent\n",
"plt.show() #-ve slope, higher lstat lower medv value"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Preparing data"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"X =pd.DataFrame(data['lstat'])\n",
"Y =pd.DataFrame(data['medv'])"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(506, 506)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.size, Y.size"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"X_train,X_test, Y_train,Y_test =train_test_split(X,Y,test_size=0.2,random_state=1)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(404, 1)\n",
"(102, 1)\n",
"(404, 1)\n",
"(102, 1)\n"
]
}
],
"source": [
"print(X_train.shape)\n",
"print(X_test.shape)\n",
"print(Y_train.shape)\n",
"print(X_test.shape)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n",
" normalize=False)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"regressor = LinearRegression()\n",
"regressor.fit(X_train,Y_train)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[34.33497839]\n"
]
}
],
"source": [
"print(regressor.intercept_) #Constant -b1"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-0.92441715]]\n"
]
}
],
"source": [
"print(regressor.coef_) #coefficient - slope (-ve slope, inverse relationship)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"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</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>27.374117</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>27.697663</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>16.955936</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>26.847199</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>24.915168</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Predicted\n",
"0 27.374117\n",
"1 27.697663\n",
"2 16.955936\n",
"3 26.847199\n",
"4 24.915168"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred = regressor.predict(X_test)\n",
"y_pred = pd.DataFrame(y_pred,columns=['Predicted'])\n",
"y_pred.head(5)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean Absolute Error: 5.078127727696938\n",
"Mean Square Error: 46.99482091954711\n",
"Root Mean Square Error: 6.855276866731723\n"
]
}
],
"source": [
"from sklearn import metrics\n",
"import numpy as np\n",
"print('Mean Absolute Error:',metrics.mean_absolute_error(Y_test,y_pred))\n",
"print('Mean Square Error: ',metrics.mean_squared_error(Y_test,y_pred))\n",
"print('Root Mean Square Error: ',np.sqrt(metrics.mean_squared_error(Y_test,y_pred)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Multiple Linear Regression"
]
},
{
"cell_type": "code",
"execution_count": 1,
"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>Unnamed: 0</th>\n",
" <th>crim</th>\n",
" <th>zn</th>\n",
" <th>indus</th>\n",
" <th>chas</th>\n",
" <th>nox</th>\n",
" <th>rm</th>\n",
" <th>age</th>\n",
" <th>dis</th>\n",
" <th>rad</th>\n",
" <th>tax</th>\n",
" <th>ptratio</th>\n",
" <th>black</th>\n",
" <th>lstat</th>\n",
" <th>medv</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0.00632</td>\n",
" <td>18.0</td>\n",
" <td>2.31</td>\n",
" <td>0</td>\n",
" <td>0.538</td>\n",
" <td>6.575</td>\n",
" <td>65.2</td>\n",
" <td>4.0900</td>\n",
" <td>1</td>\n",
" <td>296</td>\n",
" <td>15.3</td>\n",
" <td>396.90</td>\n",
" <td>4.98</td>\n",
" <td>24.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>0.02731</td>\n",
" <td>0.0</td>\n",
" <td>7.07</td>\n",
" <td>0</td>\n",
" <td>0.469</td>\n",
" <td>6.421</td>\n",
" <td>78.9</td>\n",
" <td>4.9671</td>\n",
" <td>2</td>\n",
" <td>242</td>\n",
" <td>17.8</td>\n",
" <td>396.90</td>\n",
" <td>9.14</td>\n",
" <td>21.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>0.02729</td>\n",
" <td>0.0</td>\n",
" <td>7.07</td>\n",
" <td>0</td>\n",
" <td>0.469</td>\n",
" <td>7.185</td>\n",
" <td>61.1</td>\n",
" <td>4.9671</td>\n",
" <td>2</td>\n",
" <td>242</td>\n",
" <td>17.8</td>\n",
" <td>392.83</td>\n",
" <td>4.03</td>\n",
" <td>34.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>0.03237</td>\n",
" <td>0.0</td>\n",
" <td>2.18</td>\n",
" <td>0</td>\n",
" <td>0.458</td>\n",
" <td>6.998</td>\n",
" <td>45.8</td>\n",
" <td>6.0622</td>\n",
" <td>3</td>\n",
" <td>222</td>\n",
" <td>18.7</td>\n",
" <td>394.63</td>\n",
" <td>2.94</td>\n",
" <td>33.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0.06905</td>\n",
" <td>0.0</td>\n",
" <td>2.18</td>\n",
" <td>0</td>\n",
" <td>0.458</td>\n",
" <td>7.147</td>\n",
" <td>54.2</td>\n",
" <td>6.0622</td>\n",
" <td>3</td>\n",
" <td>222</td>\n",
" <td>18.7</td>\n",
" <td>396.90</td>\n",
" <td>5.33</td>\n",
" <td>36.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 crim zn indus chas nox rm age dis rad \\\n",
"0 1 0.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 \n",
"1 2 0.02731 0.0 7.07 0 0.469 6.421 78.9 4.9671 2 \n",
"2 3 0.02729 0.0 7.07 0 0.469 7.185 61.1 4.9671 2 \n",
"3 4 0.03237 0.0 2.18 0 0.458 6.998 45.8 6.0622 3 \n",
"4 5 0.06905 0.0 2.18 0 0.458 7.147 54.2 6.0622 3 \n",
"\n",
" tax ptratio black lstat medv \n",
"0 296 15.3 396.90 4.98 24.0 \n",
"1 242 17.8 396.90 9.14 21.6 \n",
"2 242 17.8 392.83 4.03 34.7 \n",
"3 222 18.7 394.63 2.94 33.4 \n",
"4 222 18.7 396.90 5.33 36.2 "
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"dataset = pd.read_csv('Boston.csv')\n",
"dataset.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"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>crim</th>\n",
" <th>zn</th>\n",
" <th>indus</th>\n",
" <th>chas</th>\n",
" <th>nox</th>\n",
" <th>rm</th>\n",
" <th>age</th>\n",
" <th>dis</th>\n",
" <th>rad</th>\n",
" <th>tax</th>\n",
" <th>ptratio</th>\n",
" <th>black</th>\n",
" <th>lstat</th>\n",
" <th>medv</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.00632</td>\n",
" <td>18.0</td>\n",
" <td>2.31</td>\n",
" <td>0</td>\n",
" <td>0.538</td>\n",
" <td>6.575</td>\n",
" <td>65.2</td>\n",
" <td>4.0900</td>\n",
" <td>1</td>\n",
" <td>296</td>\n",
" <td>15.3</td>\n",
" <td>396.90</td>\n",
" <td>4.98</td>\n",
" <td>24.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.02731</td>\n",
" <td>0.0</td>\n",
" <td>7.07</td>\n",
" <td>0</td>\n",
" <td>0.469</td>\n",
" <td>6.421</td>\n",
" <td>78.9</td>\n",
" <td>4.9671</td>\n",
" <td>2</td>\n",
" <td>242</td>\n",
" <td>17.8</td>\n",
" <td>396.90</td>\n",
" <td>9.14</td>\n",
" <td>21.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.02729</td>\n",
" <td>0.0</td>\n",
" <td>7.07</td>\n",
" <td>0</td>\n",
" <td>0.469</td>\n",
" <td>7.185</td>\n",
" <td>61.1</td>\n",
" <td>4.9671</td>\n",
" <td>2</td>\n",
" <td>242</td>\n",
" <td>17.8</td>\n",
" <td>392.83</td>\n",
" <td>4.03</td>\n",
" <td>34.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.03237</td>\n",
" <td>0.0</td>\n",
" <td>2.18</td>\n",
" <td>0</td>\n",
" <td>0.458</td>\n",
" <td>6.998</td>\n",
" <td>45.8</td>\n",
" <td>6.0622</td>\n",
" <td>3</td>\n",
" <td>222</td>\n",
" <td>18.7</td>\n",
" <td>394.63</td>\n",
" <td>2.94</td>\n",
" <td>33.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.06905</td>\n",
" <td>0.0</td>\n",
" <td>2.18</td>\n",
" <td>0</td>\n",
" <td>0.458</td>\n",
" <td>7.147</td>\n",
" <td>54.2</td>\n",
" <td>6.0622</td>\n",
" <td>3</td>\n",
" <td>222</td>\n",
" <td>18.7</td>\n",
" <td>396.90</td>\n",
" <td>5.33</td>\n",
" <td>36.2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 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",
" black 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 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#drop unwanted column - no value in analysis NaN(3)\n",
"dataset = dataset.drop(columns=['Unnamed: 0'])\n",
"dataset.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"X = pd.DataFrame(dataset.iloc[:,:-1]) #first 13 column as independent varaiables\n",
"Y = pd.DataFrame(dataset.iloc[:,-1])#independent variable 14th column"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.3,random_state=5)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n",
" normalize=False)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"regressor = LinearRegression()\n",
"regressor.fit(X_train,Y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"y_pred =regressor.predict(X_test)\n",
"y_pred =pd.DataFrame(y_pred,columns=['Predicted'])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean Absolute Error: 3.5576684756500363\n",
"Mean Squared Error: 30.69703770408845\n",
"Root Mean Squared Error: 5.54049074578132\n"
]
}
],
"source": [
"from sklearn import metrics\n",
"print('Mean Absolute Error: ',metrics.mean_absolute_error(Y_test,y_pred))\n",
"print('Mean Squared Error: ',metrics.mean_squared_error(Y_test,y_pred))\n",
"print('Root Mean Squared Error: ',np.sqrt(metrics.mean_squared_error(Y_test,y_pred)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Logistic Regression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Loading Dataset"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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>age</th>\n",
" <th>sex</th>\n",
" <th>cp</th>\n",
" <th>trestbps</th>\n",
" <th>chol</th>\n",
" <th>fbs</th>\n",
" <th>restecg</th>\n",
" <th>thalach</th>\n",
" <th>exang</th>\n",
" <th>oldpeak</th>\n",
" <th>slope</th>\n",
" <th>ca</th>\n",
" <th>target</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>63</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>145</td>\n",
" <td>233</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>150</td>\n",
" <td>0</td>\n",
" <td>2.3</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>37</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>130</td>\n",
" <td>250</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>187</td>\n",
" <td>0</td>\n",
" <td>3.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>130</td>\n",
" <td>204</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>172</td>\n",
" <td>0</td>\n",
" <td>1.4</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>56</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>120</td>\n",
" <td>236</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>178</td>\n",
" <td>0</td>\n",
" <td>0.8</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>57</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>120</td>\n",
" <td>354</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>163</td>\n",
" <td>1</td>\n",
" <td>0.6</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age sex cp trestbps chol fbs restecg thalach exang oldpeak slope \\\n",
"0 63 1 3 145 233 1 0 150 0 2.3 0 \n",
"1 37 1 2 130 250 0 1 187 0 3.5 0 \n",
"2 41 0 1 130 204 0 0 172 0 1.4 2 \n",
"3 56 1 1 120 236 0 1 178 0 0.8 2 \n",
"4 57 0 0 120 354 0 1 163 1 0.6 2 \n",
"\n",
" ca target \n",
"0 0 1 \n",
"1 0 1 \n",
"2 0 1 \n",
"3 0 1 \n",
"4 0 1 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"datast= pd.read_csv(\"heart1.csv\")\n",
"datast.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(303, 13)\n"
]
}
],
"source": [
"print(datast.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data Exploration"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 165\n",
"0 138\n",
"Name: target, dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"datast['target'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"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": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"sns.countplot(x='target', data=datast , palette = 'hls')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Split the data into features(X) and target(y) label sets"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"X=pd.DataFrame(datast.iloc[:,:-1])\n",
"Y=pd.DataFrame(datast.iloc[:,-1])"
]
},
{
"cell_type": "code",
"execution_count": 17,
"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>age</th>\n",
" <th>sex</th>\n",
" <th>cp</th>\n",
" <th>trestbps</th>\n",
" <th>chol</th>\n",
" <th>fbs</th>\n",
" <th>restecg</th>\n",
" <th>thalach</th>\n",
" <th>exang</th>\n",
" <th>oldpeak</th>\n",
" <th>slope</th>\n",
" <th>ca</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>63</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>145</td>\n",
" <td>233</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>150</td>\n",
" <td>0</td>\n",
" <td>2.3</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>37</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>130</td>\n",
" <td>250</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>187</td>\n",
" <td>0</td>\n",
" <td>3.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>130</td>\n",
" <td>204</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>172</td>\n",
" <td>0</td>\n",
" <td>1.4</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>56</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>120</td>\n",
" <td>236</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>178</td>\n",
" <td>0</td>\n",
" <td>0.8</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>57</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>120</td>\n",
" <td>354</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>163</td>\n",
" <td>1</td>\n",
" <td>0.6</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age sex cp trestbps chol fbs restecg thalach exang oldpeak slope \\\n",
"0 63 1 3 145 233 1 0 150 0 2.3 0 \n",
"1 37 1 2 130 250 0 1 187 0 3.5 0 \n",
"2 41 0 1 130 204 0 0 172 0 1.4 2 \n",
"3 56 1 1 120 236 0 1 178 0 0.8 2 \n",
"4 57 0 0 120 354 0 1 163 1 0.6 2 \n",
"\n",
" ca \n",
"0 0 \n",
"1 0 \n",
"2 0 \n",
"3 0 \n",
"4 0 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.head()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"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>target</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" target\n",
"0 1\n",
"1 1\n",
"2 1\n",
"3 1\n",
"4 1"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Y.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Split the data into training and test set"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"X_train, X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.2,random_state=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create and train the model"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"D:\\softwares\\Anaconda\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
" FutureWarning)\n",
"D:\\softwares\\Anaconda\\lib\\site-packages\\sklearn\\utils\\validation.py:761: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
" y = column_or_1d(y, warn=True)\n"
]
},
{
"data": {
"text/plain": [
"LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, max_iter=100, multi_class='warn',\n",
" n_jobs=None, penalty='l2', random_state=None, solver='warn',\n",
" tol=0.0001, verbose=0, warm_start=False)"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"\n",
"logmodel =LogisticRegression()\n",
"logmodel.fit(X_train,Y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Predicting the test set results "
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"y_pred = logmodel.predict(X_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calculating the accuracy"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy : %d 0.7377049180327869\n"
]
}
],
"source": [
"print('Accuracy : %d', (logmodel.score(X_test,Y_test)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Evaluate model using confusion Matrix"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[20 10]\n",
" [ 6 25]]\n"
]
}
],
"source": [
"from sklearn.metrics import confusion_matrix\n",
"confusion_matrix =confusion_matrix(Y_test,y_pred)\n",
"print(confusion_matrix)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.7377049180327869"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#accuracy from confusion matrix left diagonal- correctly classified, right diagonal- incorrect classified\n",
"(20+25)/(20+25+10+6)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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3rF9U6dOpXz58hQqVOiEY5s1a0afPn1o3br1acUYCEsUqm51ue7d4a+/oHNnqFDB66hMBOncuTNt27alXbt2jBo1iq5duzJ16lS6detGt27daNWqFcOHD8/wtcOHD6dbt260bt2aI0eOkJqayiuvvMLKlStZvnw54D4A04wYMYJNmzbx008/kS9fPnbu3Ok3ti+//JJmzZoBbh5Kly5d+OyzzyhVqhTjx4/nmWeeYdSoUbRv354RI0ZQu3ZtevfufcI5Fi5cyIoVKyhevDizZ89m/fr1LF68GFWlSZMmfPPNNyQmJnL++eczffp0AJKSkti5cyeffvopa9euRUTYvXv3KfG1bduW//73v9x8880899xz9OvXjyFDhgCQkpLC4sWLmTFjBv369WPOnDknvHbTpk0UK1aMAgUKAHDOOefw1VdfUbBgQdavX0+rVq1YunQpAIsXL2blypXEx8ezZs0axo8fz3fffUdcXBydOnXio48+om3btrz88ssUL16c1NRUbr31VlasWEHVk9avHzRoEB999NEpP8tNN93E0KFDT9j3559/UrZs2WPbZcqUOSFxn+zbb7/l3HPPpaKvwvT+/ft59dVX+eqrr47ddkpTpUoVlixZkum5clNsJwpVaN7cLSR09dUwbRpUz9EMdxNiOfnLP1gWLlzIlClTALjvvvt46qmnju2fOnUqAPfeey89evQ45bW1atXi5ZdfJiEhgebNmx/7gMjMnDlz6NixI/nyuV/dtL9UT9azZ0+eeuoptm/fzqJFiwD49ddfWblyJXXr1gUgNTWV0qVLs3v3bvbu3Uvt2rWPxfrFF18cO1f6v4hnz57N7NmzueqqqwDYt28f69ev58Ybb6RHjx706tWLxo0bc+ONN5KSkkLBggV58MEHuf3220/pS0hKSmL37t3c7Ov7a9euHXfdddex55s3bw7ANddcc0KyTLNt2zZKlSp1bDs5OZnOnTuzfPly8ubNy7p16449V6NGjWPzCubOncuyZcu49tprATh48CDnnHMOABMmTGDEiBGkpKSwbds2Vq9efUqi6NmzJz179szwup9MMyiR5G9U0ieffHJCa+P555/n8ccfz7BvLG/evOTPn5+9e/dSpEiRgOLJqdhMFMnJEBfnhrnecAPccgt06gR583odmYkC2RmeeO+993Ldddcxffp06tevz8iRIylf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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import roc_auc_score\n",
"from sklearn.metrics import roc_curve\n",
"logit_roc_auc = roc_auc_score(Y_test, logmodel.predict(X_test))\n",
"fpr,tpr,thresholds = roc_curve(Y_test, logmodel.predict_proba(X_test)[:,1])\n",
"plt.figure()\n",
"plt.plot(fpr,tpr,label='Logistic Regression (area = %0.2f)' %logit_roc_auc)\n",
"plt.plot([0,1],[0,1],'r--')\n",
"plt.xlim([0.0,1.0])\n",
"plt.ylim([0.0,1.05])\n",
"plt.xlabel('False Positive Rate')\n",
"plt.ylabel('True Posistive Rate')\n",
"plt.title('ROC')\n",
"plt.legend(loc=\"lower right\")\n",
"plt.show()\n",
"#more towards right side of the graph(more area roc covers better the accuracy)\n",
"#red line is 50% of the accuracy, object is that roc should be as away from red line"
]
}
],
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment