"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Perceptron learning rule"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This week, we will start working with neural networks. For each of the exercises below you can use the method of your choice but you should display the final boundary of your classifier."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise 1. \n",
"As a first exercise, load the binary dataset below and code a few steps of the perceptron learning rule. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"import scipy.io as sio\n",
"data1 = sio.loadmat('perceptron_data_class1.mat')\n",
"data2 = sio.loadmat('perceptron_data_class2.mat')\n",
"\n",
"data1 = data1['perceptron_data_class1']\n",
"data2 = data2['perceptron_data_class2']\n",
"\n",
"# put your code here"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise 2.\n",
"\n",
"__2a.__ Load the data below. Using the neural_network module from scikit-learn and its MLPClassifier model, learn a classifier, for the dataset below using \n",
"\n",
"- One hidden layer with a linear activation function and \n",
" - One neuron\n",
" - Two neurons\n",
" \n",
" \n",
" \n",
"- One hidden layer with a non linear activation function (take Relu for example or a binary step)\n",
" - One neuron\n",
" - Two neurons\n",
"\n",
"How many neurons, hidden layers do you need to learn the distribution of the data? Do you have an idea why?\n",
"\n",
"Try increasing the number of neurons and hidden layers. Then try different values of the learning rate. \n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"