{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "fv9OoQsMFk5A" }, "source": [ "# ការព្យាករណ៍ស៊េរីពេលវេលា​​ដោយប្រើ Support Vector Regressor\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ក្នុងសៀវភៅកំណត់ត្រានេះ យើងបង្ហាញពីរបៀប៖\n", "\n", "- រៀបចំទិន្នន័យប្រេកង់ពេលវេលា 2D សម្រាប់បង្រៀនម៉ូឌែលប៉ាន់ស្មាន SVM\n", "- អនុវត្ត SVR ដោយប្រើកណ្នែល RBF\n", "- វាយតម្លៃម៉ូឌែលដោយប្រើក្រាល និង MAPE\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ការនាំចូលម៉ូឌុល\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sys\n", "sys.path.append('../../')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "M687KNlQFp0-" }, "outputs": [], "source": [ "import os\n", "import warnings\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import datetime as dt\n", "import math\n", "\n", "from sklearn.svm import SVR\n", "from sklearn.preprocessing import MinMaxScaler\n", "from common.utils import load_data, mape" ] }, { "cell_type": "markdown", "metadata": { "id": "Cj-kfVdMGjWP" }, "source": [ "## ការរៀបចំទិន្នន័យ\n" ] }, { "cell_type": "markdown", "metadata": { "id": "8fywSjC6GsRz" }, "source": [ "### បញ្ជូលទិន្នន័យ\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 363 }, "id": "aBDkEB11Fumg", "outputId": "99cf7987-0509-4b73-8cc2-75d7da0d2740" }, "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", "
load
2012-01-01 00:00:002698.0
2012-01-01 01:00:002558.0
2012-01-01 02:00:002444.0
2012-01-01 03:00:002402.0
2012-01-01 04:00:002403.0
\n", "
" ], "text/plain": [ " load\n", "2012-01-01 00:00:00 2698.0\n", "2012-01-01 01:00:00 2558.0\n", "2012-01-01 02:00:00 2444.0\n", "2012-01-01 03:00:00 2402.0\n", "2012-01-01 04:00:00 2403.0" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "energy = load_data('../../data')[['load']]\n", "energy.head(5)" ] }, { "cell_type": "markdown", "metadata": { "id": "O0BWP13rGnh4" }, "source": [ "### គូរតាងទិន្នន័យ\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 486 }, "id": "hGaNPKu_Gidk", "outputId": "7f89b326-9057-4f49-efbe-cb100ebdf76d" }, "outputs": [], "source": [ "energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)\n", "plt.xlabel('timestamp', fontsize=12)\n", "plt.ylabel('load', fontsize=12)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "IPuNor4eGwYY" }, "source": [ "### បង្កើតទិន្នន័យបណ្តុះបណ្តាល និងតេស្ត\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "ysvsNyONGt0Q" }, "outputs": [], "source": [ "train_start_dt = '2014-11-01 00:00:00'\n", "test_start_dt = '2014-12-30 00:00:00'" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 548 }, "id": "SsfdLoPyGy9w", "outputId": "d6d6c25b-b1f4-47e5-91d1-707e043237d7" }, "outputs": [], "source": [ "energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \\\n", " .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \\\n", " .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12)\n", "plt.xlabel('timestamp', fontsize=12)\n", "plt.ylabel('load', fontsize=12)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "XbFTqBw6G1Ch" }, "source": [ "### ការរៀបចំទិន្នន័យសម្រាប់ការបណ្តុះបណ្តាល\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ឥឡូវនេះ អ្នកត្រូវតែរៀបចំទិន្នន័យសម្រាប់ការបណ្តុះបណ្តាលដោយធ្វើការចំរូងនិងការវាស់ទីទិន្នន័យរបស់អ្នក។\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "cYivRdQpHDj3", "outputId": "a138f746-461c-4fd6-bfa6-0cee094c4aa1" }, "outputs": [], "source": [ "train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']]\n", "test = energy.copy()[energy.index >= test_start_dt][['load']]\n", "\n", "print('Training data shape: ', train.shape)\n", "print('Test data shape: ', test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "វិមាត្រទិន្នន័យឲ្យមានជួរតម្លៃនៅក្នុងចន្លោះ (0, 1)។\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 363 }, "id": "3DNntGQnZX8G", "outputId": "210046bc-7a66-4ccd-d70d-aa4a7309949c" }, "outputs": [], "source": [ "scaler = MinMaxScaler()\n", "train['load'] = scaler.fit_transform(train)\n", "train.head(5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "26Yht-rzZexe", "outputId": "20326077-a38a-4e78-cc5b-6fd7af95d301" }, "outputs": [], "source": [ "test['load'] = scaler.transform(test)\n", "test.head(5)" ] }, { "cell_type": "markdown", "metadata": { "id": "x0n6jqxOQ41Z" }, "source": [ "### ការបង្កើតទិន្នន័យជាមួយជំហានពេលវេលា\n" ] }, { "cell_type": "markdown", "metadata": { "id": "fdmxTZtOQ8xs" }, "source": [ "សម្រាប់ SVR របស់យើង យើងបម្លែងទិន្នន័យចូលឲ្យមានទ្រង់ទ្រាយជា `[batch, timesteps]`។ ដូច្នេះ យើងបម្លែងទ្រង់ទ្រាយ `train_data` និង `test_data` ដែលមានស្រាប់ ដើម្បីបង្កើតមាត្រថ្មីមួយដែលយោងទៅកាន់ខ្ទង់ពេល (timesteps)។ សម្រាប់ឧទាហរណ៍របស់យើង យើងកំណត់ `timesteps = 5`។ ដូច្នេះ ទិន្នន័យចូលទៅម៉ូដែលគឺសម្រាប់សម័យពេល 4 ដំបូង ហើយទិន្នន័យចេញនឹងជាសម្រាប់សម័យពេលទី 5។\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Rpju-Sc2HFm0" }, "outputs": [], "source": [ "# Converting to numpy arrays\n", "\n", "train_data = train.values\n", "test_data = test.values" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Selecting the timesteps\n", "\n", "timesteps=None" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "O-JrsrsVJhUQ", "outputId": "c90dbe71-bacc-4ec4-b452-f82fe5aefaef" }, "outputs": [], "source": [ "# Converting data to 2D tensor\n", "\n", "train_data_timesteps=None" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "exJD8AI7KE4g", "outputId": "ce90260c-f327-427d-80f2-77307b5a6318" }, "outputs": [], "source": [ "# Converting test data to 2D tensor\n", "\n", "test_data_timesteps=None" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "2u0R2sIsLuq5" }, "outputs": [], "source": [ "x_train, y_train = None\n", "x_test, y_test = None\n", "\n", "print(x_train.shape, y_train.shape)\n", "print(x_test.shape, y_test.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "8wIPOtAGLZlh" }, "source": [ "## ការបង្កើតម៉ូដែល SVR\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "EhA403BEPEiD" }, "outputs": [], "source": [ "# Create model using RBF kernel\n", "\n", "model = None" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GS0UA3csMbqp", "outputId": "d86b6f05-5742-4c1d-c2db-c40510bd4f0d" }, "outputs": [], "source": [ "# Fit model on training data" ] }, { "cell_type": "markdown", "metadata": { "id": "Rz_x8S3UrlcF" }, "source": [ "### ធ្វើការព្យាករណ៍ម៉ូដែល\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "XR0gnt3MnuYS", "outputId": "157e40ab-9a23-4b66-a885-0d52a24b2364" }, "outputs": [], "source": [ "# Making predictions\n", "\n", "y_train_pred = None\n", "y_test_pred = None" ] }, { "cell_type": "markdown", "metadata": { "id": "_2epncg-SGzr" }, "source": [ "## វិភាគកម្រិតប្រតិបត្តិការរបស់ម៉ូដែល\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Scaling the predictions\n", "\n", "y_train_pred = scaler.inverse_transform(y_train_pred)\n", "y_test_pred = scaler.inverse_transform(y_test_pred)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "xmm_YLXhq7gV", "outputId": "18392f64-4029-49ac-c71a-a4e2411152a1" }, "outputs": [], "source": [ "# Scaling the original values\n", "\n", "y_train = scaler.inverse_transform(y_train)\n", "y_test = scaler.inverse_transform(y_test)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "u3LBj93coHEi", "outputId": "d4fd49e8-8c6e-4bb0-8ef9-ca0b26d725b4" }, "outputs": [], "source": [ "# Extract the timesteps for x-axis\n", "\n", "train_timestamps = None\n", "test_timestamps = None" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(25,6))\n", "# plot original output\n", "# plot predicted output\n", "plt.legend(['Actual','Predicted'])\n", "plt.xlabel('Timestamp')\n", "plt.title(\"Training data prediction\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "LnhzcnYtXHCm", "outputId": "f5f0d711-f18b-4788-ad21-d4470ea2c02b" }, "outputs": [], "source": [ "print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 225 }, "id": "53Q02FoqQH4V", "outputId": "53e2d59b-5075-4765-ad9e-aed56c966583" }, "outputs": [], "source": [ "plt.figure(figsize=(10,3))\n", "# plot original output\n", "# plot predicted output\n", "plt.legend(['Actual','Predicted'])\n", "plt.xlabel('Timestamp')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "clOAUH-SXCJG", "outputId": "a3aa85ff-126a-4a4a-cd9e-90b9cc465ef5" }, "outputs": [], "source": [ "print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%')" ] }, { "cell_type": "markdown", "metadata": { "id": "DHlKvVCId5ue" }, "source": [ "## ការព្យាករណ៍ទិន្នន័យពេញលេញ\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "cOFJ45vreO0N", "outputId": "35628e33-ecf9-4966-8036-f7ea86db6f16" }, "outputs": [], "source": [ "# Extracting load values as numpy array\n", "data = None\n", "\n", "# Scaling\n", "data = None\n", "\n", "# Transforming to 2D tensor as per model input requirement\n", "data_timesteps=None\n", "\n", "# Selecting inputs and outputs from data\n", "X, Y = None, None" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "ESSAdQgwexIi" }, "outputs": [], "source": [ "# Make model predictions\n", "\n", "# Inverse scale and reshape\n", "Y_pred = None\n", "Y = None" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 328 }, "id": "M_qhihN0RVVX", "outputId": "a89cb23e-1d35-437f-9d63-8b8907e12f80" }, "outputs": [], "source": [ "plt.figure(figsize=(30,8))\n", "# plot original output\n", "# plot predicted output\n", "plt.legend(['Actual','Predicted'])\n", "plt.xlabel('Timestamp')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "AcN7pMYXVGTK", "outputId": "7e1c2161-47ce-496c-9d86-7ad9ae0df770" }, "outputs": [], "source": [ "print('MAPE: ', mape(Y_pred, Y)*100, '%')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n\n\n**ចំណាំ**៖ \nឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាបកប្រែ AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ ខណៈពេលយើងខិតខំសម្រាប់ភាពត្រឹមត្រូវ សូមចំណាំថាការបកប្រែដោយស្វ័យប្រវត្តិនេះអាចមានកំហុសឬការខ្វះភាពត្រឹមត្រូវខ្លះៗ។ ឯកសារដើមក្នុងភាសាតិជនដើមគួរត្រូវបានចាត់ទុកថាជា ប្រភពត្រឹមត្រូវមួយគត់។ សម្រាប់ព័ត៌មានសំខាន់ៗ ការបកប្រែដោយអ្នកជំនាញមនុស្សគឺត្រូវបានណែនាំ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសៗដែលខុសពីនេះអាចកើតមានពីការប្រើប្រាស់ការបកប្រែក្នុងរូបមន្តនេះឡើយ។\n\n" ] } ], "metadata": { "accelerator": "GPU", "colab": { "collapsed_sections": [], "name": "Recurrent_Neural_Networks.ipynb", "provenance": [] }, "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.7.1" } }, "nbformat": 4, "nbformat_minor": 1 }