{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
به نام خدا
\n", "\n", "

رگرسیون یا \n", "Regression داده های ساختار یافته\n", "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##
معرفی مجموعه داده تخممین قیمت منازل
\n", "\n", "
\n", "این مجموعه داده در مقاله سال 2016 تحت عنوان 2016\n", " House price estimation from visual and textual features\n", "معرفی و منتشر شده است.\n", "
\n", "

\n", "\n", "https://github.com/emanhamed/Houses-dataset\n", "\n", "
\n", "\n", "https://arxiv.org/pdf/1609.08399.pdf\n", "\n", " \n", "

" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] } ], "source": [ "# import the necessary packages\n", "from keras.models import Sequential\n", "from keras.layers import Dense, Dropout, Activation\n", "from sklearn.preprocessing import LabelBinarizer\n", "from sklearn.preprocessing import MinMaxScaler\n", "from sklearn.model_selection import train_test_split\n", "from keras.optimizers import Adam\n", "import pandas as pd\n", "import numpy as np\n", "import glob\n", "import cv2\n", "import os\n", "import locale" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "cols = [\"bedrooms\", \"bathrooms\", \"area\", \"zipcode\", \"price\"]\n", "df = pd.read_csv(\"https://raw.githubusercontent.com/emanhamed/Houses-dataset/master/Houses%20Dataset/HousesInfo.txt\", sep=\" \", header=None, names=cols)\n" ] }, { "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", "
bedroomsbathroomsareazipcodeprice
044.0405385255869500.0
143.0334336372865200.0
234.0392385266889000.0
355.0402285262910000.0
434.0411685266971226.0
\n", "
" ], "text/plain": [ " bedrooms bathrooms area zipcode price\n", "0 4 4.0 4053 85255 869500.0\n", "1 4 3.0 3343 36372 865200.0\n", "2 3 4.0 3923 85266 889000.0\n", "3 5 5.0 4022 85262 910000.0\n", "4 3 4.0 4116 85266 971226.0" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "کد پستی های منحصر به فرد و تعدادشان\n", "
" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "zipcodes, counts = np.unique(df[\"zipcode\"], return_counts=True)\n", "#dict(zip(zipcodes, counts))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(535, 5)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " حذف رکوردهایی که zip code آن منزل ها zip code شان کمتر از 25 بار تکرا شده است\n", "
" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# loop over each of the unique zip codes and their corresponding\n", "# count\n", "for (zipcode, count) in zip(zipcodes, counts):\n", " # the zip code counts for our housing dataset is *extremely*\n", " # unbalanced (some only having 1 or 2 houses per zip code)\n", " # so let's sanitize our data by removing any houses with less\n", " # than 25 houses per zip code\n", " if count < 25:\n", " idxs = df[df[\"zipcode\"] == zipcode].index\n", " df.drop(idxs, inplace=True)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(362, 5)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "جدا کردن داده های موجود به داده های آموزش و آزمون
" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(271, 5)\n", "(91, 5)\n" ] } ], "source": [ "(train, test) = train_test_split(df, test_size=0.25, random_state=42)\n", "print(train.shape)\n", "print(test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##
پیش پردازش داده ها:
\n", "\n", "
\n", "نرمال سازی داده ها یا Scaling داده ها بین 0 و 1\n", "
" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# find the largest house price in the training set and use it to\n", "# scale our house prices to the range [0, 1] (this will lead to\n", "# better training and convergence)\n", "maxPrice = train[\"price\"].max()\n", "trainY = train[\"price\"] / maxPrice\n", "testY = test[\"price\"] / maxPrice" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\alire\\Miniconda3\\envs\\tensorflow\\lib\\site-packages\\sklearn\\preprocessing\\data.py:323: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by MinMaxScaler.\n", " return self.partial_fit(X, y)\n" ] } ], "source": [ "# initialize the column names of the continuous data\n", "continuous = [\"bedrooms\", \"bathrooms\", \"area\"]\n", "\n", "# performin min-max scaling each continuous feature column to\n", "# the range [0, 1]\n", "cs = MinMaxScaler()\n", "trainContinuous = cs.fit_transform(train[continuous])\n", "testContinuous = cs.transform(test[continuous])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "تبدیل مقادیر گسسته به one-hot
" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# one-hot encode the zip code categorical data (by definition of\n", "# one-hot encoing, all output features are now in the range [0, 1])\n", "zipBinarizer = LabelBinarizer().fit(df[\"zipcode\"])\n", "trainCategorical = zipBinarizer.transform(train[\"zipcode\"])\n", "testCategorical = zipBinarizer.transform(test[\"zipcode\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " ترکیب ویژگی‌های گستته و پیوسته\n", "
" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(271, 10)\n", "(91, 10)\n" ] } ], "source": [ "# construct our training and testing data points by concatenating\n", "# the categorical features with the continuous features\n", "trainX = np.hstack([trainCategorical, trainContinuous])\n", "testX = np.hstack([testCategorical, testContinuous])\n", "\n", "print(trainX.shape)\n", "print(testX.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##
تعریف معماری مدل (model architecture)
" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "dim = trainX.shape[1]\n", "# define our MLP network\n", "model = Sequential()\n", "model.add(Dense(8, input_dim=dim, activation=\"relu\"))\n", "model.add(Dense(4, activation=\"relu\"))\n", "model.add(Dense(1, activation=\"linear\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##
Compile model
" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "opt = Adam(lr=1e-3, decay=1e-3 / 200)\n", "model.compile(loss=\"mean_absolute_percentage_error\", optimizer=opt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##
آموش مدل با داده‌های آموزشی
" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 271 samples, validate on 91 samples\n", "Epoch 1/200\n", "271/271 [==============================] - 3s 11ms/step - loss: 274.3629 - val_loss: 109.6800\n", "Epoch 2/200\n", "271/271 [==============================] - 0s 852us/step - loss: 81.8187 - val_loss: 79.1573\n", "Epoch 3/200\n", "271/271 [==============================] - 0s 856us/step - loss: 57.5993 - val_loss: 63.2764\n", "Epoch 4/200\n", "271/271 [==============================] - 0s 915us/step - loss: 46.6169 - val_loss: 58.3518\n", "Epoch 5/200\n", "271/271 [==============================] - 0s 896us/step - loss: 46.4683 - val_loss: 55.3489\n", "Epoch 6/200\n", "271/271 [==============================] - 0s 815us/step - loss: 41.2374 - val_loss: 52.9153\n", "Epoch 7/200\n", "271/271 [==============================] - 0s 752us/step - loss: 41.2185 - val_loss: 50.9960\n", "Epoch 8/200\n", "271/271 [==============================] - 0s 749us/step - loss: 40.7949 - val_loss: 48.3711\n", "Epoch 9/200\n", "271/271 [==============================] - 0s 755us/step - loss: 37.9040 - val_loss: 47.3093\n", "Epoch 10/200\n", "271/271 [==============================] - 0s 734us/step - loss: 37.5179 - val_loss: 46.0542\n", "Epoch 11/200\n", "271/271 [==============================] - 0s 848us/step - loss: 38.1799 - val_loss: 42.2384\n", "Epoch 12/200\n", "271/271 [==============================] - 0s 841us/step - loss: 33.0743 - val_loss: 40.7507\n", "Epoch 13/200\n", "271/271 [==============================] - 0s 856us/step - loss: 32.9037 - val_loss: 40.1074\n", "Epoch 14/200\n", "271/271 [==============================] - 0s 859us/step - loss: 32.4340 - val_loss: 38.6366\n", "Epoch 15/200\n", "271/271 [==============================] - 0s 852us/step - loss: 32.3434 - val_loss: 38.7734\n", "Epoch 16/200\n", "271/271 [==============================] - 0s 786us/step - loss: 31.7143 - val_loss: 38.4141\n", "Epoch 17/200\n", "271/271 [==============================] - 0s 727us/step - loss: 31.3374 - val_loss: 38.3170\n", "Epoch 18/200\n", "271/271 [==============================] - 0s 771us/step - loss: 31.3158 - val_loss: 37.9615\n", "Epoch 19/200\n", "271/271 [==============================] - 0s 786us/step - loss: 31.1686 - val_loss: 37.5458\n", "Epoch 20/200\n", "271/271 [==============================] - 0s 800us/step - loss: 30.6506 - val_loss: 38.1518\n", "Epoch 21/200\n", "271/271 [==============================] - 0s 830us/step - loss: 30.3962 - val_loss: 37.4007\n", "Epoch 22/200\n", "271/271 [==============================] - 0s 918us/step - loss: 30.1059 - val_loss: 38.0858\n", "Epoch 23/200\n", "271/271 [==============================] - 0s 892us/step - loss: 30.5002 - val_loss: 38.4182\n", "Epoch 24/200\n", "271/271 [==============================] - 0s 863us/step - loss: 30.7216 - val_loss: 37.2208\n", "Epoch 25/200\n", "271/271 [==============================] - 0s 730us/step - loss: 29.9758 - val_loss: 37.7301\n", "Epoch 26/200\n", "271/271 [==============================] - 0s 852us/step - loss: 30.2822 - val_loss: 38.1261\n", "Epoch 27/200\n", "271/271 [==============================] - 0s 719us/step - loss: 31.1608 - val_loss: 36.6486\n", "Epoch 28/200\n", "271/271 [==============================] - 0s 774us/step - loss: 29.1486 - val_loss: 36.3479\n", "Epoch 29/200\n", "271/271 [==============================] - 0s 845us/step - loss: 29.1896 - val_loss: 35.6131\n", "Epoch 30/200\n", "271/271 [==============================] - 0s 845us/step - loss: 30.0241 - val_loss: 36.8921\n", "Epoch 31/200\n", "271/271 [==============================] - 0s 859us/step - loss: 30.0597 - val_loss: 36.7154\n", "Epoch 32/200\n", "271/271 [==============================] - 0s 848us/step - loss: 29.9695 - val_loss: 36.1278\n", "Epoch 33/200\n", "271/271 [==============================] - 0s 826us/step - loss: 28.5626 - val_loss: 35.8382\n", "Epoch 34/200\n", "271/271 [==============================] - 0s 734us/step - loss: 29.4202 - val_loss: 35.6527\n", "Epoch 35/200\n", "271/271 [==============================] - 0s 811us/step - loss: 28.9315 - val_loss: 36.7020\n", "Epoch 36/200\n", "271/271 [==============================] - 0s 837us/step - loss: 29.5862 - val_loss: 36.0291\n", "Epoch 37/200\n", "271/271 [==============================] - 0s 852us/step - loss: 30.0635 - val_loss: 36.1580\n", "Epoch 38/200\n", "271/271 [==============================] - 0s 1ms/step - loss: 30.1257 - val_loss: 35.6447\n", "Epoch 39/200\n", "271/271 [==============================] - 0s 966us/step - loss: 28.5957 - val_loss: 35.4753\n", "Epoch 40/200\n", "271/271 [==============================] - 0s 970us/step - loss: 29.1557 - val_loss: 36.6803\n", "Epoch 41/200\n", "271/271 [==============================] - 0s 937us/step - loss: 29.9257 - val_loss: 35.9405\n", "Epoch 42/200\n", "271/271 [==============================] - 0s 922us/step - loss: 28.8982 - val_loss: 35.5165\n", "Epoch 43/200\n", "271/271 [==============================] - 0s 973us/step - loss: 28.7194 - val_loss: 36.8679\n", "Epoch 44/200\n", "271/271 [==============================] - 0s 896us/step - loss: 29.6274 - val_loss: 35.4251\n", "Epoch 45/200\n", "271/271 [==============================] - 0s 837us/step - loss: 28.5909 - val_loss: 34.9274\n", "Epoch 46/200\n", "271/271 [==============================] - 0s 977us/step - loss: 28.5849 - val_loss: 35.4455\n", "Epoch 47/200\n", "271/271 [==============================] - 0s 985us/step - loss: 29.8543 - val_loss: 35.1163\n", "Epoch 48/200\n", "271/271 [==============================] - 0s 951us/step - loss: 28.4919 - val_loss: 35.5199\n", "Epoch 49/200\n", "271/271 [==============================] - 0s 974us/step - loss: 28.6055 - val_loss: 36.7568\n", "Epoch 50/200\n", "271/271 [==============================] - 0s 892us/step - loss: 29.3425 - val_loss: 34.6022\n", "Epoch 51/200\n", "271/271 [==============================] - 0s 782us/step - loss: 28.8814 - val_loss: 34.8447\n", "Epoch 52/200\n", "271/271 [==============================] - 0s 856us/step - loss: 29.2900 - val_loss: 35.0079\n", "Epoch 53/200\n", "271/271 [==============================] - 0s 786us/step - loss: 29.5400 - val_loss: 34.9382\n", "Epoch 54/200\n", "271/271 [==============================] - 0s 874us/step - loss: 28.5073 - val_loss: 35.8380\n", "Epoch 55/200\n", "271/271 [==============================] - 0s 830us/step - loss: 28.7576 - val_loss: 34.2087\n", "Epoch 56/200\n", "271/271 [==============================] - 0s 867us/step - loss: 28.5596 - val_loss: 34.5693\n", "Epoch 57/200\n", "271/271 [==============================] - 0s 937us/step - loss: 29.4641 - val_loss: 34.5786\n", "Epoch 58/200\n", "271/271 [==============================] - 0s 944us/step - loss: 28.8239 - val_loss: 35.1018\n", "Epoch 59/200\n", "271/271 [==============================] - 0s 789us/step - loss: 28.2958 - val_loss: 35.3880\n", "Epoch 60/200\n", "271/271 [==============================] - 0s 760us/step - loss: 28.5673 - val_loss: 35.7874\n", "Epoch 61/200\n", "271/271 [==============================] - 0s 774us/step - loss: 29.4349 - val_loss: 36.7657\n", "Epoch 62/200\n", "271/271 [==============================] - 0s 767us/step - loss: 28.7991 - val_loss: 36.6966\n", "Epoch 63/200\n", "271/271 [==============================] - 0s 822us/step - loss: 29.0289 - val_loss: 34.5065\n", "Epoch 64/200\n", "271/271 [==============================] - 0s 896us/step - loss: 28.6727 - val_loss: 36.2448\n", "Epoch 65/200\n", "271/271 [==============================] - 0s 1ms/step - loss: 29.3485 - val_loss: 35.8350\n", "Epoch 66/200\n", "271/271 [==============================] - 0s 929us/step - loss: 29.2130 - val_loss: 35.9859\n", "Epoch 67/200\n", "271/271 [==============================] - 0s 863us/step - loss: 29.3722 - val_loss: 34.7409\n", "Epoch 68/200\n", "271/271 [==============================] - 0s 719us/step - loss: 29.1651 - val_loss: 35.7246\n", "Epoch 69/200\n", "271/271 [==============================] - 0s 822us/step - loss: 29.1330 - val_loss: 35.3774\n", "Epoch 70/200\n", "271/271 [==============================] - 0s 845us/step - loss: 28.1200 - val_loss: 35.1389\n", "Epoch 71/200\n", "271/271 [==============================] - 0s 826us/step - loss: 30.3745 - val_loss: 35.1621\n", "Epoch 72/200\n", "271/271 [==============================] - 0s 870us/step - loss: 29.7780 - val_loss: 36.2803\n", "Epoch 73/200\n", "271/271 [==============================] - 0s 915us/step - loss: 29.0088 - val_loss: 35.3808\n", "Epoch 74/200\n", "271/271 [==============================] - 0s 852us/step - loss: 28.7546 - val_loss: 35.0129\n", "Epoch 75/200\n", "271/271 [==============================] - 0s 922us/step - loss: 28.3806 - val_loss: 35.6722\n", "Epoch 76/200\n", "271/271 [==============================] - 0s 830us/step - loss: 28.4555 - val_loss: 35.6889\n", "Epoch 77/200\n", "271/271 [==============================] - 0s 811us/step - loss: 29.3141 - val_loss: 35.8317\n", "Epoch 78/200\n", "271/271 [==============================] - 0s 730us/step - loss: 28.5560 - val_loss: 34.8651\n", "Epoch 79/200\n", "271/271 [==============================] - 0s 734us/step - loss: 28.3928 - val_loss: 35.6066\n", "Epoch 80/200\n", "271/271 [==============================] - 0s 697us/step - loss: 29.1012 - val_loss: 36.1429\n", "Epoch 81/200\n", "271/271 [==============================] - 0s 749us/step - loss: 28.6560 - val_loss: 35.5072\n", "Epoch 82/200\n", "271/271 [==============================] - 0s 804us/step - loss: 28.8311 - val_loss: 36.2556\n", "Epoch 83/200\n", "271/271 [==============================] - 0s 811us/step - loss: 28.5464 - val_loss: 35.2115\n", "Epoch 84/200\n", "271/271 [==============================] - 0s 826us/step - loss: 28.0626 - val_loss: 37.0662\n", "Epoch 85/200\n", "271/271 [==============================] - 0s 767us/step - loss: 28.5353 - val_loss: 35.1223\n", "Epoch 86/200\n", "271/271 [==============================] - 0s 612us/step - loss: 28.2699 - val_loss: 36.5861\n", "Epoch 87/200\n", "271/271 [==============================] - 0s 664us/step - loss: 28.7683 - val_loss: 36.0658\n", "Epoch 88/200\n", "271/271 [==============================] - 0s 693us/step - loss: 28.6031 - val_loss: 37.1731\n", "Epoch 89/200\n", "271/271 [==============================] - 0s 734us/step - loss: 28.4059 - val_loss: 34.6264\n", "Epoch 90/200\n", "271/271 [==============================] - 0s 734us/step - loss: 29.3826 - val_loss: 36.8670\n", "Epoch 91/200\n", "271/271 [==============================] - 0s 760us/step - loss: 28.7343 - val_loss: 36.1997\n", "Epoch 92/200\n", "271/271 [==============================] - 0s 774us/step - loss: 27.9420 - val_loss: 35.6907\n", "Epoch 93/200\n", "271/271 [==============================] - 0s 789us/step - loss: 28.4056 - val_loss: 35.9340\n", "Epoch 94/200\n", "271/271 [==============================] - 0s 771us/step - loss: 29.8033 - val_loss: 35.0321\n", "Epoch 95/200\n", "271/271 [==============================] - 0s 822us/step - loss: 28.6592 - val_loss: 34.5973\n", "Epoch 96/200\n", "271/271 [==============================] - 0s 620us/step - loss: 28.2901 - val_loss: 35.5223\n", "Epoch 97/200\n", "271/271 [==============================] - 0s 730us/step - loss: 28.7182 - val_loss: 36.1289\n", "Epoch 98/200\n", "271/271 [==============================] - 0s 679us/step - loss: 29.0689 - val_loss: 36.2295\n", "Epoch 99/200\n", "271/271 [==============================] - 0s 734us/step - loss: 28.5465 - val_loss: 34.9149\n", "Epoch 100/200\n", "271/271 [==============================] - 0s 749us/step - loss: 28.0349 - val_loss: 35.6574\n", "Epoch 101/200\n", "271/271 [==============================] - 0s 708us/step - loss: 28.6254 - val_loss: 35.6179\n", "Epoch 102/200\n", "271/271 [==============================] - 0s 797us/step - loss: 28.1658 - val_loss: 34.7164\n", "Epoch 103/200\n", "271/271 [==============================] - 0s 774us/step - loss: 27.7563 - val_loss: 34.8238\n", "Epoch 104/200\n", "271/271 [==============================] - 0s 811us/step - loss: 28.8107 - val_loss: 35.2860\n", "Epoch 105/200\n", "271/271 [==============================] - 0s 804us/step - loss: 28.7350 - val_loss: 36.6296\n", "Epoch 106/200\n", "271/271 [==============================] - 0s 645us/step - loss: 28.2885 - val_loss: 37.2982\n", "Epoch 107/200\n", "271/271 [==============================] - 0s 649us/step - loss: 29.1292 - val_loss: 36.7109\n", "Epoch 108/200\n", "271/271 [==============================] - 0s 704us/step - loss: 29.5676 - val_loss: 34.8100\n", "Epoch 109/200\n", "271/271 [==============================] - 0s 704us/step - loss: 28.5612 - val_loss: 36.1396\n", "Epoch 110/200\n", "271/271 [==============================] - 0s 745us/step - loss: 28.2348 - val_loss: 34.9619\n", "Epoch 111/200\n", "271/271 [==============================] - 0s 786us/step - loss: 28.1678 - val_loss: 35.6697\n", "Epoch 112/200\n", "271/271 [==============================] - 0s 904us/step - loss: 29.4567 - val_loss: 34.8336\n", "Epoch 113/200\n", "271/271 [==============================] - 0s 826us/step - loss: 28.7854 - val_loss: 35.6134\n", "Epoch 114/200\n", "271/271 [==============================] - 0s 800us/step - loss: 27.9338 - val_loss: 35.0001\n", "Epoch 115/200\n", "271/271 [==============================] - 0s 826us/step - loss: 28.8813 - val_loss: 35.9869\n", "Epoch 116/200\n", "271/271 [==============================] - 0s 723us/step - loss: 28.8484 - val_loss: 35.4887\n", "Epoch 117/200\n", "271/271 [==============================] - 0s 653us/step - loss: 28.8066 - val_loss: 35.1312\n", "Epoch 118/200\n", "271/271 [==============================] - 0s 712us/step - loss: 28.4494 - val_loss: 34.7813\n", "Epoch 119/200\n", "271/271 [==============================] - 0s 730us/step - loss: 28.0864 - val_loss: 34.6969\n", "Epoch 120/200\n", "271/271 [==============================] - 0s 756us/step - loss: 28.3474 - val_loss: 35.3573\n", "Epoch 121/200\n", "271/271 [==============================] - 0s 804us/step - loss: 28.0311 - val_loss: 34.2595\n", "Epoch 122/200\n", "271/271 [==============================] - 0s 815us/step - loss: 28.2223 - val_loss: 34.6867\n", "Epoch 123/200\n", "271/271 [==============================] - 0s 833us/step - loss: 28.2812 - val_loss: 34.2276\n", "Epoch 124/200\n", "271/271 [==============================] - 0s 793us/step - loss: 27.9038 - val_loss: 34.9292\n", "Epoch 125/200\n", "271/271 [==============================] - 0s 752us/step - loss: 28.0054 - val_loss: 34.1833\n", "Epoch 126/200\n", "271/271 [==============================] - 0s 760us/step - loss: 28.3382 - val_loss: 34.9324\n", "Epoch 127/200\n", "271/271 [==============================] - 0s 616us/step - loss: 28.4073 - val_loss: 35.4488\n", "Epoch 128/200\n", "271/271 [==============================] - 0s 734us/step - loss: 27.5672 - val_loss: 34.4673\n", "Epoch 129/200\n", "271/271 [==============================] - 0s 723us/step - loss: 28.2534 - val_loss: 36.3752\n", "Epoch 130/200\n", "271/271 [==============================] - 0s 756us/step - loss: 28.3115 - val_loss: 34.3845\n", "Epoch 131/200\n", "271/271 [==============================] - 0s 830us/step - loss: 28.0234 - val_loss: 35.7207\n", "Epoch 132/200\n", "271/271 [==============================] - 0s 856us/step - loss: 30.7974 - val_loss: 35.5416\n", "Epoch 133/200\n", "271/271 [==============================] - 0s 782us/step - loss: 28.3088 - val_loss: 34.9732\n", "Epoch 134/200\n", "271/271 [==============================] - 0s 789us/step - loss: 27.9249 - val_loss: 35.0184\n", "Epoch 135/200\n", "271/271 [==============================] - 0s 738us/step - loss: 28.5611 - val_loss: 35.2841\n", "Epoch 136/200\n", "271/271 [==============================] - 0s 701us/step - loss: 27.9119 - val_loss: 35.5909\n", "Epoch 137/200\n", "271/271 [==============================] - 0s 690us/step - loss: 27.7818 - val_loss: 34.7712\n", "Epoch 138/200\n", "271/271 [==============================] - 0s 811us/step - loss: 28.2153 - val_loss: 34.8878\n", "Epoch 139/200\n", "271/271 [==============================] - 0s 620us/step - loss: 28.1936 - val_loss: 34.5620\n", "Epoch 140/200\n", "271/271 [==============================] - 0s 767us/step - loss: 29.1327 - val_loss: 34.3295\n", "Epoch 141/200\n", "271/271 [==============================] - 0s 811us/step - loss: 28.1130 - val_loss: 35.4334\n", "Epoch 142/200\n", "271/271 [==============================] - 0s 793us/step - loss: 27.6401 - val_loss: 35.8526\n", "Epoch 143/200\n", "271/271 [==============================] - 0s 797us/step - loss: 28.8755 - val_loss: 34.9421\n", "Epoch 144/200\n", "271/271 [==============================] - 0s 826us/step - loss: 28.4211 - val_loss: 35.3376\n", "Epoch 145/200\n", "271/271 [==============================] - 0s 712us/step - loss: 27.6346 - val_loss: 34.6086\n", "Epoch 146/200\n", "271/271 [==============================] - 0s 631us/step - loss: 27.7236 - val_loss: 34.6648\n", "Epoch 147/200\n", "271/271 [==============================] - 0s 679us/step - loss: 28.5931 - val_loss: 35.5566\n", "Epoch 148/200\n", "271/271 [==============================] - 0s 752us/step - loss: 27.7323 - val_loss: 34.5734\n", "Epoch 149/200\n", "271/271 [==============================] - 0s 704us/step - loss: 27.7599 - val_loss: 34.6223\n", "Epoch 150/200\n", "271/271 [==============================] - 0s 808us/step - loss: 28.7277 - val_loss: 36.7365\n", "Epoch 151/200\n", "271/271 [==============================] - 0s 774us/step - loss: 29.3655 - val_loss: 34.8086\n", "Epoch 152/200\n", "271/271 [==============================] - 0s 767us/step - loss: 28.5911 - val_loss: 34.3407\n", "Epoch 153/200\n", "271/271 [==============================] - 0s 815us/step - loss: 28.0147 - val_loss: 34.4950\n", "Epoch 154/200\n", "271/271 [==============================] - 0s 837us/step - loss: 28.4955 - val_loss: 34.7144\n", "Epoch 155/200\n", "271/271 [==============================] - 0s 679us/step - loss: 28.0506 - val_loss: 35.0608\n", "Epoch 156/200\n", "271/271 [==============================] - 0s 708us/step - loss: 28.4803 - val_loss: 34.4899\n", "Epoch 157/200\n", "271/271 [==============================] - 0s 752us/step - loss: 27.7605 - val_loss: 35.5914\n", "Epoch 158/200\n", "271/271 [==============================] - 0s 612us/step - loss: 27.6416 - val_loss: 34.4462\n", "Epoch 159/200\n", "271/271 [==============================] - 0s 749us/step - loss: 28.2755 - val_loss: 34.8035\n", "Epoch 160/200\n", "271/271 [==============================] - 0s 789us/step - loss: 28.0464 - val_loss: 34.8777\n", "Epoch 161/200\n", "271/271 [==============================] - 0s 786us/step - loss: 27.8735 - val_loss: 34.5049\n", "Epoch 162/200\n", "271/271 [==============================] - 0s 800us/step - loss: 27.5493 - val_loss: 34.6863\n", "Epoch 163/200\n", "271/271 [==============================] - 0s 822us/step - loss: 28.2082 - val_loss: 35.1853\n", "Epoch 164/200\n", "271/271 [==============================] - 0s 797us/step - loss: 29.6458 - val_loss: 34.2768\n", "Epoch 165/200\n", "271/271 [==============================] - 0s 697us/step - loss: 28.3591 - val_loss: 36.0058\n", "Epoch 166/200\n", "271/271 [==============================] - 0s 660us/step - loss: 28.7876 - val_loss: 36.5060\n", "Epoch 167/200\n", "271/271 [==============================] - 0s 712us/step - loss: 28.7109 - val_loss: 34.9671\n", "Epoch 168/200\n", "271/271 [==============================] - 0s 690us/step - loss: 28.0675 - val_loss: 36.1290\n", "Epoch 169/200\n", "271/271 [==============================] - 0s 727us/step - loss: 29.3283 - val_loss: 35.3012\n", "Epoch 170/200\n", "271/271 [==============================] - 0s 793us/step - loss: 28.2303 - val_loss: 34.7625\n", "Epoch 171/200\n", "271/271 [==============================] - 0s 763us/step - loss: 28.1528 - val_loss: 34.4396\n", "Epoch 172/200\n", "271/271 [==============================] - 0s 774us/step - loss: 27.3404 - val_loss: 34.5707\n", "Epoch 173/200\n", "271/271 [==============================] - 0s 800us/step - loss: 28.2543 - val_loss: 34.9200\n", "Epoch 174/200\n", "271/271 [==============================] - 0s 727us/step - loss: 27.7098 - val_loss: 34.5400\n", "Epoch 175/200\n", "271/271 [==============================] - 0s 642us/step - loss: 27.7488 - val_loss: 34.9666\n", "Epoch 176/200\n", "271/271 [==============================] - 0s 649us/step - loss: 28.2577 - val_loss: 34.5095\n", "Epoch 177/200\n", "271/271 [==============================] - 0s 708us/step - loss: 27.7456 - val_loss: 34.4621\n", "Epoch 178/200\n", "271/271 [==============================] - 0s 671us/step - loss: 28.0341 - val_loss: 34.4388\n", "Epoch 179/200\n", "271/271 [==============================] - 0s 719us/step - loss: 28.0120 - val_loss: 34.4689\n", "Epoch 180/200\n", "271/271 [==============================] - 0s 760us/step - loss: 27.4960 - val_loss: 34.3378\n", "Epoch 181/200\n", "271/271 [==============================] - 0s 789us/step - loss: 28.2026 - val_loss: 34.6268\n", "Epoch 182/200\n", "271/271 [==============================] - 0s 767us/step - loss: 27.4339 - val_loss: 34.6973\n", "Epoch 183/200\n", "271/271 [==============================] - 0s 815us/step - loss: 28.4992 - val_loss: 34.7024\n", "Epoch 184/200\n", "271/271 [==============================] - 0s 749us/step - loss: 28.3122 - val_loss: 34.5392\n", "Epoch 185/200\n", "271/271 [==============================] - 0s 653us/step - loss: 28.6185 - val_loss: 35.5946\n", "Epoch 186/200\n", "271/271 [==============================] - 0s 701us/step - loss: 28.5614 - val_loss: 35.1319\n", "Epoch 187/200\n", "271/271 [==============================] - 0s 693us/step - loss: 27.9678 - val_loss: 36.6366\n", "Epoch 188/200\n", "271/271 [==============================] - 0s 668us/step - loss: 28.0846 - val_loss: 36.4053\n", "Epoch 189/200\n", "271/271 [==============================] - 0s 723us/step - loss: 28.3186 - val_loss: 34.6923\n", "Epoch 190/200\n", "271/271 [==============================] - 0s 741us/step - loss: 27.6466 - val_loss: 34.3430\n", "Epoch 191/200\n", "271/271 [==============================] - 0s 822us/step - loss: 28.0437 - val_loss: 35.4831\n", "Epoch 192/200\n", "271/271 [==============================] - 0s 845us/step - loss: 28.7008 - val_loss: 34.6764\n", "Epoch 193/200\n", "271/271 [==============================] - 0s 771us/step - loss: 28.3251 - val_loss: 34.0047\n", "Epoch 194/200\n", "271/271 [==============================] - 0s 804us/step - loss: 28.0629 - val_loss: 35.7091\n", "Epoch 195/200\n", "271/271 [==============================] - 0s 686us/step - loss: 27.6946 - val_loss: 35.1283\n", "Epoch 196/200\n", "271/271 [==============================] - 0s 671us/step - loss: 27.9952 - val_loss: 34.9689\n", "Epoch 197/200\n", "271/271 [==============================] - 0s 719us/step - loss: 28.2978 - val_loss: 33.7529\n", "Epoch 198/200\n", "271/271 [==============================] - 0s 752us/step - loss: 27.6831 - val_loss: 33.7525\n", "Epoch 199/200\n", "271/271 [==============================] - 0s 690us/step - loss: 28.2086 - val_loss: 35.0329\n", "Epoch 200/200\n", "271/271 [==============================] - 0s 786us/step - loss: 27.7026 - val_loss: 34.3507\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.fit(trainX, trainY, validation_data=(testX, testY),\n", " epochs=200, batch_size=8)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "preds = model.predict(testX)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "avg. house price: $533,388.27, std house price: $493,403.08\n", "mean: 34.35%, std: 34.27%\n" ] } ], "source": [ "# make predictions on the testing data\n", "preds = model.predict(testX)\n", " \n", "# compute the difference between the *predicted* house prices and the\n", "# *actual* house prices, then compute the percentage difference and\n", "# the absolute percentage difference\n", "diff = preds.flatten() - testY\n", "percentDiff = (diff / testY) * 100\n", "absPercentDiff = np.abs(percentDiff)\n", " \n", "# compute the mean and standard deviation of the absolute percentage\n", "# difference\n", "mean = np.mean(absPercentDiff)\n", "std = np.std(absPercentDiff)\n", " \n", "# finally, show some statistics on our model\n", "locale.setlocale(locale.LC_ALL, \"en_US.UTF-8\")\n", "print(\"avg. house price: {}, std house price: {}\".format(\n", " locale.currency(df[\"price\"].mean(), grouping=True),\n", " locale.currency(df[\"price\"].std(), grouping=True)))\n", "print(\"mean: {:.2f}%, std: {:.2f}%\".format(mean, std))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "##
‌منبع
\n", "\n", "https://www.pyimagesearch.com/2019/01/21/regression-with-keras/" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10" }, "nbpresent": { "slides": { "300ee14f-a043-486e-b274-7ff253907cd7": { "id": "300ee14f-a043-486e-b274-7ff253907cd7", "prev": "cb74e0bc-4513-4d13-b7f1-14c3078a7927", "regions": { "26dc3f39-a230-447c-af4c-f5e5b2fb7835": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "c58440a5-3f8f-4f37-9c79-6bf766209406", "part": "whole" }, "id": "26dc3f39-a230-447c-af4c-f5e5b2fb7835" } } }, "878aa53a-1444-4100-8f50-7a408191c579": { "id": "878aa53a-1444-4100-8f50-7a408191c579", "prev": null, "regions": { "a6c6843a-5ea6-4fbc-b890-3b4b8ae475b3": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "588ee1fa-64b5-453b-ade7-8e6b2515821c", "part": "whole" }, "id": "a6c6843a-5ea6-4fbc-b890-3b4b8ae475b3" } } }, "96ffe88e-7b50-43de-afdd-942e564f4e3e": { "id": "96ffe88e-7b50-43de-afdd-942e564f4e3e", "prev": "878aa53a-1444-4100-8f50-7a408191c579", "regions": { "b7e52e12-489a-468d-b10c-af2024fd2856": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "de829a92-1fb6-44ad-a2c6-fc1001e1f6e1", "part": "whole" }, "id": "b7e52e12-489a-468d-b10c-af2024fd2856" } } }, "cb74e0bc-4513-4d13-b7f1-14c3078a7927": { "id": "cb74e0bc-4513-4d13-b7f1-14c3078a7927", "prev": "96ffe88e-7b50-43de-afdd-942e564f4e3e", "regions": { "444878ee-68f3-4abb-acff-a7079b21e86d": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "25f3f538-1ee8-4d98-a6bb-14cbeb7a702d", "part": "whole" }, "id": "444878ee-68f3-4abb-acff-a7079b21e86d" } } } }, "themes": {} } }, "nbformat": 4, "nbformat_minor": 4 }