{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "fv9OoQsMFk5A" }, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "V tomto zápisníku si ukážeme, jak:\n", "\n", "- připravit 2D časové řady pro trénování modelu SVM regresoru\n", "- implementovat SVR s RBF jádrem\n", "- vyhodnotit model pomocí grafů a MAPE\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Importování modulů\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": [ "## Příprava dat\n" ] }, { "cell_type": "markdown", "metadata": { "id": "8fywSjC6GsRz" }, "source": [ "### Načíst data\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": [] }, { "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": [] }, { "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": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nyní je potřeba připravit data pro trénink provedením filtrování a škálování vašich dat.\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": [ "Škálujte data tak, aby byla v rozsahu (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": [ "### Vytváření dat s časovými kroky\n" ] }, { "cell_type": "markdown", "metadata": { "id": "fdmxTZtOQ8xs" }, "source": [ "Pro náš SVR transformujeme vstupní data do formy `[batch, timesteps]`. Proto přetváříme existující `train_data` a `test_data` tak, aby existovala nová dimenze, která odkazuje na časové kroky. V našem příkladu bereme `timesteps = 5`. Vstupy do modelu jsou tedy data pro první 4 časové kroky a výstupem budou data pro 5. časový krok.\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": [] }, { "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": [ "### Proveďte predikci modelu\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": [] }, { "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": [ "## Predikce úplné datové sady\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**Prohlášení**: \nTento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o co největší přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Za autoritativní zdroj by měl být považován původní dokument v jeho původním jazyce. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné výklady vyplývající z použití tohoto překladu.\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" }, "coopTranslator": { "original_hash": "e86ce102239a14c44585623b9b924a74", "translation_date": "2025-09-04T07:38:57+00:00", "source_file": "7-TimeSeries/3-SVR/working/notebook.ipynb", "language_code": "cs" } }, "nbformat": 4, "nbformat_minor": 1 }