Skip to content

Instantly share code, notes, and snippets.

@tkhan0
Last active November 10, 2019 22:26
Show Gist options
  • Save tkhan0/683943c3329aa1566a9306b16d8cdb49 to your computer and use it in GitHub Desktop.
Save tkhan0/683943c3329aa1566a9306b16d8cdb49 to your computer and use it in GitHub Desktop.
Data Cleaning -Part 2.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "## Diverse features in a dataset\n\nThe dataset that we will normally deal with will potentially be present in different magnitudes and range. In order to make the data uniform and of same scale and magnitude, we have various transformation techniques. These techniques will ensure that every feature of the data set has an appropriate effect on model's prediction.\n\n\nYou will encounter that our of the many features in the data, some will have high magnitude like the salary feature and some would have low magnitude like the overall job experience of an employee. But we should'nt ignore the data because of it lowe magnitude. It could be as important as the feature with high magnitude or even more important. So to ensure that the prediction that out model makes doesn't vary because of the varied magnitudes of data, we perform scaling, standardization or normalization. These are the 3 ways in which we could encounter the challenge of magnitude in our dara."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "dtypes = df.dtypes",
"execution_count": 126,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "dtypes",
"execution_count": 127,
"outputs": [
{
"data": {
"text/plain": "id int64\ndiagnosis object\nradius_mean float64\ntexture_mean float64\nperimeter_mean float64\narea_mean float64\nsmoothness_mean float64\ncompactness_mean float64\nconcavity_mean float64\nconcave points_mean float64\nsymmetry_mean float64\nfractal_dimension_mean float64\nradius_se float64\ntexture_se float64\nperimeter_se float64\narea_se float64\nsmoothness_se float64\ncompactness_se float64\nconcavity_se float64\nconcave points_se float64\nsymmetry_se float64\nfractal_dimension_se float64\nradius_worst float64\ntexture_worst float64\nperimeter_worst float64\narea_worst float64\nsmoothness_worst float64\ncompactness_worst float64\nconcavity_worst float64\nconcave points_worst float64\nsymmetry_worst float64\nfractal_dimension_worst float64\ndtype: object"
},
"execution_count": 127,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "info = pd.concat([null_,dtypes],axis=1,keys=['null','type'])\nprint(info)",
"execution_count": 128,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": " null type\nid False int64\ndiagnosis False object\nradius_mean False float64\ntexture_mean False float64\nperimeter_mean False float64\narea_mean False float64\nsmoothness_mean False float64\ncompactness_mean False float64\nconcavity_mean False float64\nconcave points_mean False float64\nsymmetry_mean False float64\nfractal_dimension_mean False float64\nradius_se False float64\ntexture_se False float64\nperimeter_se False float64\narea_se False float64\nsmoothness_se False float64\ncompactness_se False float64\nconcavity_se False float64\nconcave points_se False float64\nsymmetry_se False float64\nfractal_dimension_se False float64\nradius_worst False float64\ntexture_worst False float64\nperimeter_worst False float64\narea_worst False float64\nsmoothness_worst False float64\ncompactness_worst False float64\nconcavity_worst False float64\nconcave points_worst False float64\nsymmetry_worst False float64\nfractal_dimension_worst False float64\n"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Approach - I\n\n## 1. Standard Scalar \n\nStandard Scalar is a technique in where the data will be transformed such that the mean value will be zero and the standard deviation will be 1.\n\nStandard scalar is an efficient method for scaling the data and we can use it in almost every case. However it wont have much effect if it comes to decision trees or regressors. But still keep this as the default scaling method. If you feel that this is not scaling the data then we could always switch to other scaling methods.\n\nBelow is the formula for **Standard Scalar**:\n\n![standard+scalar.PNG](attachment:standard+scalar.PNG)\n\nTo calculate the **mean** we will use the below formula:\n\n![mean.PNG](attachment:mean.PNG)\n\nTo calculate the **standard deviation** we will use the below formula:\n\n![standard+deviation.PNG](attachment:standard+deviation.PNG)\n\nlet's take an example to understand the Standard scalar method\n\nlet's say we have 10 random values x : 44, 50, 38, 96, 42, 47, 40, 39, 46, 50\n\n1. The **Mean** of x will be 44 + 50 + 38 + 96 + 42 + 47 + 40 + 39 + 46 + 50/ 10 = 492/10 = 49.2\n\n\n2. To calculate the standard deviation, lets create the below table\n\n| x | (x - 49.2) | (x - 49.2)^2 |\n|---|----------|----------------|\n|44 | -5.2 | 27.04 |\n|50 |0.8 |0.64 |\n|38 |-11.2 |125.44 |\n|96 |46.8 |2190.24 |\n|42 |-7.2 |51.84 |\n|47 |-2.2 |4.84 |\n|40 |-9.2 |86.64 |\n|39 |-10.2 |104.04 |\n|46 |-3.2 |10.24 |\n|50 |0.8 |0.64 |\n|Total|- |2600.4 |\n\nNow as per the formula of standard deviation: \\begin{equation*}\\sqrt{{1/N}\\sum_{i=1}^n (x - 49.2)^2}\\end{equation*}\n\n\\begin{equation*}=\\sqrt{2600.4/10}\\end{equation*}\n\\begin{equation*}=\\sqrt{260.04}\\end{equation*}\n\\begin{equation*}=16.13\\end{equation*}\n\nNow, the standard scalar for all the points are:\n\n\\begin{equation*}z =x - \\mu / \\sigma \\end{equation*}\n\\begin{equation*}z =x - \\mu / \\sigma \\end{equation*}\n\\begin{equation*} =-5.2/16.13 = -0.322 \\end{equation*}\n\\begin{equation*} =0.8/16.13 = 0.05 \\end{equation*}\n\\begin{equation*} =-11.2/16.13 = 0.694 \\end{equation*}\n\\begin{equation*} =46.8/16.13 = 2.90 \\end{equation*}\n\\begin{equation*} =-7.2/16.13 = -0.45 \\end{equation*}\n\\begin{equation*} =-2.2/16.13 = -0.136 \\end{equation*}\n\\begin{equation*} =-9.2/16.13 = -0.57 \\end{equation*}\n\\begin{equation*} =-10.2/16.13 = -0.632 \\end{equation*}\n\\begin{equation*} =-3.2/16.13 = -0.2 \\end{equation*}\n\\begin{equation*} =0.8/16.13 = 0.05\\end{equation*}\n\nIf you add all those above standard scalar points and calculate the mean then you will get a value which is approximately 0 and standard deviation approximately close to 1.",
"attachments": {
"standard+scalar.PNG": {
"image/png": "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"
},
"mean.PNG": {
"image/png": "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"
},
"standard+deviation.PNG": {
"image/png": "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"
}
}
},
{
"metadata": {},
"cell_type": "markdown",
"source": "#### Example: Let us implement the StandardScalar in a smaller set of array and see how it works."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from sklearn.preprocessing import StandardScaler\nimport numpy as np\n\n### 4 samples/observations and 2 variables/features\ndata = np.array([[0, 0], [1, 0], [0, 1], [1, 1]])\nscaler = StandardScaler()\nscaled_data = scaler.fit_transform(data)\n",
"execution_count": 129,
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": "C:\\Users\\tkhan050\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:475: DataConversionWarning: Data with input dtype int32 was converted to float64 by StandardScaler.\n warnings.warn(msg, DataConversionWarning)\n"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "print(\"Data: \", data)\nprint(\"Standard Scalar Data: \",scaled_data)",
"execution_count": 130,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "Data: [[0 0]\n [1 0]\n [0 1]\n [1 1]]\nStandard Scalar Data: [[-1. -1.]\n [ 1. -1.]\n [-1. 1.]\n [ 1. 1.]]\n"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "#### If you calculate the Standard Scalar using the math formula you will get the same result"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Now lets implement Standard Scalar to out data"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import pandas as pd\ndataset = '/Data.csv'",
"execution_count": 150,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df = pd.read_csv(dataset)",
"execution_count": 151,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df = df.loc[:, ~df.columns.str.contains('^Unnamed')]",
"execution_count": 152,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df.head()",
"execution_count": 153,
"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>id</th>\n <th>diagnosis</th>\n <th>radius_mean</th>\n <th>texture_mean</th>\n <th>perimeter_mean</th>\n <th>area_mean</th>\n <th>smoothness_mean</th>\n <th>compactness_mean</th>\n <th>concavity_mean</th>\n <th>concave points_mean</th>\n <th>...</th>\n <th>radius_worst</th>\n <th>texture_worst</th>\n <th>perimeter_worst</th>\n <th>area_worst</th>\n <th>smoothness_worst</th>\n <th>compactness_worst</th>\n <th>concavity_worst</th>\n <th>concave points_worst</th>\n <th>symmetry_worst</th>\n <th>fractal_dimension_worst</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>842302</td>\n <td>M</td>\n <td>17.99</td>\n <td>10.38</td>\n <td>122.80</td>\n <td>1001.0</td>\n <td>0.11840</td>\n <td>0.27760</td>\n <td>0.3001</td>\n <td>0.14710</td>\n <td>...</td>\n <td>25.38</td>\n <td>17.33</td>\n <td>184.60</td>\n <td>2019.0</td>\n <td>0.1622</td>\n <td>0.6656</td>\n <td>0.7119</td>\n <td>0.2654</td>\n <td>0.4601</td>\n <td>0.11890</td>\n </tr>\n <tr>\n <th>1</th>\n <td>842517</td>\n <td>M</td>\n <td>20.57</td>\n <td>17.77</td>\n <td>132.90</td>\n <td>1326.0</td>\n <td>0.08474</td>\n <td>0.07864</td>\n <td>0.0869</td>\n <td>0.07017</td>\n <td>...</td>\n <td>24.99</td>\n <td>23.41</td>\n <td>158.80</td>\n <td>1956.0</td>\n <td>0.1238</td>\n <td>0.1866</td>\n <td>0.2416</td>\n <td>0.1860</td>\n <td>0.2750</td>\n <td>0.08902</td>\n </tr>\n <tr>\n <th>2</th>\n <td>84300903</td>\n <td>M</td>\n <td>19.69</td>\n <td>21.25</td>\n <td>130.00</td>\n <td>1203.0</td>\n <td>0.10960</td>\n <td>0.15990</td>\n <td>0.1974</td>\n <td>0.12790</td>\n <td>...</td>\n <td>23.57</td>\n <td>25.53</td>\n <td>152.50</td>\n <td>1709.0</td>\n <td>0.1444</td>\n <td>0.4245</td>\n <td>0.4504</td>\n <td>0.2430</td>\n <td>0.3613</td>\n <td>0.08758</td>\n </tr>\n <tr>\n <th>3</th>\n <td>84348301</td>\n <td>M</td>\n <td>11.42</td>\n <td>20.38</td>\n <td>77.58</td>\n <td>386.1</td>\n <td>0.14250</td>\n <td>0.28390</td>\n <td>0.2414</td>\n <td>0.10520</td>\n <td>...</td>\n <td>14.91</td>\n <td>26.50</td>\n <td>98.87</td>\n <td>567.7</td>\n <td>0.2098</td>\n <td>0.8663</td>\n <td>0.6869</td>\n <td>0.2575</td>\n <td>0.6638</td>\n <td>0.17300</td>\n </tr>\n <tr>\n <th>4</th>\n <td>84358402</td>\n <td>M</td>\n <td>20.29</td>\n <td>14.34</td>\n <td>135.10</td>\n <td>1297.0</td>\n <td>0.10030</td>\n <td>0.13280</td>\n <td>0.1980</td>\n <td>0.10430</td>\n <td>...</td>\n <td>22.54</td>\n <td>16.67</td>\n <td>152.20</td>\n <td>1575.0</td>\n <td>0.1374</td>\n <td>0.2050</td>\n <td>0.4000</td>\n <td>0.1625</td>\n <td>0.2364</td>\n <td>0.07678</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 32 columns</p>\n</div>",
"text/plain": " id diagnosis radius_mean texture_mean perimeter_mean area_mean \\\n0 842302 M 17.99 10.38 122.80 1001.0 \n1 842517 M 20.57 17.77 132.90 1326.0 \n2 84300903 M 19.69 21.25 130.00 1203.0 \n3 84348301 M 11.42 20.38 77.58 386.1 \n4 84358402 M 20.29 14.34 135.10 1297.0 \n\n smoothness_mean compactness_mean concavity_mean concave points_mean \\\n0 0.11840 0.27760 0.3001 0.14710 \n1 0.08474 0.07864 0.0869 0.07017 \n2 0.10960 0.15990 0.1974 0.12790 \n3 0.14250 0.28390 0.2414 0.10520 \n4 0.10030 0.13280 0.1980 0.10430 \n\n ... radius_worst texture_worst perimeter_worst \\\n0 ... 25.38 17.33 184.60 \n1 ... 24.99 23.41 158.80 \n2 ... 23.57 25.53 152.50 \n3 ... 14.91 26.50 98.87 \n4 ... 22.54 16.67 152.20 \n\n area_worst smoothness_worst compactness_worst concavity_worst \\\n0 2019.0 0.1622 0.6656 0.7119 \n1 1956.0 0.1238 0.1866 0.2416 \n2 1709.0 0.1444 0.4245 0.4504 \n3 567.7 0.2098 0.8663 0.6869 \n4 1575.0 0.1374 0.2050 0.4000 \n\n concave points_worst symmetry_worst fractal_dimension_worst \n0 0.2654 0.4601 0.11890 \n1 0.1860 0.2750 0.08902 \n2 0.2430 0.3613 0.08758 \n3 0.2575 0.6638 0.17300 \n4 0.1625 0.2364 0.07678 \n\n[5 rows x 32 columns]"
},
"execution_count": 153,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 1.Check whether there is any missing data. If there is, drop the missing data:"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "missing = df.isna().any()",
"execution_count": 154,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "missing",
"execution_count": 155,
"outputs": [
{
"data": {
"text/plain": "id False\ndiagnosis False\nradius_mean False\ntexture_mean False\nperimeter_mean False\narea_mean False\nsmoothness_mean False\ncompactness_mean False\nconcavity_mean False\nconcave points_mean False\nsymmetry_mean False\nfractal_dimension_mean False\nradius_se False\ntexture_se False\nperimeter_se False\narea_se False\nsmoothness_se False\ncompactness_se False\nconcavity_se False\nconcave points_se False\nsymmetry_se False\nfractal_dimension_se False\nradius_worst False\ntexture_worst False\nperimeter_worst False\narea_worst False\nsmoothness_worst False\ncompactness_worst False\nconcavity_worst False\nconcave points_worst False\nsymmetry_worst False\nfractal_dimension_worst False\ndtype: bool"
},
"execution_count": 155,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 2. Check the datatypes"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df.dtypes",
"execution_count": 156,
"outputs": [
{
"data": {
"text/plain": "id int64\ndiagnosis object\nradius_mean float64\ntexture_mean float64\nperimeter_mean float64\narea_mean float64\nsmoothness_mean float64\ncompactness_mean float64\nconcavity_mean float64\nconcave points_mean float64\nsymmetry_mean float64\nfractal_dimension_mean float64\nradius_se float64\ntexture_se float64\nperimeter_se float64\narea_se float64\nsmoothness_se float64\ncompactness_se float64\nconcavity_se float64\nconcave points_se float64\nsymmetry_se float64\nfractal_dimension_se float64\nradius_worst float64\ntexture_worst float64\nperimeter_worst float64\narea_worst float64\nsmoothness_worst float64\ncompactness_worst float64\nconcavity_worst float64\nconcave points_worst float64\nsymmetry_worst float64\nfractal_dimension_worst float64\ndtype: object"
},
"execution_count": 156,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Concatenate both the above results"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "concatenate = pd.concat([missing,dtypes],axis=1,keys=['Null','datatype'])\nprint(concatenate)",
"execution_count": 157,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": " Null datatype\nid False int64\ndiagnosis False object\nradius_mean False float64\ntexture_mean False float64\nperimeter_mean False float64\narea_mean False float64\nsmoothness_mean False float64\ncompactness_mean False float64\nconcavity_mean False float64\nconcave points_mean False float64\nsymmetry_mean False float64\nfractal_dimension_mean False float64\nradius_se False float64\ntexture_se False float64\nperimeter_se False float64\narea_se False float64\nsmoothness_se False float64\ncompactness_se False float64\nconcavity_se False float64\nconcave points_se False float64\nsymmetry_se False float64\nfractal_dimension_se False float64\nradius_worst False float64\ntexture_worst False float64\nperimeter_worst False float64\narea_worst False float64\nsmoothness_worst False float64\ncompactness_worst False float64\nconcavity_worst False float64\nconcave points_worst False float64\nsymmetry_worst False float64\nfractal_dimension_worst False float64\n"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "As you could see we have one column \"**diagnosis**\" which is a categorical column. We need to convert it into numerical column before applying StandardScalar() or else it won't fit. We will use the one hot encoding method for that"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df_dummies = pd.get_dummies(df, drop_first=False)",
"execution_count": 163,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df_dummies.head()",
"execution_count": 164,
"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>id</th>\n <th>radius_mean</th>\n <th>texture_mean</th>\n <th>perimeter_mean</th>\n <th>area_mean</th>\n <th>smoothness_mean</th>\n <th>compactness_mean</th>\n <th>concavity_mean</th>\n <th>concave points_mean</th>\n <th>symmetry_mean</th>\n <th>...</th>\n <th>perimeter_worst</th>\n <th>area_worst</th>\n <th>smoothness_worst</th>\n <th>compactness_worst</th>\n <th>concavity_worst</th>\n <th>concave points_worst</th>\n <th>symmetry_worst</th>\n <th>fractal_dimension_worst</th>\n <th>diagnosis_B</th>\n <th>diagnosis_M</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>842302</td>\n <td>17.99</td>\n <td>10.38</td>\n <td>122.80</td>\n <td>1001.0</td>\n <td>0.11840</td>\n <td>0.27760</td>\n <td>0.3001</td>\n <td>0.14710</td>\n <td>0.2419</td>\n <td>...</td>\n <td>184.60</td>\n <td>2019.0</td>\n <td>0.1622</td>\n <td>0.6656</td>\n <td>0.7119</td>\n <td>0.2654</td>\n <td>0.4601</td>\n <td>0.11890</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>1</th>\n <td>842517</td>\n <td>20.57</td>\n <td>17.77</td>\n <td>132.90</td>\n <td>1326.0</td>\n <td>0.08474</td>\n <td>0.07864</td>\n <td>0.0869</td>\n <td>0.07017</td>\n <td>0.1812</td>\n <td>...</td>\n <td>158.80</td>\n <td>1956.0</td>\n <td>0.1238</td>\n <td>0.1866</td>\n <td>0.2416</td>\n <td>0.1860</td>\n <td>0.2750</td>\n <td>0.08902</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>2</th>\n <td>84300903</td>\n <td>19.69</td>\n <td>21.25</td>\n <td>130.00</td>\n <td>1203.0</td>\n <td>0.10960</td>\n <td>0.15990</td>\n <td>0.1974</td>\n <td>0.12790</td>\n <td>0.2069</td>\n <td>...</td>\n <td>152.50</td>\n <td>1709.0</td>\n <td>0.1444</td>\n <td>0.4245</td>\n <td>0.4504</td>\n <td>0.2430</td>\n <td>0.3613</td>\n <td>0.08758</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>3</th>\n <td>84348301</td>\n <td>11.42</td>\n <td>20.38</td>\n <td>77.58</td>\n <td>386.1</td>\n <td>0.14250</td>\n <td>0.28390</td>\n <td>0.2414</td>\n <td>0.10520</td>\n <td>0.2597</td>\n <td>...</td>\n <td>98.87</td>\n <td>567.7</td>\n <td>0.2098</td>\n <td>0.8663</td>\n <td>0.6869</td>\n <td>0.2575</td>\n <td>0.6638</td>\n <td>0.17300</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>84358402</td>\n <td>20.29</td>\n <td>14.34</td>\n <td>135.10</td>\n <td>1297.0</td>\n <td>0.10030</td>\n <td>0.13280</td>\n <td>0.1980</td>\n <td>0.10430</td>\n <td>0.1809</td>\n <td>...</td>\n <td>152.20</td>\n <td>1575.0</td>\n <td>0.1374</td>\n <td>0.2050</td>\n <td>0.4000</td>\n <td>0.1625</td>\n <td>0.2364</td>\n <td>0.07678</td>\n <td>0</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 33 columns</p>\n</div>",
"text/plain": " id radius_mean texture_mean perimeter_mean area_mean \\\n0 842302 17.99 10.38 122.80 1001.0 \n1 842517 20.57 17.77 132.90 1326.0 \n2 84300903 19.69 21.25 130.00 1203.0 \n3 84348301 11.42 20.38 77.58 386.1 \n4 84358402 20.29 14.34 135.10 1297.0 \n\n smoothness_mean compactness_mean concavity_mean concave points_mean \\\n0 0.11840 0.27760 0.3001 0.14710 \n1 0.08474 0.07864 0.0869 0.07017 \n2 0.10960 0.15990 0.1974 0.12790 \n3 0.14250 0.28390 0.2414 0.10520 \n4 0.10030 0.13280 0.1980 0.10430 \n\n symmetry_mean ... perimeter_worst area_worst smoothness_worst \\\n0 0.2419 ... 184.60 2019.0 0.1622 \n1 0.1812 ... 158.80 1956.0 0.1238 \n2 0.2069 ... 152.50 1709.0 0.1444 \n3 0.2597 ... 98.87 567.7 0.2098 \n4 0.1809 ... 152.20 1575.0 0.1374 \n\n compactness_worst concavity_worst concave points_worst symmetry_worst \\\n0 0.6656 0.7119 0.2654 0.4601 \n1 0.1866 0.2416 0.1860 0.2750 \n2 0.4245 0.4504 0.2430 0.3613 \n3 0.8663 0.6869 0.2575 0.6638 \n4 0.2050 0.4000 0.1625 0.2364 \n\n fractal_dimension_worst diagnosis_B diagnosis_M \n0 0.11890 0 1 \n1 0.08902 0 1 \n2 0.08758 0 1 \n3 0.17300 0 1 \n4 0.07678 0 1 \n\n[5 rows x 33 columns]"
},
"execution_count": 164,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df_dummies.columns",
"execution_count": 165,
"outputs": [
{
"data": {
"text/plain": "Index(['id', 'radius_mean', 'texture_mean', 'perimeter_mean', 'area_mean',\n 'smoothness_mean', 'compactness_mean', 'concavity_mean',\n 'concave points_mean', 'symmetry_mean', 'fractal_dimension_mean',\n 'radius_se', 'texture_se', 'perimeter_se', 'area_se', 'smoothness_se',\n 'compactness_se', 'concavity_se', 'concave points_se', 'symmetry_se',\n 'fractal_dimension_se', 'radius_worst', 'texture_worst',\n 'perimeter_worst', 'area_worst', 'smoothness_worst',\n 'compactness_worst', 'concavity_worst', 'concave points_worst',\n 'symmetry_worst', 'fractal_dimension_worst', 'diagnosis_B',\n 'diagnosis_M'],\n dtype='object')"
},
"execution_count": 165,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 2. Now perform standard scaling and print the first five rows of the new dataset. To do so, use the StandardScaler() class from sklearn.preprocessing and implement the fit_transorm() method: "
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from sklearn import preprocessing\nstandarsScalar = preprocessing.StandardScaler().fit_transform(df_dummies)",
"execution_count": 170,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "standarsScalar",
"execution_count": 171,
"outputs": [
{
"data": {
"text/plain": "array([[-0.23640517, 1.09706398, -2.07333501, ..., 1.93701461,\n -1.29767572, 1.29767572],\n [-0.23640344, 1.82982061, -0.35363241, ..., 0.28118999,\n -1.29767572, 1.29767572],\n [ 0.43174109, 1.57988811, 0.45618695, ..., 0.20139121,\n -1.29767572, 1.29767572],\n ...,\n [-0.23572747, 0.70228425, 2.0455738 , ..., -0.31840916,\n -1.29767572, 1.29767572],\n [-0.23572517, 1.83834103, 2.33645719, ..., 2.21963528,\n -1.29767572, 1.29767572],\n [-0.24240586, -1.80840125, 1.22179204, ..., -0.75120669,\n 0.77060855, -0.77060855]])"
},
"execution_count": 171,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "scale_frame = pd.DataFrame(standarsScalar,columns=df_dummies.columns)",
"execution_count": 173,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "scale_frame.head()",
"execution_count": 174,
"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>id</th>\n <th>radius_mean</th>\n <th>texture_mean</th>\n <th>perimeter_mean</th>\n <th>area_mean</th>\n <th>smoothness_mean</th>\n <th>compactness_mean</th>\n <th>concavity_mean</th>\n <th>concave points_mean</th>\n <th>symmetry_mean</th>\n <th>...</th>\n <th>perimeter_worst</th>\n <th>area_worst</th>\n <th>smoothness_worst</th>\n <th>compactness_worst</th>\n <th>concavity_worst</th>\n <th>concave points_worst</th>\n <th>symmetry_worst</th>\n <th>fractal_dimension_worst</th>\n <th>diagnosis_B</th>\n <th>diagnosis_M</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>-0.236405</td>\n <td>1.097064</td>\n <td>-2.073335</td>\n <td>1.269934</td>\n <td>0.984375</td>\n <td>1.568466</td>\n <td>3.283515</td>\n <td>2.652874</td>\n <td>2.532475</td>\n <td>2.217515</td>\n <td>...</td>\n <td>2.303601</td>\n <td>2.001237</td>\n <td>1.307686</td>\n <td>2.616665</td>\n <td>2.109526</td>\n <td>2.296076</td>\n <td>2.750622</td>\n <td>1.937015</td>\n <td>-1.297676</td>\n <td>1.297676</td>\n </tr>\n <tr>\n <th>1</th>\n <td>-0.236403</td>\n <td>1.829821</td>\n <td>-0.353632</td>\n <td>1.685955</td>\n <td>1.908708</td>\n <td>-0.826962</td>\n <td>-0.487072</td>\n <td>-0.023846</td>\n <td>0.548144</td>\n <td>0.001392</td>\n <td>...</td>\n <td>1.535126</td>\n <td>1.890489</td>\n <td>-0.375612</td>\n <td>-0.430444</td>\n <td>-0.146749</td>\n <td>1.087084</td>\n <td>-0.243890</td>\n <td>0.281190</td>\n <td>-1.297676</td>\n <td>1.297676</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0.431741</td>\n <td>1.579888</td>\n <td>0.456187</td>\n <td>1.566503</td>\n <td>1.558884</td>\n <td>0.942210</td>\n <td>1.052926</td>\n <td>1.363478</td>\n <td>2.037231</td>\n <td>0.939685</td>\n <td>...</td>\n <td>1.347475</td>\n <td>1.456285</td>\n <td>0.527407</td>\n <td>1.082932</td>\n <td>0.854974</td>\n <td>1.955000</td>\n <td>1.152255</td>\n <td>0.201391</td>\n <td>-1.297676</td>\n <td>1.297676</td>\n </tr>\n <tr>\n <th>3</th>\n <td>0.432121</td>\n <td>-0.768909</td>\n <td>0.253732</td>\n <td>-0.592687</td>\n <td>-0.764464</td>\n <td>3.283553</td>\n <td>3.402909</td>\n <td>1.915897</td>\n <td>1.451707</td>\n <td>2.867383</td>\n <td>...</td>\n <td>-0.249939</td>\n <td>-0.550021</td>\n <td>3.394275</td>\n <td>3.893397</td>\n <td>1.989588</td>\n <td>2.175786</td>\n <td>6.046041</td>\n <td>4.935010</td>\n <td>-1.297676</td>\n <td>1.297676</td>\n </tr>\n <tr>\n <th>4</th>\n <td>0.432201</td>\n <td>1.750297</td>\n <td>-1.151816</td>\n <td>1.776573</td>\n <td>1.826229</td>\n <td>0.280372</td>\n <td>0.539340</td>\n <td>1.371011</td>\n <td>1.428493</td>\n <td>-0.009560</td>\n <td>...</td>\n <td>1.338539</td>\n <td>1.220724</td>\n <td>0.220556</td>\n <td>-0.313395</td>\n <td>0.613179</td>\n <td>0.729259</td>\n <td>-0.868353</td>\n <td>-0.397100</td>\n <td>-1.297676</td>\n <td>1.297676</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 33 columns</p>\n</div>",
"text/plain": " id radius_mean texture_mean perimeter_mean area_mean \\\n0 -0.236405 1.097064 -2.073335 1.269934 0.984375 \n1 -0.236403 1.829821 -0.353632 1.685955 1.908708 \n2 0.431741 1.579888 0.456187 1.566503 1.558884 \n3 0.432121 -0.768909 0.253732 -0.592687 -0.764464 \n4 0.432201 1.750297 -1.151816 1.776573 1.826229 \n\n smoothness_mean compactness_mean concavity_mean concave points_mean \\\n0 1.568466 3.283515 2.652874 2.532475 \n1 -0.826962 -0.487072 -0.023846 0.548144 \n2 0.942210 1.052926 1.363478 2.037231 \n3 3.283553 3.402909 1.915897 1.451707 \n4 0.280372 0.539340 1.371011 1.428493 \n\n symmetry_mean ... perimeter_worst area_worst smoothness_worst \\\n0 2.217515 ... 2.303601 2.001237 1.307686 \n1 0.001392 ... 1.535126 1.890489 -0.375612 \n2 0.939685 ... 1.347475 1.456285 0.527407 \n3 2.867383 ... -0.249939 -0.550021 3.394275 \n4 -0.009560 ... 1.338539 1.220724 0.220556 \n\n compactness_worst concavity_worst concave points_worst symmetry_worst \\\n0 2.616665 2.109526 2.296076 2.750622 \n1 -0.430444 -0.146749 1.087084 -0.243890 \n2 1.082932 0.854974 1.955000 1.152255 \n3 3.893397 1.989588 2.175786 6.046041 \n4 -0.313395 0.613179 0.729259 -0.868353 \n\n fractal_dimension_worst diagnosis_B diagnosis_M \n0 1.937015 -1.297676 1.297676 \n1 0.281190 -1.297676 1.297676 \n2 0.201391 -1.297676 1.297676 \n3 4.935010 -1.297676 1.297676 \n4 -0.397100 -1.297676 1.297676 \n\n[5 rows x 33 columns]"
},
"execution_count": 174,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "As you could see above we have scaled the data into a uniform range of same scale using the **StandardScalar** scaling method. Now it will become easy to ingest the data to the model and get accurate results."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Approach - II\n\n## 1. MinMax Scalar \n\nMinMax Scalar is another method of scaling the data. The formula for the MinMax scaler is :\n \n![MinMax.PNG](attachment:MinMax.PNG)\n\nLet's take an example to calculate MinMax Scalar\n\nWe have a 5 numbers: -1000.1, -200.2, 500.5, 600.6, 9000.9\n\nTo calculate the MinMax scalar:\n\n\\begin{equation*} z = (-1000.1 -min(x))/(max(x) -min(x))\\end{equation*}\n\n\\begin{equation*} =(-1000.1+1000.1)/(9000.9+1000.1) = 0 \\end{equation*}\n\\begin{equation*} =(-200.2+1000.1)/(9000.9+1000.1) = 0.079982 \\end{equation*}\n\\begin{equation*} =(500.5+1000.1)/(9000.9+1000.1) = 0.150045 \\end{equation*}\n\\begin{equation*} =(600.6.1+1000.1)/(9000.9+1000.1) =0.16005399 \\end{equation*}\n\\begin{equation*} =(9000.9+1000.1)/(9000.9+1000.1) = 1 \\end{equation*}\n\nLet's implement it in code and see:\n\n**MinMax Scalar** is a good method for scaling your data but the disadvantage that is there for this method is your scaled data will be bounded between 0, 1 which will have lower standard deviation and will also downsize or diminish the effect of outliers. We won't really be able to understand if some of the data is an outlier or not as the difference will be minimal due to such small boundary.",
"attachments": {
"MinMax.PNG": {
"image/png": "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"
}
}
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import numpy as np\nfrom sklearn.preprocessing import MinMaxScaler\n\n# Create feature\nx = np.array([[-1000.1],\n [-200.2],\n [500.5],\n [600.6],\n [9000.9]])\n\n# Create scaler\nscaler = MinMaxScaler()\n\n# Transform the feature\nstandardized = scaler.fit_transform(x)",
"execution_count": 183,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "standardized",
"execution_count": 184,
"outputs": [
{
"data": {
"text/plain": "array([[0. ],\n [0.079982 ],\n [0.150045 ],\n [0.16005399],\n [1. ]])"
},
"execution_count": 184,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 1. Let's implement MinMax scalar to our existing dataset"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from sklearn import preprocessing\nimport pandas as pd\ndataset = '/Data.csv'\n\ndf = pd.read_csv(dataset)\ndf = df.loc[:, ~df.columns.str.contains('^Unnamed')]\n\ndf_dummies = pd.get_dummies(df, drop_first=False)",
"execution_count": 2,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df_dummies.head()",
"execution_count": 3,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 3,
"data": {
"text/plain": " id radius_mean texture_mean perimeter_mean area_mean \\\n0 842302 17.99 10.38 122.80 1001.0 \n1 842517 20.57 17.77 132.90 1326.0 \n2 84300903 19.69 21.25 130.00 1203.0 \n3 84348301 11.42 20.38 77.58 386.1 \n4 84358402 20.29 14.34 135.10 1297.0 \n\n smoothness_mean compactness_mean concavity_mean concave points_mean \\\n0 0.11840 0.27760 0.3001 0.14710 \n1 0.08474 0.07864 0.0869 0.07017 \n2 0.10960 0.15990 0.1974 0.12790 \n3 0.14250 0.28390 0.2414 0.10520 \n4 0.10030 0.13280 0.1980 0.10430 \n\n symmetry_mean ... perimeter_worst area_worst smoothness_worst \\\n0 0.2419 ... 184.60 2019.0 0.1622 \n1 0.1812 ... 158.80 1956.0 0.1238 \n2 0.2069 ... 152.50 1709.0 0.1444 \n3 0.2597 ... 98.87 567.7 0.2098 \n4 0.1809 ... 152.20 1575.0 0.1374 \n\n compactness_worst concavity_worst concave points_worst symmetry_worst \\\n0 0.6656 0.7119 0.2654 0.4601 \n1 0.1866 0.2416 0.1860 0.2750 \n2 0.4245 0.4504 0.2430 0.3613 \n3 0.8663 0.6869 0.2575 0.6638 \n4 0.2050 0.4000 0.1625 0.2364 \n\n fractal_dimension_worst diagnosis_B diagnosis_M \n0 0.11890 0 1 \n1 0.08902 0 1 \n2 0.08758 0 1 \n3 0.17300 0 1 \n4 0.07678 0 1 \n\n[5 rows x 33 columns]",
"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>id</th>\n <th>radius_mean</th>\n <th>texture_mean</th>\n <th>perimeter_mean</th>\n <th>area_mean</th>\n <th>smoothness_mean</th>\n <th>compactness_mean</th>\n <th>concavity_mean</th>\n <th>concave points_mean</th>\n <th>symmetry_mean</th>\n <th>...</th>\n <th>perimeter_worst</th>\n <th>area_worst</th>\n <th>smoothness_worst</th>\n <th>compactness_worst</th>\n <th>concavity_worst</th>\n <th>concave points_worst</th>\n <th>symmetry_worst</th>\n <th>fractal_dimension_worst</th>\n <th>diagnosis_B</th>\n <th>diagnosis_M</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>842302</td>\n <td>17.99</td>\n <td>10.38</td>\n <td>122.80</td>\n <td>1001.0</td>\n <td>0.11840</td>\n <td>0.27760</td>\n <td>0.3001</td>\n <td>0.14710</td>\n <td>0.2419</td>\n <td>...</td>\n <td>184.60</td>\n <td>2019.0</td>\n <td>0.1622</td>\n <td>0.6656</td>\n <td>0.7119</td>\n <td>0.2654</td>\n <td>0.4601</td>\n <td>0.11890</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>1</th>\n <td>842517</td>\n <td>20.57</td>\n <td>17.77</td>\n <td>132.90</td>\n <td>1326.0</td>\n <td>0.08474</td>\n <td>0.07864</td>\n <td>0.0869</td>\n <td>0.07017</td>\n <td>0.1812</td>\n <td>...</td>\n <td>158.80</td>\n <td>1956.0</td>\n <td>0.1238</td>\n <td>0.1866</td>\n <td>0.2416</td>\n <td>0.1860</td>\n <td>0.2750</td>\n <td>0.08902</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>2</th>\n <td>84300903</td>\n <td>19.69</td>\n <td>21.25</td>\n <td>130.00</td>\n <td>1203.0</td>\n <td>0.10960</td>\n <td>0.15990</td>\n <td>0.1974</td>\n <td>0.12790</td>\n <td>0.2069</td>\n <td>...</td>\n <td>152.50</td>\n <td>1709.0</td>\n <td>0.1444</td>\n <td>0.4245</td>\n <td>0.4504</td>\n <td>0.2430</td>\n <td>0.3613</td>\n <td>0.08758</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>3</th>\n <td>84348301</td>\n <td>11.42</td>\n <td>20.38</td>\n <td>77.58</td>\n <td>386.1</td>\n <td>0.14250</td>\n <td>0.28390</td>\n <td>0.2414</td>\n <td>0.10520</td>\n <td>0.2597</td>\n <td>...</td>\n <td>98.87</td>\n <td>567.7</td>\n <td>0.2098</td>\n <td>0.8663</td>\n <td>0.6869</td>\n <td>0.2575</td>\n <td>0.6638</td>\n <td>0.17300</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>84358402</td>\n <td>20.29</td>\n <td>14.34</td>\n <td>135.10</td>\n <td>1297.0</td>\n <td>0.10030</td>\n <td>0.13280</td>\n <td>0.1980</td>\n <td>0.10430</td>\n <td>0.1809</td>\n <td>...</td>\n <td>152.20</td>\n <td>1575.0</td>\n <td>0.1374</td>\n <td>0.2050</td>\n <td>0.4000</td>\n <td>0.1625</td>\n <td>0.2364</td>\n <td>0.07678</td>\n <td>0</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 33 columns</p>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "minmax_scaled_data = preprocessing.MinMaxScaler().fit_transform(df_dummies)\nminmax_scaled_data_frame = pd.DataFrame(minmax_scaled_data,columns=df_dummies.columns)",
"execution_count": 190,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "minmax_scaled_data_frame.head()",
"execution_count": 191,
"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>id</th>\n <th>radius_mean</th>\n <th>texture_mean</th>\n <th>perimeter_mean</th>\n <th>area_mean</th>\n <th>smoothness_mean</th>\n <th>compactness_mean</th>\n <th>concavity_mean</th>\n <th>concave points_mean</th>\n <th>symmetry_mean</th>\n <th>...</th>\n <th>perimeter_worst</th>\n <th>area_worst</th>\n <th>smoothness_worst</th>\n <th>compactness_worst</th>\n <th>concavity_worst</th>\n <th>concave points_worst</th>\n <th>symmetry_worst</th>\n <th>fractal_dimension_worst</th>\n <th>diagnosis_B</th>\n <th>diagnosis_M</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0.000915</td>\n <td>0.521037</td>\n <td>0.022658</td>\n <td>0.545989</td>\n <td>0.363733</td>\n <td>0.593753</td>\n <td>0.792037</td>\n <td>0.703140</td>\n <td>0.731113</td>\n <td>0.686364</td>\n <td>...</td>\n <td>0.668310</td>\n <td>0.450698</td>\n <td>0.601136</td>\n <td>0.619292</td>\n <td>0.568610</td>\n <td>0.912027</td>\n <td>0.598462</td>\n <td>0.418864</td>\n <td>0.0</td>\n <td>1.0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0.000915</td>\n <td>0.643144</td>\n <td>0.272574</td>\n <td>0.615783</td>\n <td>0.501591</td>\n <td>0.289880</td>\n <td>0.181768</td>\n <td>0.203608</td>\n <td>0.348757</td>\n <td>0.379798</td>\n <td>...</td>\n <td>0.539818</td>\n <td>0.435214</td>\n <td>0.347553</td>\n <td>0.154563</td>\n <td>0.192971</td>\n <td>0.639175</td>\n <td>0.233590</td>\n <td>0.222878</td>\n <td>0.0</td>\n <td>1.0</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0.092495</td>\n <td>0.601496</td>\n <td>0.390260</td>\n <td>0.595743</td>\n <td>0.449417</td>\n <td>0.514309</td>\n <td>0.431017</td>\n <td>0.462512</td>\n <td>0.635686</td>\n <td>0.509596</td>\n <td>...</td>\n <td>0.508442</td>\n <td>0.374508</td>\n <td>0.483590</td>\n <td>0.385375</td>\n <td>0.359744</td>\n <td>0.835052</td>\n <td>0.403706</td>\n <td>0.213433</td>\n <td>0.0</td>\n <td>1.0</td>\n </tr>\n <tr>\n <th>3</th>\n <td>0.092547</td>\n <td>0.210090</td>\n <td>0.360839</td>\n <td>0.233501</td>\n <td>0.102906</td>\n <td>0.811321</td>\n <td>0.811361</td>\n <td>0.565604</td>\n <td>0.522863</td>\n <td>0.776263</td>\n <td>...</td>\n <td>0.241347</td>\n <td>0.094008</td>\n <td>0.915472</td>\n <td>0.814012</td>\n <td>0.548642</td>\n <td>0.884880</td>\n <td>1.000000</td>\n <td>0.773711</td>\n <td>0.0</td>\n <td>1.0</td>\n </tr>\n <tr>\n <th>4</th>\n <td>0.092559</td>\n <td>0.629893</td>\n <td>0.156578</td>\n <td>0.630986</td>\n <td>0.489290</td>\n <td>0.430351</td>\n <td>0.347893</td>\n <td>0.463918</td>\n <td>0.518390</td>\n <td>0.378283</td>\n <td>...</td>\n <td>0.506948</td>\n <td>0.341575</td>\n <td>0.437364</td>\n <td>0.172415</td>\n <td>0.319489</td>\n <td>0.558419</td>\n <td>0.157500</td>\n <td>0.142595</td>\n <td>0.0</td>\n <td>1.0</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 33 columns</p>\n</div>",
"text/plain": " id radius_mean texture_mean perimeter_mean area_mean \\\n0 0.000915 0.521037 0.022658 0.545989 0.363733 \n1 0.000915 0.643144 0.272574 0.615783 0.501591 \n2 0.092495 0.601496 0.390260 0.595743 0.449417 \n3 0.092547 0.210090 0.360839 0.233501 0.102906 \n4 0.092559 0.629893 0.156578 0.630986 0.489290 \n\n smoothness_mean compactness_mean concavity_mean concave points_mean \\\n0 0.593753 0.792037 0.703140 0.731113 \n1 0.289880 0.181768 0.203608 0.348757 \n2 0.514309 0.431017 0.462512 0.635686 \n3 0.811321 0.811361 0.565604 0.522863 \n4 0.430351 0.347893 0.463918 0.518390 \n\n symmetry_mean ... perimeter_worst area_worst smoothness_worst \\\n0 0.686364 ... 0.668310 0.450698 0.601136 \n1 0.379798 ... 0.539818 0.435214 0.347553 \n2 0.509596 ... 0.508442 0.374508 0.483590 \n3 0.776263 ... 0.241347 0.094008 0.915472 \n4 0.378283 ... 0.506948 0.341575 0.437364 \n\n compactness_worst concavity_worst concave points_worst symmetry_worst \\\n0 0.619292 0.568610 0.912027 0.598462 \n1 0.154563 0.192971 0.639175 0.233590 \n2 0.385375 0.359744 0.835052 0.403706 \n3 0.814012 0.548642 0.884880 1.000000 \n4 0.172415 0.319489 0.558419 0.157500 \n\n fractal_dimension_worst diagnosis_B diagnosis_M \n0 0.418864 0.0 1.0 \n1 0.222878 0.0 1.0 \n2 0.213433 0.0 1.0 \n3 0.773711 0.0 1.0 \n4 0.142595 0.0 1.0 \n\n[5 rows x 33 columns]"
},
"execution_count": 191,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "As you could see above, we have used MinMax scalar method here to scale our data. Now the value of all the features in the table has been transformed to a uniform range between 0 and 1"
},
{
"metadata": {
"trusted": true
},
"cell_type": "markdown",
"source": "## Bucketing of Data\n\nIn order to bucket the data for easy maintainability, we group the continuous data into discrete buckets. The reason we do this is, when we are training the model, discrete data works well and faster in comparison to the continuous data.\nEven if continuous data contains more information, it will make the model slow. \n\nThere are few techniques for data discretization/bucketing:\n\n1. Binning\n2. Using a Histogram\n\nThere are few challenges though in data discretization. Picking the range of each bucket is a challenge,choosing the number of intervals or bins and deciding their width. \n\nHere we make use of a function called **pandas.cut()**. This function is useful to achieve the bucketing and sorting of segmented data.\n\n#### Lets import out dataset and implement data discretization to see how it looks"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df_dummies.head()",
"execution_count": 4,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 4,
"data": {
"text/plain": " id radius_mean texture_mean perimeter_mean area_mean \\\n0 842302 17.99 10.38 122.80 1001.0 \n1 842517 20.57 17.77 132.90 1326.0 \n2 84300903 19.69 21.25 130.00 1203.0 \n3 84348301 11.42 20.38 77.58 386.1 \n4 84358402 20.29 14.34 135.10 1297.0 \n\n smoothness_mean compactness_mean concavity_mean concave points_mean \\\n0 0.11840 0.27760 0.3001 0.14710 \n1 0.08474 0.07864 0.0869 0.07017 \n2 0.10960 0.15990 0.1974 0.12790 \n3 0.14250 0.28390 0.2414 0.10520 \n4 0.10030 0.13280 0.1980 0.10430 \n\n symmetry_mean ... perimeter_worst area_worst smoothness_worst \\\n0 0.2419 ... 184.60 2019.0 0.1622 \n1 0.1812 ... 158.80 1956.0 0.1238 \n2 0.2069 ... 152.50 1709.0 0.1444 \n3 0.2597 ... 98.87 567.7 0.2098 \n4 0.1809 ... 152.20 1575.0 0.1374 \n\n compactness_worst concavity_worst concave points_worst symmetry_worst \\\n0 0.6656 0.7119 0.2654 0.4601 \n1 0.1866 0.2416 0.1860 0.2750 \n2 0.4245 0.4504 0.2430 0.3613 \n3 0.8663 0.6869 0.2575 0.6638 \n4 0.2050 0.4000 0.1625 0.2364 \n\n fractal_dimension_worst diagnosis_B diagnosis_M \n0 0.11890 0 1 \n1 0.08902 0 1 \n2 0.08758 0 1 \n3 0.17300 0 1 \n4 0.07678 0 1 \n\n[5 rows x 33 columns]",
"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>id</th>\n <th>radius_mean</th>\n <th>texture_mean</th>\n <th>perimeter_mean</th>\n <th>area_mean</th>\n <th>smoothness_mean</th>\n <th>compactness_mean</th>\n <th>concavity_mean</th>\n <th>concave points_mean</th>\n <th>symmetry_mean</th>\n <th>...</th>\n <th>perimeter_worst</th>\n <th>area_worst</th>\n <th>smoothness_worst</th>\n <th>compactness_worst</th>\n <th>concavity_worst</th>\n <th>concave points_worst</th>\n <th>symmetry_worst</th>\n <th>fractal_dimension_worst</th>\n <th>diagnosis_B</th>\n <th>diagnosis_M</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>842302</td>\n <td>17.99</td>\n <td>10.38</td>\n <td>122.80</td>\n <td>1001.0</td>\n <td>0.11840</td>\n <td>0.27760</td>\n <td>0.3001</td>\n <td>0.14710</td>\n <td>0.2419</td>\n <td>...</td>\n <td>184.60</td>\n <td>2019.0</td>\n <td>0.1622</td>\n <td>0.6656</td>\n <td>0.7119</td>\n <td>0.2654</td>\n <td>0.4601</td>\n <td>0.11890</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>1</th>\n <td>842517</td>\n <td>20.57</td>\n <td>17.77</td>\n <td>132.90</td>\n <td>1326.0</td>\n <td>0.08474</td>\n <td>0.07864</td>\n <td>0.0869</td>\n <td>0.07017</td>\n <td>0.1812</td>\n <td>...</td>\n <td>158.80</td>\n <td>1956.0</td>\n <td>0.1238</td>\n <td>0.1866</td>\n <td>0.2416</td>\n <td>0.1860</td>\n <td>0.2750</td>\n <td>0.08902</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>2</th>\n <td>84300903</td>\n <td>19.69</td>\n <td>21.25</td>\n <td>130.00</td>\n <td>1203.0</td>\n <td>0.10960</td>\n <td>0.15990</td>\n <td>0.1974</td>\n <td>0.12790</td>\n <td>0.2069</td>\n <td>...</td>\n <td>152.50</td>\n <td>1709.0</td>\n <td>0.1444</td>\n <td>0.4245</td>\n <td>0.4504</td>\n <td>0.2430</td>\n <td>0.3613</td>\n <td>0.08758</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>3</th>\n <td>84348301</td>\n <td>11.42</td>\n <td>20.38</td>\n <td>77.58</td>\n <td>386.1</td>\n <td>0.14250</td>\n <td>0.28390</td>\n <td>0.2414</td>\n <td>0.10520</td>\n <td>0.2597</td>\n <td>...</td>\n <td>98.87</td>\n <td>567.7</td>\n <td>0.2098</td>\n <td>0.8663</td>\n <td>0.6869</td>\n <td>0.2575</td>\n <td>0.6638</td>\n <td>0.17300</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>84358402</td>\n <td>20.29</td>\n <td>14.34</td>\n <td>135.10</td>\n <td>1297.0</td>\n <td>0.10030</td>\n <td>0.13280</td>\n <td>0.1980</td>\n <td>0.10430</td>\n <td>0.1809</td>\n <td>...</td>\n <td>152.20</td>\n <td>1575.0</td>\n <td>0.1374</td>\n <td>0.2050</td>\n <td>0.4000</td>\n <td>0.1625</td>\n <td>0.2364</td>\n <td>0.07678</td>\n <td>0</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 33 columns</p>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df_dummies['Bucketed'] = pd.cut(df_dummies['radius_mean'],3,labels=['Low_mean','Average_mean','High_mean'])",
"execution_count": 5,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df_dummies.head()",
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 8,
"data": {
"text/plain": " id radius_mean texture_mean perimeter_mean area_mean \\\n0 842302 17.99 10.38 122.80 1001.0 \n1 842517 20.57 17.77 132.90 1326.0 \n2 84300903 19.69 21.25 130.00 1203.0 \n3 84348301 11.42 20.38 77.58 386.1 \n4 84358402 20.29 14.34 135.10 1297.0 \n\n smoothness_mean compactness_mean concavity_mean concave points_mean \\\n0 0.11840 0.27760 0.3001 0.14710 \n1 0.08474 0.07864 0.0869 0.07017 \n2 0.10960 0.15990 0.1974 0.12790 \n3 0.14250 0.28390 0.2414 0.10520 \n4 0.10030 0.13280 0.1980 0.10430 \n\n symmetry_mean ... area_worst smoothness_worst \\\n0 0.2419 ... 2019.0 0.1622 \n1 0.1812 ... 1956.0 0.1238 \n2 0.2069 ... 1709.0 0.1444 \n3 0.2597 ... 567.7 0.2098 \n4 0.1809 ... 1575.0 0.1374 \n\n compactness_worst concavity_worst concave points_worst symmetry_worst \\\n0 0.6656 0.7119 0.2654 0.4601 \n1 0.1866 0.2416 0.1860 0.2750 \n2 0.4245 0.4504 0.2430 0.3613 \n3 0.8663 0.6869 0.2575 0.6638 \n4 0.2050 0.4000 0.1625 0.2364 \n\n fractal_dimension_worst diagnosis_B diagnosis_M Bucketed \n0 0.11890 0 1 Average_mean \n1 0.08902 0 1 Average_mean \n2 0.08758 0 1 Average_mean \n3 0.17300 0 1 Low_mean \n4 0.07678 0 1 Average_mean \n\n[5 rows x 34 columns]",
"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>id</th>\n <th>radius_mean</th>\n <th>texture_mean</th>\n <th>perimeter_mean</th>\n <th>area_mean</th>\n <th>smoothness_mean</th>\n <th>compactness_mean</th>\n <th>concavity_mean</th>\n <th>concave points_mean</th>\n <th>symmetry_mean</th>\n <th>...</th>\n <th>area_worst</th>\n <th>smoothness_worst</th>\n <th>compactness_worst</th>\n <th>concavity_worst</th>\n <th>concave points_worst</th>\n <th>symmetry_worst</th>\n <th>fractal_dimension_worst</th>\n <th>diagnosis_B</th>\n <th>diagnosis_M</th>\n <th>Bucketed</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>842302</td>\n <td>17.99</td>\n <td>10.38</td>\n <td>122.80</td>\n <td>1001.0</td>\n <td>0.11840</td>\n <td>0.27760</td>\n <td>0.3001</td>\n <td>0.14710</td>\n <td>0.2419</td>\n <td>...</td>\n <td>2019.0</td>\n <td>0.1622</td>\n <td>0.6656</td>\n <td>0.7119</td>\n <td>0.2654</td>\n <td>0.4601</td>\n <td>0.11890</td>\n <td>0</td>\n <td>1</td>\n <td>Average_mean</td>\n </tr>\n <tr>\n <th>1</th>\n <td>842517</td>\n <td>20.57</td>\n <td>17.77</td>\n <td>132.90</td>\n <td>1326.0</td>\n <td>0.08474</td>\n <td>0.07864</td>\n <td>0.0869</td>\n <td>0.07017</td>\n <td>0.1812</td>\n <td>...</td>\n <td>1956.0</td>\n <td>0.1238</td>\n <td>0.1866</td>\n <td>0.2416</td>\n <td>0.1860</td>\n <td>0.2750</td>\n <td>0.08902</td>\n <td>0</td>\n <td>1</td>\n <td>Average_mean</td>\n </tr>\n <tr>\n <th>2</th>\n <td>84300903</td>\n <td>19.69</td>\n <td>21.25</td>\n <td>130.00</td>\n <td>1203.0</td>\n <td>0.10960</td>\n <td>0.15990</td>\n <td>0.1974</td>\n <td>0.12790</td>\n <td>0.2069</td>\n <td>...</td>\n <td>1709.0</td>\n <td>0.1444</td>\n <td>0.4245</td>\n <td>0.4504</td>\n <td>0.2430</td>\n <td>0.3613</td>\n <td>0.08758</td>\n <td>0</td>\n <td>1</td>\n <td>Average_mean</td>\n </tr>\n <tr>\n <th>3</th>\n <td>84348301</td>\n <td>11.42</td>\n <td>20.38</td>\n <td>77.58</td>\n <td>386.1</td>\n <td>0.14250</td>\n <td>0.28390</td>\n <td>0.2414</td>\n <td>0.10520</td>\n <td>0.2597</td>\n <td>...</td>\n <td>567.7</td>\n <td>0.2098</td>\n <td>0.8663</td>\n <td>0.6869</td>\n <td>0.2575</td>\n <td>0.6638</td>\n <td>0.17300</td>\n <td>0</td>\n <td>1</td>\n <td>Low_mean</td>\n </tr>\n <tr>\n <th>4</th>\n <td>84358402</td>\n <td>20.29</td>\n <td>14.34</td>\n <td>135.10</td>\n <td>1297.0</td>\n <td>0.10030</td>\n <td>0.13280</td>\n <td>0.1980</td>\n <td>0.10430</td>\n <td>0.1809</td>\n <td>...</td>\n <td>1575.0</td>\n <td>0.1374</td>\n <td>0.2050</td>\n <td>0.4000</td>\n <td>0.1625</td>\n <td>0.2364</td>\n <td>0.07678</td>\n <td>0</td>\n <td>1</td>\n <td>Average_mean</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 34 columns</p>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Train Test Split\n\nNow that our data is processed and everything is ready, we need to split it into training and testing sets. \n\nIn supervised learning we need to first train the model so that it will understand the underlying features and patterns for the data. We will do this by using the training set. Once the model has been trained, it will make predictions about the data using the test set based on the learning that it had.\n\nLater we can compare the results of the test set with the actual results and see the accuracy of our model.\n\nTo do this we will use the **Graduate Admissions** dataset:\n\nThe dataset contains several parameters which are considered important during the application for Masters Programs. The parameters included are :\n\n1. GRE Scores ( out of 340 )\n2. TOEFL Scores ( out of 120 )\n3. University Rating ( out of 5 )\n4. Statement of Purpose and Letter of Recommendation Strength ( out of 5 )\n5. Undergraduate GPA ( out of 10 )\n6. Research Experience ( either 0 or 1 )\n7. Chance of Admit ( ranging from 0 to 1 )"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import pandas as pd",
"execution_count": 15,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "dataset = '/graduate-admissions/Admission_Predict_Ver1.2.csv'",
"execution_count": 16,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df = pd.read_csv(dataset,header = 0)",
"execution_count": 17,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df.head()",
"execution_count": 18,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 18,
"data": {
"text/plain": " Serial No. GRE Score TOEFL Score University Rating SOP LOR CGPA \\\n0 1 337 118 4 4.5 4.5 9.65 \n1 2 324 107 4 4.0 4.5 8.87 \n2 3 316 104 3 3.0 3.5 8.00 \n3 4 322 110 3 3.5 2.5 8.67 \n4 5 314 103 2 2.0 3.0 8.21 \n\n Research Admit \n0 1 0.92 \n1 1 0.76 \n2 1 0.72 \n3 1 0.80 \n4 0 0.65 ",
"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>Serial No.</th>\n <th>GRE Score</th>\n <th>TOEFL Score</th>\n <th>University Rating</th>\n <th>SOP</th>\n <th>LOR</th>\n <th>CGPA</th>\n <th>Research</th>\n <th>Admit</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1</td>\n <td>337</td>\n <td>118</td>\n <td>4</td>\n <td>4.5</td>\n <td>4.5</td>\n <td>9.65</td>\n <td>1</td>\n <td>0.92</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2</td>\n <td>324</td>\n <td>107</td>\n <td>4</td>\n <td>4.0</td>\n <td>4.5</td>\n <td>8.87</td>\n <td>1</td>\n <td>0.76</td>\n </tr>\n <tr>\n <th>2</th>\n <td>3</td>\n <td>316</td>\n <td>104</td>\n <td>3</td>\n <td>3.0</td>\n <td>3.5</td>\n <td>8.00</td>\n <td>1</td>\n <td>0.72</td>\n </tr>\n <tr>\n <th>3</th>\n <td>4</td>\n <td>322</td>\n <td>110</td>\n <td>3</td>\n <td>3.5</td>\n <td>2.5</td>\n <td>8.67</td>\n <td>1</td>\n <td>0.80</td>\n </tr>\n <tr>\n <th>4</th>\n <td>5</td>\n <td>314</td>\n <td>103</td>\n <td>2</td>\n <td>2.0</td>\n <td>3.0</td>\n <td>8.21</td>\n <td>0</td>\n <td>0.65</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "#### 1. Let's create a variable X to store the independent features."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "X = df.drop('Admit ',axis = 1)",
"execution_count": 21,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "X.head()",
"execution_count": 22,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 22,
"data": {
"text/plain": " Serial No. GRE Score TOEFL Score University Rating SOP LOR CGPA \\\n0 1 337 118 4 4.5 4.5 9.65 \n1 2 324 107 4 4.0 4.5 8.87 \n2 3 316 104 3 3.0 3.5 8.00 \n3 4 322 110 3 3.5 2.5 8.67 \n4 5 314 103 2 2.0 3.0 8.21 \n\n Research \n0 1 \n1 1 \n2 1 \n3 1 \n4 0 ",
"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>Serial No.</th>\n <th>GRE Score</th>\n <th>TOEFL Score</th>\n <th>University Rating</th>\n <th>SOP</th>\n <th>LOR</th>\n <th>CGPA</th>\n <th>Research</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1</td>\n <td>337</td>\n <td>118</td>\n <td>4</td>\n <td>4.5</td>\n <td>4.5</td>\n <td>9.65</td>\n <td>1</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2</td>\n <td>324</td>\n <td>107</td>\n <td>4</td>\n <td>4.0</td>\n <td>4.5</td>\n <td>8.87</td>\n <td>1</td>\n </tr>\n <tr>\n <th>2</th>\n <td>3</td>\n <td>316</td>\n <td>104</td>\n <td>3</td>\n <td>3.0</td>\n <td>3.5</td>\n <td>8.00</td>\n <td>1</td>\n </tr>\n <tr>\n <th>3</th>\n <td>4</td>\n <td>322</td>\n <td>110</td>\n <td>3</td>\n <td>3.5</td>\n <td>2.5</td>\n <td>8.67</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>5</td>\n <td>314</td>\n <td>103</td>\n <td>2</td>\n <td>2.0</td>\n <td>3.0</td>\n <td>8.21</td>\n <td>0</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "#### 2. Printing the shape of the new feature"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "X.shape",
"execution_count": 23,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 23,
"data": {
"text/plain": "(500, 8)"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The first value above represents the number of observations(500), and the second value represents the number of features(8)"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "#### 3. We will use a variable **y** for the target value. "
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "y = df['Admit ']",
"execution_count": 24,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "y.head()",
"execution_count": 25,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 25,
"data": {
"text/plain": "0 0.92\n1 0.76\n2 0.72\n3 0.80\n4 0.65\nName: Admit , dtype: float64"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "#### 4. Now lets split the data set into test train sets. We will typically split the data here in 80:20 ratio where 80% is the training set and 20% is the testing set."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from sklearn.model_selection import train_test_split",
"execution_count": 26,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size =0.2, random_state = 0)",
"execution_count": 27,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "#### So, in the above code, the test size is 0.2 which means that it is a 80:20 split. **train_test_split** splits the arrays or matrices into train and test subsets in a random way. If we run the code everytime without the random_state, we will get a different result."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "#### 5. Printing the shape of the train and test sets"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "print(\"X-Train Shape: \",X_train.shape)\nprint(\"X-Test Shape: \",X_test.shape)\nprint(\"y-Train Shape: \",y_train.shape)\nprint(\"y-Test Shape: \",y_test.shape)",
"execution_count": 28,
"outputs": [
{
"output_type": "stream",
"text": "X-Train Shape: (400, 8)\nX-Test Shape: (100, 8)\ny-Train Shape: (400,)\ny-Test Shape: (100,)\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.7.0",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"gist": {
"id": "683943c3329aa1566a9306b16d8cdb49",
"data": {
"description": "Data Cleaning -Part 2.ipynb",
"public": true
}
},
"_draft": {
"nbviewer_url": "https://gist.github.com/683943c3329aa1566a9306b16d8cdb49"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment