948 lines
92 KiB
Plaintext
948 lines
92 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Predicting Student Admissions with Neural Networks\n",
|
|
"In this notebook, we predict student admissions to graduate school at UCLA based on three pieces of data:\n",
|
|
"- GRE Scores (Test)\n",
|
|
"- GPA Scores (Grades)\n",
|
|
"- Class rank (1-4)\n",
|
|
"\n",
|
|
"The dataset originally came from here: http://www.ats.ucla.edu/\n",
|
|
"\n",
|
|
"## Loading the data\n",
|
|
"To load the data and format it nicely, we will use two very useful packages called Pandas and Numpy. You can read on the documentation here:\n",
|
|
"- https://pandas.pydata.org/pandas-docs/stable/\n",
|
|
"- https://docs.scipy.org/"
|
|
]
|
|
},
|
|
{
|
|
"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>admit</th>\n",
|
|
" <th>gre</th>\n",
|
|
" <th>gpa</th>\n",
|
|
" <th>rank</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>380</td>\n",
|
|
" <td>3.61</td>\n",
|
|
" <td>3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>660</td>\n",
|
|
" <td>3.67</td>\n",
|
|
" <td>3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>800</td>\n",
|
|
" <td>4.00</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>640</td>\n",
|
|
" <td>3.19</td>\n",
|
|
" <td>4</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>520</td>\n",
|
|
" <td>2.93</td>\n",
|
|
" <td>4</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>760</td>\n",
|
|
" <td>3.00</td>\n",
|
|
" <td>2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>560</td>\n",
|
|
" <td>2.98</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>400</td>\n",
|
|
" <td>3.08</td>\n",
|
|
" <td>2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>540</td>\n",
|
|
" <td>3.39</td>\n",
|
|
" <td>3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>700</td>\n",
|
|
" <td>3.92</td>\n",
|
|
" <td>2</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" admit gre gpa rank\n",
|
|
"0 0 380 3.61 3\n",
|
|
"1 1 660 3.67 3\n",
|
|
"2 1 800 4.00 1\n",
|
|
"3 1 640 3.19 4\n",
|
|
"4 0 520 2.93 4\n",
|
|
"5 1 760 3.00 2\n",
|
|
"6 1 560 2.98 1\n",
|
|
"7 0 400 3.08 2\n",
|
|
"8 1 540 3.39 3\n",
|
|
"9 0 700 3.92 2"
|
|
]
|
|
},
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Importing pandas and numpy\n",
|
|
"import pandas as pd\n",
|
|
"import numpy as np\n",
|
|
"\n",
|
|
"# Reading the csv file into a pandas DataFrame\n",
|
|
"data = pd.read_csv('student_data.csv')\n",
|
|
"\n",
|
|
"# Printing out the first 10 rows of our data\n",
|
|
"data[:10]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Plotting the data\n",
|
|
"\n",
|
|
"First let's make a plot of our data to see how it looks. In order to have a 2D plot, let's ingore the rank."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f20c44f7d30>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Importing matplotlib\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"# Function to help us plot\n",
|
|
"def plot_points(data):\n",
|
|
" X = np.array(data[[\"gre\",\"gpa\"]])\n",
|
|
" y = np.array(data[\"admit\"])\n",
|
|
" admitted = X[np.argwhere(y==1)]\n",
|
|
" rejected = X[np.argwhere(y==0)]\n",
|
|
" plt.scatter([s[0][0] for s in rejected], [s[0][1] for s in rejected], s = 25, color = 'red', edgecolor = 'k')\n",
|
|
" plt.scatter([s[0][0] for s in admitted], [s[0][1] for s in admitted], s = 25, color = 'cyan', edgecolor = 'k')\n",
|
|
" plt.xlabel('Test (GRE)')\n",
|
|
" plt.ylabel('Grades (GPA)')\n",
|
|
" \n",
|
|
"# Plotting the points\n",
|
|
"plot_points(data)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Roughly, it looks like the students with high scores in the grades and test passed, while the ones with low scores didn't, but the data is not as nicely separable as we hoped it would. Maybe it would help to take the rank into account? Let's make 4 plots, each one for each rank."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f20bfef52e8>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f20bfed25c0>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f20bfdd5630>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f20bfdcf358>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Separating the ranks\n",
|
|
"data_rank1 = data[data[\"rank\"]==1]\n",
|
|
"data_rank2 = data[data[\"rank\"]==2]\n",
|
|
"data_rank3 = data[data[\"rank\"]==3]\n",
|
|
"data_rank4 = data[data[\"rank\"]==4]\n",
|
|
"\n",
|
|
"# Plotting the graphs\n",
|
|
"plot_points(data_rank1)\n",
|
|
"plt.title(\"Rank 1\")\n",
|
|
"plt.show()\n",
|
|
"plot_points(data_rank2)\n",
|
|
"plt.title(\"Rank 2\")\n",
|
|
"plt.show()\n",
|
|
"plot_points(data_rank3)\n",
|
|
"plt.title(\"Rank 3\")\n",
|
|
"plt.show()\n",
|
|
"plot_points(data_rank4)\n",
|
|
"plt.title(\"Rank 4\")\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"This looks more promising, as it seems that the lower the rank, the higher the acceptance rate. Let's use the rank as one of our inputs. In order to do this, we should one-hot encode it.\n",
|
|
"\n",
|
|
"## TODO: One-hot encoding the rank\n",
|
|
"Use the `get_dummies` function in Pandas in order to one-hot encode the data."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"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>admit</th>\n",
|
|
" <th>gre</th>\n",
|
|
" <th>gpa</th>\n",
|
|
" <th>rank_1</th>\n",
|
|
" <th>rank_2</th>\n",
|
|
" <th>rank_3</th>\n",
|
|
" <th>rank_4</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>380</td>\n",
|
|
" <td>3.61</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>660</td>\n",
|
|
" <td>3.67</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>800</td>\n",
|
|
" <td>4.00</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>640</td>\n",
|
|
" <td>3.19</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>520</td>\n",
|
|
" <td>2.93</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>760</td>\n",
|
|
" <td>3.00</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>560</td>\n",
|
|
" <td>2.98</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>400</td>\n",
|
|
" <td>3.08</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>540</td>\n",
|
|
" <td>3.39</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>700</td>\n",
|
|
" <td>3.92</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" admit gre gpa rank_1 rank_2 rank_3 rank_4\n",
|
|
"0 0 380 3.61 0 0 1 0\n",
|
|
"1 1 660 3.67 0 0 1 0\n",
|
|
"2 1 800 4.00 1 0 0 0\n",
|
|
"3 1 640 3.19 0 0 0 1\n",
|
|
"4 0 520 2.93 0 0 0 1\n",
|
|
"5 1 760 3.00 0 1 0 0\n",
|
|
"6 1 560 2.98 1 0 0 0\n",
|
|
"7 0 400 3.08 0 1 0 0\n",
|
|
"8 1 540 3.39 0 0 1 0\n",
|
|
"9 0 700 3.92 0 1 0 0"
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# TODO: Make dummy variables for rank\n",
|
|
"one_hot_data = pd.concat([data, pd.get_dummies(data['rank'], prefix='rank')], axis=1)\n",
|
|
"\n",
|
|
"# TODO: Drop the previous rank column\n",
|
|
"one_hot_data = one_hot_data.drop('rank', axis=1)\n",
|
|
"\n",
|
|
"# Print the first 10 rows of our data\n",
|
|
"one_hot_data[:10]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## TODO: Scaling the data\n",
|
|
"The next step is to scale the data. We notice that the range for grades is 1.0-4.0, whereas the range for test scores is roughly 200-800, which is much larger. This means our data is skewed, and that makes it hard for a neural network to handle. Let's fit our two features into a range of 0-1, by dividing the grades by 4.0, and the test score by 800."
|
|
]
|
|
},
|
|
{
|
|
"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>admit</th>\n",
|
|
" <th>gre</th>\n",
|
|
" <th>gpa</th>\n",
|
|
" <th>rank_1</th>\n",
|
|
" <th>rank_2</th>\n",
|
|
" <th>rank_3</th>\n",
|
|
" <th>rank_4</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0.475</td>\n",
|
|
" <td>0.9025</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0.825</td>\n",
|
|
" <td>0.9175</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1.000</td>\n",
|
|
" <td>1.0000</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0.800</td>\n",
|
|
" <td>0.7975</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0.650</td>\n",
|
|
" <td>0.7325</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0.950</td>\n",
|
|
" <td>0.7500</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0.700</td>\n",
|
|
" <td>0.7450</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0.500</td>\n",
|
|
" <td>0.7700</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0.675</td>\n",
|
|
" <td>0.8475</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0.875</td>\n",
|
|
" <td>0.9800</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" admit gre gpa rank_1 rank_2 rank_3 rank_4\n",
|
|
"0 0 0.475 0.9025 0 0 1 0\n",
|
|
"1 1 0.825 0.9175 0 0 1 0\n",
|
|
"2 1 1.000 1.0000 1 0 0 0\n",
|
|
"3 1 0.800 0.7975 0 0 0 1\n",
|
|
"4 0 0.650 0.7325 0 0 0 1\n",
|
|
"5 1 0.950 0.7500 0 1 0 0\n",
|
|
"6 1 0.700 0.7450 1 0 0 0\n",
|
|
"7 0 0.500 0.7700 0 1 0 0\n",
|
|
"8 1 0.675 0.8475 0 0 1 0\n",
|
|
"9 0 0.875 0.9800 0 1 0 0"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Making a copy of our data\n",
|
|
"processed_data = one_hot_data[:]\n",
|
|
"\n",
|
|
"# TODO: Scale the columns\n",
|
|
"processed_data['gre'] = processed_data['gre']/800\n",
|
|
"processed_data['gpa'] = processed_data['gpa']/4.0\n",
|
|
"processed_data[:10]\n",
|
|
"\n",
|
|
"# Printing the first 10 rows of our procesed data\n",
|
|
"processed_data[:10]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Splitting the data into Training and Testing"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In order to test our algorithm, we'll split the data into a Training and a Testing set. The size of the testing set will be 10% of the total data."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Number of training samples is 360\n",
|
|
"Number of testing samples is 40\n",
|
|
" admit gre gpa rank_1 rank_2 rank_3 rank_4\n",
|
|
"16 0 0.975 0.9675 0 0 0 1\n",
|
|
"97 0 0.600 0.8925 0 1 0 0\n",
|
|
"361 1 0.675 0.8725 1 0 0 0\n",
|
|
"315 1 0.375 0.7100 0 1 0 0\n",
|
|
"215 1 0.825 0.7275 0 0 1 0\n",
|
|
"109 0 0.600 0.8625 0 1 0 0\n",
|
|
"199 0 0.725 0.9425 0 0 0 1\n",
|
|
"197 1 0.500 0.8075 0 0 0 1\n",
|
|
"354 1 0.675 0.9450 0 1 0 0\n",
|
|
"84 1 0.625 0.9000 0 0 1 0\n",
|
|
" admit gre gpa rank_1 rank_2 rank_3 rank_4\n",
|
|
"10 0 1.000 1.0000 0 0 0 1\n",
|
|
"11 0 0.550 0.8050 1 0 0 0\n",
|
|
"13 0 0.875 0.7700 0 1 0 0\n",
|
|
"28 1 0.975 0.8050 0 1 0 0\n",
|
|
"34 0 0.450 0.7850 1 0 0 0\n",
|
|
"50 0 0.800 0.9650 0 0 1 0\n",
|
|
"54 0 0.825 0.8350 0 0 1 0\n",
|
|
"63 1 0.850 0.9625 0 0 1 0\n",
|
|
"65 0 0.750 0.8975 0 1 0 0\n",
|
|
"66 0 0.925 0.9050 0 0 0 1\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"sample = np.random.choice(processed_data.index, size=int(len(processed_data)*0.9), replace=False)\n",
|
|
"train_data, test_data = processed_data.iloc[sample], processed_data.drop(sample)\n",
|
|
"\n",
|
|
"print(\"Number of training samples is\", len(train_data))\n",
|
|
"print(\"Number of testing samples is\", len(test_data))\n",
|
|
"print(train_data[:10])\n",
|
|
"print(test_data[:10])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Splitting the data into features and targets (labels)\n",
|
|
"Now, as a final step before the training, we'll split the data into features (X) and targets (y)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" gre gpa rank_1 rank_2 rank_3 rank_4\n",
|
|
"16 0.975 0.9675 0 0 0 1\n",
|
|
"97 0.600 0.8925 0 1 0 0\n",
|
|
"361 0.675 0.8725 1 0 0 0\n",
|
|
"315 0.375 0.7100 0 1 0 0\n",
|
|
"215 0.825 0.7275 0 0 1 0\n",
|
|
"109 0.600 0.8625 0 1 0 0\n",
|
|
"199 0.725 0.9425 0 0 0 1\n",
|
|
"197 0.500 0.8075 0 0 0 1\n",
|
|
"354 0.675 0.9450 0 1 0 0\n",
|
|
"84 0.625 0.9000 0 0 1 0\n",
|
|
"16 0\n",
|
|
"97 0\n",
|
|
"361 1\n",
|
|
"315 1\n",
|
|
"215 1\n",
|
|
"109 0\n",
|
|
"199 0\n",
|
|
"197 1\n",
|
|
"354 1\n",
|
|
"84 1\n",
|
|
"Name: admit, dtype: int64\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"features = train_data.drop('admit', axis=1)\n",
|
|
"targets = train_data['admit']\n",
|
|
"features_test = test_data.drop('admit', axis=1)\n",
|
|
"targets_test = test_data['admit']\n",
|
|
"\n",
|
|
"print(features[:10])\n",
|
|
"print(targets[:10])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Training the 2-layer Neural Network\n",
|
|
"The following function trains the 2-layer neural network. First, we'll write some helper functions."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Activation (sigmoid) function\n",
|
|
"def sigmoid(x):\n",
|
|
" return 1 / (1 + np.exp(-x))\n",
|
|
"def sigmoid_prime(x):\n",
|
|
" return sigmoid(x) * (1-sigmoid(x))\n",
|
|
"def error_formula(y, output):\n",
|
|
" return - y*np.log(output) - (1 - y) * np.log(1-output)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# TODO: Backpropagate the error\n",
|
|
"Now it's your turn to shine. Write the error term. Remember that this is given by the equation $$ (y-\\hat{y}) \\sigma'(x) $$"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# TODO: Write the error term formula\n",
|
|
"def error_term_formula(x, y, output):\n",
|
|
" return (y - output) * sigmoid_prime(x)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch: 0\n",
|
|
"Train loss: 0.274675763534\n",
|
|
"=========\n",
|
|
"Epoch: 100\n",
|
|
"Train loss: 0.211541227151\n",
|
|
"=========\n",
|
|
"Epoch: 200\n",
|
|
"Train loss: 0.209108941338\n",
|
|
"=========\n",
|
|
"Epoch: 300\n",
|
|
"Train loss: 0.207892062032\n",
|
|
"=========\n",
|
|
"Epoch: 400\n",
|
|
"Train loss: 0.207253836282\n",
|
|
"=========\n",
|
|
"Epoch: 500\n",
|
|
"Train loss: 0.206889105737\n",
|
|
"=========\n",
|
|
"Epoch: 600\n",
|
|
"Train loss: 0.206656034976\n",
|
|
"=========\n",
|
|
"Epoch: 700\n",
|
|
"Train loss: 0.206488123278\n",
|
|
"=========\n",
|
|
"Epoch: 800\n",
|
|
"Train loss: 0.206353568323\n",
|
|
"=========\n",
|
|
"Epoch: 900\n",
|
|
"Train loss: 0.206236831468\n",
|
|
"=========\n",
|
|
"Finished training!\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Neural Network hyperparameters\n",
|
|
"epochs = 1000\n",
|
|
"learnrate = 0.5\n",
|
|
"\n",
|
|
"# Training function\n",
|
|
"def train_nn(features, targets, epochs, learnrate):\n",
|
|
" \n",
|
|
" # Use to same seed to make debugging easier\n",
|
|
" np.random.seed(42)\n",
|
|
"\n",
|
|
" n_records, n_features = features.shape\n",
|
|
" last_loss = None\n",
|
|
"\n",
|
|
" # Initialize weights\n",
|
|
" weights = np.random.normal(scale=1 / n_features**.5, size=n_features)\n",
|
|
"\n",
|
|
" for e in range(epochs):\n",
|
|
" del_w = np.zeros(weights.shape)\n",
|
|
" for x, y in zip(features.values, targets):\n",
|
|
" # Loop through all records, x is the input, y is the target\n",
|
|
"\n",
|
|
" # Activation of the output unit\n",
|
|
" # Notice we multiply the inputs and the weights here \n",
|
|
" # rather than storing h as a separate variable \n",
|
|
" output = sigmoid(np.dot(x, weights))\n",
|
|
"\n",
|
|
" # The error, the target minus the network output\n",
|
|
" error = error_formula(y, output)\n",
|
|
"\n",
|
|
" # The error term\n",
|
|
" error_term = error_term_formula(x, y, output)\n",
|
|
"\n",
|
|
" # The gradient descent step, the error times the gradient times the inputs\n",
|
|
" del_w += error_term * x\n",
|
|
"\n",
|
|
" # Update the weights here. The learning rate times the \n",
|
|
" # change in weights, divided by the number of records to average\n",
|
|
" weights += learnrate * del_w / n_records\n",
|
|
"\n",
|
|
" # Printing out the mean square error on the training set\n",
|
|
" if e % (epochs / 10) == 0:\n",
|
|
" out = sigmoid(np.dot(features, weights))\n",
|
|
" loss = np.mean((out - targets) ** 2)\n",
|
|
" print(\"Epoch:\", e)\n",
|
|
" if last_loss and last_loss < loss:\n",
|
|
" print(\"Train loss: \", loss, \" WARNING - Loss Increasing\")\n",
|
|
" else:\n",
|
|
" print(\"Train loss: \", loss)\n",
|
|
" last_loss = loss\n",
|
|
" print(\"=========\")\n",
|
|
" print(\"Finished training!\")\n",
|
|
" return weights\n",
|
|
" \n",
|
|
"weights = train_nn(features, targets, epochs, learnrate)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Calculating the Accuracy on the Test Data"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Prediction accuracy: 0.700\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Calculate accuracy on test data\n",
|
|
"test_out = sigmoid(np.dot(features_test, weights))\n",
|
|
"predictions = test_out > 0.5\n",
|
|
"accuracy = np.mean(predictions == targets_test)\n",
|
|
"print(\"Prediction accuracy: {:.3f}\".format(accuracy))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|