{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tools & Techniques: Neural Networks Using Keras" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Read in Housing Data\n", "* Data collected from Realtor.com.\n", "* Houses sold during June 2020 in eastern Loudoun County, VA.\n", "* For our demonstration, the data has already been cleaned.\n", "* Mean Price: ~ $520,000" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv(\"tools_techniques.csv\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BedsSqFtBuiltGarageFullBathsHalfBathsLotSqFtAboveMeanPrice
032336200422121780
142106200522121780
231410199912030490
331769199412117420
442283199923126140
...........................
542427801967231474801
543434302013041435601
544313461977020156820
545536962002231113261
546424911974030100191
\n", "

547 rows × 8 columns

\n", "
" ], "text/plain": [ " Beds SqFt Built Garage FullBaths HalfBaths LotSqFt AboveMeanPrice\n", "0 3 2336 2004 2 2 1 2178 0\n", "1 4 2106 2005 2 2 1 2178 0\n", "2 3 1410 1999 1 2 0 3049 0\n", "3 3 1769 1994 1 2 1 1742 0\n", "4 4 2283 1999 2 3 1 2614 0\n", ".. ... ... ... ... ... ... ... ...\n", "542 4 2780 1967 2 3 1 47480 1\n", "543 4 3430 2013 0 4 1 43560 1\n", "544 3 1346 1977 0 2 0 15682 0\n", "545 5 3696 2002 2 3 1 11326 1\n", "546 4 2491 1974 0 3 0 10019 1\n", "\n", "[547 rows x 8 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "dataset = df.values" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 3, 2336, 2004, ..., 1, 2178, 0],\n", " [ 4, 2106, 2005, ..., 1, 2178, 0],\n", " [ 3, 1410, 1999, ..., 0, 3049, 0],\n", " ...,\n", " [ 3, 1346, 1977, ..., 0, 15682, 0],\n", " [ 5, 3696, 2002, ..., 1, 11326, 1],\n", " [ 4, 2491, 1974, ..., 0, 10019, 1]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "X = dataset[:, 0:7]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "Y = dataset[:,7]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Normalize Data" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from sklearn import preprocessing" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.4 , 0.16361181, 0.86885246, ..., 0.2 , 1. ,\n", " 0.00172891],\n", " [0.6 , 0.14142389, 0.87704918, ..., 0.2 , 1. ,\n", " 0.00172891],\n", " [0.4 , 0.0742813 , 0.82786885, ..., 0.2 , 0. ,\n", " 0.00242031],\n", " ...,\n", " [0.4 , 0.06810727, 0.64754098, ..., 0.2 , 0. ,\n", " 0.01244845],\n", " [0.8 , 0.29480996, 0.85245902, ..., 0.4 , 1. ,\n", " 0.00899064],\n", " [0.6 , 0.17856454, 0.62295082, ..., 0.4 , 0. ,\n", " 0.00795313]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "min_max_scaler = preprocessing.MinMaxScaler()\n", "X_scale = min_max_scaler.fit_transform(X)\n", "X_scale" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Partition Data" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(382, 7) (82, 7) (83, 7) (382,) (82,) (83,)\n" ] } ], "source": [ "X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(X_scale, Y, test_size=0.3)\n", "X_val, X_test, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size=0.5)\n", "print(X_train.shape, X_val.shape, X_test.shape, Y_train.shape, Y_val.shape, Y_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model Building" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "model = Sequential([\n", " Dense(16, activation='relu', input_shape=(7,)), #hidden layer ***\n", " Dense(1, activation='sigmoid')]) #output layer (1 neuron)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "model.compile(optimizer='sgd',\n", " loss='binary_crossentropy',\n", " metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "24/24 [==============================] - 0s 13ms/step - loss: 0.7133 - accuracy: 0.3691 - val_loss: 0.6971 - val_accuracy: 0.5244\n", "Epoch 2/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.7079 - accuracy: 0.4005 - val_loss: 0.6923 - val_accuracy: 0.5366\n", "Epoch 3/100\n", "24/24 [==============================] - ETA: 0s - loss: 0.7044 - accuracy: 0.43 - 0s 19ms/step - loss: 0.7030 - accuracy: 0.4188 - val_loss: 0.6880 - val_accuracy: 0.5488\n", "Epoch 4/100\n", "24/24 [==============================] - 0s 7ms/step - loss: 0.6982 - accuracy: 0.4634 - val_loss: 0.6840 - val_accuracy: 0.5976\n", "Epoch 5/100\n", "24/24 [==============================] - 0s 9ms/step - loss: 0.6939 - accuracy: 0.4869 - val_loss: 0.6802 - val_accuracy: 0.5976\n", "Epoch 6/100\n", "24/24 [==============================] - 0s 16ms/step - loss: 0.6898 - accuracy: 0.5026 - val_loss: 0.6765 - val_accuracy: 0.5854\n", "Epoch 7/100\n", "24/24 [==============================] - 0s 12ms/step - loss: 0.6860 - accuracy: 0.5340 - val_loss: 0.6728 - val_accuracy: 0.6341\n", "Epoch 8/100\n", "24/24 [==============================] - 0s 15ms/step - loss: 0.6820 - accuracy: 0.5785 - val_loss: 0.6691 - val_accuracy: 0.6585\n", "Epoch 9/100\n", "24/24 [==============================] - 0s 11ms/step - loss: 0.6783 - accuracy: 0.6047 - val_loss: 0.6655 - val_accuracy: 0.6707\n", "Epoch 10/100\n", "24/24 [==============================] - 0s 20ms/step - loss: 0.6744 - accuracy: 0.6230 - val_loss: 0.6617 - val_accuracy: 0.6707\n", "Epoch 11/100\n", "24/24 [==============================] - 0s 14ms/step - loss: 0.6705 - accuracy: 0.6309 - val_loss: 0.6577 - val_accuracy: 0.6707\n", "Epoch 12/100\n", "24/24 [==============================] - 0s 15ms/step - loss: 0.6661 - accuracy: 0.6466 - val_loss: 0.6532 - val_accuracy: 0.6951\n", "Epoch 13/100\n", "24/24 [==============================] - 0s 17ms/step - loss: 0.6612 - accuracy: 0.6649 - val_loss: 0.6479 - val_accuracy: 0.6951\n", "Epoch 14/100\n", "24/24 [==============================] - 0s 18ms/step - loss: 0.6550 - accuracy: 0.7094 - val_loss: 0.6416 - val_accuracy: 0.7561\n", "Epoch 15/100\n", "24/24 [==============================] - 0s 11ms/step - loss: 0.6479 - accuracy: 0.7408 - val_loss: 0.6342 - val_accuracy: 0.8415\n", "Epoch 16/100\n", "24/24 [==============================] - 0s 9ms/step - loss: 0.6407 - accuracy: 0.7827 - val_loss: 0.6269 - val_accuracy: 0.8659\n", "Epoch 17/100\n", "24/24 [==============================] - 0s 11ms/step - loss: 0.6341 - accuracy: 0.8115 - val_loss: 0.6204 - val_accuracy: 0.8902\n", "Epoch 18/100\n", "24/24 [==============================] - 1s 24ms/step - loss: 0.6281 - accuracy: 0.8272 - val_loss: 0.6128 - val_accuracy: 0.8902\n", "Epoch 19/100\n", "24/24 [==============================] - 0s 18ms/step - loss: 0.6211 - accuracy: 0.8194 - val_loss: 0.6046 - val_accuracy: 0.8780\n", "Epoch 20/100\n", "24/24 [==============================] - 0s 11ms/step - loss: 0.6149 - accuracy: 0.8168 - val_loss: 0.5982 - val_accuracy: 0.8780\n", "Epoch 21/100\n", "24/24 [==============================] - 0s 12ms/step - loss: 0.6096 - accuracy: 0.8220 - val_loss: 0.5930 - val_accuracy: 0.8780\n", "Epoch 22/100\n", "24/24 [==============================] - 0s 10ms/step - loss: 0.6047 - accuracy: 0.8220 - val_loss: 0.5883 - val_accuracy: 0.8780\n", "Epoch 23/100\n", "24/24 [==============================] - 0s 12ms/step - loss: 0.6002 - accuracy: 0.8168 - val_loss: 0.5835 - val_accuracy: 0.8902\n", "Epoch 24/100\n", "24/24 [==============================] - 0s 9ms/step - loss: 0.5958 - accuracy: 0.8194 - val_loss: 0.5786 - val_accuracy: 0.8902\n", "Epoch 25/100\n", "24/24 [==============================] - 0s 12ms/step - loss: 0.5914 - accuracy: 0.8272 - val_loss: 0.5740 - val_accuracy: 0.8902\n", "Epoch 26/100\n", "24/24 [==============================] - 0s 9ms/step - loss: 0.5871 - accuracy: 0.8325 - val_loss: 0.5694 - val_accuracy: 0.8902\n", "Epoch 27/100\n", "24/24 [==============================] - 0s 13ms/step - loss: 0.5827 - accuracy: 0.8298 - val_loss: 0.5646 - val_accuracy: 0.8902\n", "Epoch 28/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.5784 - accuracy: 0.8351 - val_loss: 0.5601 - val_accuracy: 0.8902\n", "Epoch 29/100\n", "24/24 [==============================] - 0s 7ms/step - loss: 0.5741 - accuracy: 0.8272 - val_loss: 0.5551 - val_accuracy: 0.8902\n", "Epoch 30/100\n", "24/24 [==============================] - 0s 11ms/step - loss: 0.5697 - accuracy: 0.8351 - val_loss: 0.5503 - val_accuracy: 0.9024\n", "Epoch 31/100\n", "24/24 [==============================] - 0s 12ms/step - loss: 0.5653 - accuracy: 0.8325 - val_loss: 0.5456 - val_accuracy: 0.9024\n", "Epoch 32/100\n", "24/24 [==============================] - 0s 20ms/step - loss: 0.5609 - accuracy: 0.8403 - val_loss: 0.5408 - val_accuracy: 0.9024\n", "Epoch 33/100\n", "24/24 [==============================] - 0s 14ms/step - loss: 0.5566 - accuracy: 0.8377 - val_loss: 0.5362 - val_accuracy: 0.9024\n", "Epoch 34/100\n", "24/24 [==============================] - 0s 18ms/step - loss: 0.5523 - accuracy: 0.8429 - val_loss: 0.5314 - val_accuracy: 0.9024\n", "Epoch 35/100\n", "24/24 [==============================] - 0s 18ms/step - loss: 0.5480 - accuracy: 0.8482 - val_loss: 0.5268 - val_accuracy: 0.9024\n", "Epoch 36/100\n", "24/24 [==============================] - 0s 19ms/step - loss: 0.5435 - accuracy: 0.8429 - val_loss: 0.5224 - val_accuracy: 0.9024\n", "Epoch 37/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.5393 - accuracy: 0.8455 - val_loss: 0.5176 - val_accuracy: 0.9024\n", "Epoch 38/100\n", "24/24 [==============================] - 0s 5ms/step - loss: 0.5348 - accuracy: 0.8482 - val_loss: 0.5129 - val_accuracy: 0.9024\n", "Epoch 39/100\n", "24/24 [==============================] - 0s 12ms/step - loss: 0.5302 - accuracy: 0.8482 - val_loss: 0.5085 - val_accuracy: 0.9146\n", "Epoch 40/100\n", "24/24 [==============================] - 0s 9ms/step - loss: 0.5260 - accuracy: 0.8534 - val_loss: 0.5036 - val_accuracy: 0.9146\n", "Epoch 41/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.5217 - accuracy: 0.8560 - val_loss: 0.4987 - val_accuracy: 0.9146\n", "Epoch 42/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.5173 - accuracy: 0.8534 - val_loss: 0.4943 - val_accuracy: 0.9146\n", "Epoch 43/100\n", "24/24 [==============================] - 0s 13ms/step - loss: 0.5130 - accuracy: 0.8586 - val_loss: 0.4895 - val_accuracy: 0.9146\n", "Epoch 44/100\n", "24/24 [==============================] - 0s 10ms/step - loss: 0.5086 - accuracy: 0.8534 - val_loss: 0.4848 - val_accuracy: 0.9146\n", "Epoch 45/100\n", "24/24 [==============================] - 1s 22ms/step - loss: 0.5043 - accuracy: 0.8665 - val_loss: 0.4810 - val_accuracy: 0.9268\n", "Epoch 46/100\n", "24/24 [==============================] - 0s 16ms/step - loss: 0.4998 - accuracy: 0.8639 - val_loss: 0.4761 - val_accuracy: 0.9268\n", "Epoch 47/100\n", "24/24 [==============================] - 0s 15ms/step - loss: 0.4957 - accuracy: 0.8665 - val_loss: 0.4711 - val_accuracy: 0.9268\n", "Epoch 48/100\n", "24/24 [==============================] - 0s 10ms/step - loss: 0.4914 - accuracy: 0.8665 - val_loss: 0.4655 - val_accuracy: 0.9268\n", "Epoch 49/100\n", "24/24 [==============================] - 0s 16ms/step - loss: 0.4874 - accuracy: 0.8639 - val_loss: 0.4615 - val_accuracy: 0.9268\n", "Epoch 50/100\n", "24/24 [==============================] - 0s 16ms/step - loss: 0.4831 - accuracy: 0.8691 - val_loss: 0.4571 - val_accuracy: 0.9390\n", "Epoch 51/100\n", "24/24 [==============================] - 0s 7ms/step - loss: 0.4791 - accuracy: 0.8691 - val_loss: 0.4523 - val_accuracy: 0.9390\n", "Epoch 52/100\n", "24/24 [==============================] - 0s 17ms/step - loss: 0.4749 - accuracy: 0.8743 - val_loss: 0.4477 - val_accuracy: 0.9390\n", "Epoch 53/100\n", "24/24 [==============================] - 0s 11ms/step - loss: 0.4706 - accuracy: 0.8717 - val_loss: 0.4440 - val_accuracy: 0.9390\n", "Epoch 54/100\n", "24/24 [==============================] - 0s 14ms/step - loss: 0.4670 - accuracy: 0.8717 - val_loss: 0.4394 - val_accuracy: 0.9390\n", "Epoch 55/100\n", "24/24 [==============================] - 0s 15ms/step - loss: 0.4628 - accuracy: 0.8770 - val_loss: 0.4355 - val_accuracy: 0.9390\n", "Epoch 56/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.4590 - accuracy: 0.8717 - val_loss: 0.4307 - val_accuracy: 0.9390\n", "Epoch 57/100\n", "24/24 [==============================] - 0s 14ms/step - loss: 0.4548 - accuracy: 0.8848 - val_loss: 0.4273 - val_accuracy: 0.9268\n", "Epoch 58/100\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "24/24 [==============================] - 0s 8ms/step - loss: 0.4513 - accuracy: 0.8770 - val_loss: 0.4234 - val_accuracy: 0.9268\n", "Epoch 59/100\n", "24/24 [==============================] - 0s 9ms/step - loss: 0.4475 - accuracy: 0.8743 - val_loss: 0.4190 - val_accuracy: 0.9268\n", "Epoch 60/100\n", "24/24 [==============================] - 0s 5ms/step - loss: 0.4436 - accuracy: 0.8743 - val_loss: 0.4140 - val_accuracy: 0.9268\n", "Epoch 61/100\n", "24/24 [==============================] - 0s 10ms/step - loss: 0.4402 - accuracy: 0.8770 - val_loss: 0.4095 - val_accuracy: 0.9268\n", "Epoch 62/100\n", "24/24 [==============================] - 0s 5ms/step - loss: 0.4365 - accuracy: 0.8796 - val_loss: 0.4059 - val_accuracy: 0.9268\n", "Epoch 63/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.4327 - accuracy: 0.8796 - val_loss: 0.4029 - val_accuracy: 0.9268\n", "Epoch 64/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.4294 - accuracy: 0.8796 - val_loss: 0.3992 - val_accuracy: 0.9268\n", "Epoch 65/100\n", "24/24 [==============================] - 0s 5ms/step - loss: 0.4260 - accuracy: 0.8796 - val_loss: 0.3951 - val_accuracy: 0.9268\n", "Epoch 66/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.4226 - accuracy: 0.8796 - val_loss: 0.3900 - val_accuracy: 0.9268\n", "Epoch 67/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.4192 - accuracy: 0.8822 - val_loss: 0.3867 - val_accuracy: 0.9268\n", "Epoch 68/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.4161 - accuracy: 0.8770 - val_loss: 0.3829 - val_accuracy: 0.9268\n", "Epoch 69/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.4128 - accuracy: 0.8796 - val_loss: 0.3796 - val_accuracy: 0.9268\n", "Epoch 70/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.4097 - accuracy: 0.8743 - val_loss: 0.3761 - val_accuracy: 0.9268\n", "Epoch 71/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.4065 - accuracy: 0.8770 - val_loss: 0.3730 - val_accuracy: 0.9268\n", "Epoch 72/100\n", "24/24 [==============================] - 0s 5ms/step - loss: 0.4033 - accuracy: 0.8796 - val_loss: 0.3690 - val_accuracy: 0.9268\n", "Epoch 73/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.4006 - accuracy: 0.8822 - val_loss: 0.3658 - val_accuracy: 0.9268\n", "Epoch 74/100\n", "24/24 [==============================] - 0s 7ms/step - loss: 0.3974 - accuracy: 0.8796 - val_loss: 0.3622 - val_accuracy: 0.9268\n", "Epoch 75/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.3945 - accuracy: 0.8848 - val_loss: 0.3585 - val_accuracy: 0.9268\n", "Epoch 76/100\n", "24/24 [==============================] - 0s 9ms/step - loss: 0.3918 - accuracy: 0.8848 - val_loss: 0.3557 - val_accuracy: 0.9268\n", "Epoch 77/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.3890 - accuracy: 0.8796 - val_loss: 0.3524 - val_accuracy: 0.9268\n", "Epoch 78/100\n", "24/24 [==============================] - 0s 5ms/step - loss: 0.3862 - accuracy: 0.8822 - val_loss: 0.3506 - val_accuracy: 0.9268\n", "Epoch 79/100\n", "24/24 [==============================] - 0s 13ms/step - loss: 0.3837 - accuracy: 0.8848 - val_loss: 0.3473 - val_accuracy: 0.9268\n", "Epoch 80/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.3809 - accuracy: 0.8822 - val_loss: 0.3438 - val_accuracy: 0.9268\n", "Epoch 81/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.3786 - accuracy: 0.8848 - val_loss: 0.3407 - val_accuracy: 0.9268\n", "Epoch 82/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.3760 - accuracy: 0.8822 - val_loss: 0.3383 - val_accuracy: 0.9268\n", "Epoch 83/100\n", "24/24 [==============================] - 0s 7ms/step - loss: 0.3734 - accuracy: 0.8796 - val_loss: 0.3357 - val_accuracy: 0.9268\n", "Epoch 84/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.3711 - accuracy: 0.8822 - val_loss: 0.3334 - val_accuracy: 0.9268\n", "Epoch 85/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.3689 - accuracy: 0.8796 - val_loss: 0.3302 - val_accuracy: 0.9268\n", "Epoch 86/100\n", "24/24 [==============================] - 0s 9ms/step - loss: 0.3663 - accuracy: 0.8848 - val_loss: 0.3273 - val_accuracy: 0.9268\n", "Epoch 87/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.3643 - accuracy: 0.8796 - val_loss: 0.3245 - val_accuracy: 0.9268\n", "Epoch 88/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.3620 - accuracy: 0.8848 - val_loss: 0.3227 - val_accuracy: 0.9268\n", "Epoch 89/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.3597 - accuracy: 0.8848 - val_loss: 0.3212 - val_accuracy: 0.9268\n", "Epoch 90/100\n", "24/24 [==============================] - 0s 7ms/step - loss: 0.3576 - accuracy: 0.8822 - val_loss: 0.3176 - val_accuracy: 0.9268\n", "Epoch 91/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.3558 - accuracy: 0.8901 - val_loss: 0.3154 - val_accuracy: 0.9268\n", "Epoch 92/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.3534 - accuracy: 0.8874 - val_loss: 0.3127 - val_accuracy: 0.9268\n", "Epoch 93/100\n", "24/24 [==============================] - ETA: 0s - loss: 0.3579 - accuracy: 0.88 - 0s 8ms/step - loss: 0.3517 - accuracy: 0.8874 - val_loss: 0.3102 - val_accuracy: 0.9268\n", "Epoch 94/100\n", "24/24 [==============================] - 0s 7ms/step - loss: 0.3497 - accuracy: 0.8874 - val_loss: 0.3093 - val_accuracy: 0.9268\n", "Epoch 95/100\n", "24/24 [==============================] - 0s 7ms/step - loss: 0.3477 - accuracy: 0.8874 - val_loss: 0.3068 - val_accuracy: 0.9268\n", "Epoch 96/100\n", "24/24 [==============================] - 0s 6ms/step - loss: 0.3458 - accuracy: 0.8927 - val_loss: 0.3051 - val_accuracy: 0.9268\n", "Epoch 97/100\n", "24/24 [==============================] - 0s 11ms/step - loss: 0.3444 - accuracy: 0.8848 - val_loss: 0.3021 - val_accuracy: 0.9268\n", "Epoch 98/100\n", "24/24 [==============================] - 0s 11ms/step - loss: 0.3420 - accuracy: 0.8874 - val_loss: 0.2990 - val_accuracy: 0.9268\n", "Epoch 99/100\n", "24/24 [==============================] - 0s 10ms/step - loss: 0.3401 - accuracy: 0.8874 - val_loss: 0.2960 - val_accuracy: 0.9268\n", "Epoch 100/100\n", "24/24 [==============================] - 0s 8ms/step - loss: 0.3389 - accuracy: 0.8874 - val_loss: 0.2946 - val_accuracy: 0.9268\n" ] } ], "source": [ "hist = model.fit(X_train, Y_train,\n", " batch_size=16, epochs=100,\n", " validation_data=(X_val, Y_val))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You have a strong model if your test accuracy is between 80% and 95%. \n", "* Above 95%, you likely overfit the model.\n", "* Below 80%, the model didn't capture enough of the data's variability." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3/3 [==============================] - 0s 3ms/step - loss: 0.3672 - accuracy: 0.8072\n" ] }, { "data": { "text/plain": [ "0.8072289228439331" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.evaluate(X_test, Y_test)[1] #0 = loss, 1 = accuracy" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(hist.history['loss'])\n", "plt.plot(hist.history['val_loss'])\n", "plt.title('Model loss')\n", "plt.ylabel('Loss')\n", "plt.xlabel('Epoch')\n", "plt.legend(['Train', 'Val'], loc='upper right')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(hist.history['accuracy'])\n", "plt.plot(hist.history['val_accuracy'])\n", "plt.title('Model accuracy')\n", "plt.ylabel('Accuracy')\n", "plt.xlabel('Epoch')\n", "plt.legend(['Train', 'Val'], loc='lower right')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Making Predictions\n", "Predict whether a house with the following characteristics is above or below the average price.\n", "* Bedrooms: 4\n", "* Square Feet: 2,500\n", "* Year Built: 2001\n", "* Garage Spaces: 2\n", "* Full Bathrooms: 3\n", "* Half Bathrooms: 1\n", "* Lot Size: 3,452 Square Feet" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1.]\n" ] } ], "source": [ "x = [[4, 2500, 2001, 2, 3, 1, 3452]] \n", "print(model.predict(x)[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Summary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Keras is an easy to use, well-known library for constructing neural networks in Python.\n", "* It was designed with a user-friendly API with easy to decipher error messages.\n", "* Neural Networks emulate human pattern-recognition skills to analyze large datasets (particularly nonlinear responses)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" } }, "nbformat": 4, "nbformat_minor": 4 }