{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Quantum Regressor\n", "\n", "## Quantum Doctor\n", "\n", "### How to train a hybrid-quantum neural network to predict diabetes progression in patients.\n", "\n", "In this tutorial you will learn how to create a hybrid neural network, which utilizes a quantum regression layer as its output. \n", "As our training dataset we will use a subset of the [diabetes toy dataset](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html) available via `scikit-learn`.\n", "\n", "## Table of contents:\n", "- [Dataset preparation and exploration](#dataset-preparation)\n", "- [Model creation](#model-creation)\n", "- [Model training and evaluation](#model-evaluation)\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import warnings\n", "warnings.simplefilter('ignore')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dataset preparation\n", "\n", "We can load our dataset via the `load_diabetes` method available from `sklearn.datasets` as it is one of the toy datasets provided by the library. \n", "You might notice that the $X$ values are already processed. This will save us time. \n", "We will only use 200 samples from the 442 total, 100 for training and 100 for evaluation." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "from sklearn.datasets import load_diabetes\n", "\n", "diabetes = load_diabetes()\n", "\n", "X = pd.DataFrame(diabetes.data[:200],columns=diabetes.feature_names)\n", "y = pd.Series(diabetes.target[:200])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The diabetes dataset consists of 10 numeric variables: age, sex (2 possible values), body mass index (*bmi*), average blood pressure (*bp*), as well as results of six blood serum measurements (described on the [sklearn dataset page](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset))." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "int64", "type": "integer" }, { "name": "age", "rawType": "float64", "type": "float" }, { "name": "sex", "rawType": "float64", "type": "float" }, { "name": "bmi", "rawType": "float64", "type": "float" }, { "name": "bp", "rawType": "float64", "type": "float" }, { "name": "s1", "rawType": "float64", "type": "float" }, { "name": "s2", "rawType": "float64", "type": "float" }, { "name": "s3", "rawType": "float64", "type": "float" }, { "name": "s4", "rawType": "float64", "type": "float" }, { "name": "s5", "rawType": "float64", "type": "float" }, { "name": "s6", "rawType": "float64", "type": "float" } ], "conversionMethod": "pd.DataFrame", "ref": "4ad250cf-a0e4-4a2f-9519-1742db7abc98", "rows": [ [ "0", "0.038075906433423026", "0.05068011873981862", "0.061696206518683294", "0.0218723855140367", "-0.04422349842444599", "-0.03482076283769895", "-0.04340084565202491", "-0.002592261998183278", "0.019907486170462722", "-0.01764612515980379" ], [ "1", "-0.0018820165277906047", "-0.044641636506989144", "-0.051474061238800654", "-0.02632752814785296", "-0.008448724111216851", "-0.019163339748222204", "0.07441156407875721", "-0.03949338287409329", "-0.0683315470939731", "-0.092204049626824" ], [ "2", "0.08529890629667548", "0.05068011873981862", "0.04445121333659049", "-0.00567042229275739", "-0.04559945128264711", "-0.03419446591411989", "-0.03235593223976409", "-0.002592261998183278", "0.002861309289833047", "-0.025930338989472702" ], [ "3", "-0.0890629393522567", "-0.044641636506989144", "-0.011595014505211082", "-0.03665608107540074", "0.01219056876179996", "0.02499059336410222", "-0.036037570043851025", "0.03430885887772673", "0.022687744966501246", "-0.009361911330134878" ], [ "4", "0.005383060374248237", "-0.044641636506989144", "-0.03638469220446948", "0.0218723855140367", "0.003934851612593237", "0.015596139510416171", "0.008142083605192267", "-0.002592261998183278", "-0.03198763948805312", "-0.04664087356364498" ] ], "shape": { "columns": 10, "rows": 5 } }, "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", "
agesexbmibps1s2s3s4s5s6
00.0380760.0506800.0616960.021872-0.044223-0.034821-0.043401-0.0025920.019907-0.017646
1-0.001882-0.044642-0.051474-0.026328-0.008449-0.0191630.074412-0.039493-0.068332-0.092204
20.0852990.0506800.044451-0.005670-0.045599-0.034194-0.032356-0.0025920.002861-0.025930
3-0.089063-0.044642-0.011595-0.0366560.0121910.024991-0.0360380.0343090.022688-0.009362
40.005383-0.044642-0.0363850.0218720.0039350.0155960.008142-0.002592-0.031988-0.046641
\n", "
" ], "text/plain": [ " age sex bmi bp s1 s2 s3 \\\n", "0 0.038076 0.050680 0.061696 0.021872 -0.044223 -0.034821 -0.043401 \n", "1 -0.001882 -0.044642 -0.051474 -0.026328 -0.008449 -0.019163 0.074412 \n", "2 0.085299 0.050680 0.044451 -0.005670 -0.045599 -0.034194 -0.032356 \n", "3 -0.089063 -0.044642 -0.011595 -0.036656 0.012191 0.024991 -0.036038 \n", "4 0.005383 -0.044642 -0.036385 0.021872 0.003935 0.015596 0.008142 \n", "\n", " s4 s5 s6 \n", "0 -0.002592 0.019907 -0.017646 \n", "1 -0.039493 -0.068332 -0.092204 \n", "2 -0.002592 0.002861 -0.025930 \n", "3 0.034309 0.022688 -0.009362 \n", "4 -0.002592 -0.031988 -0.046641 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The target variable is a quantitative measure of diabetes progression after one year." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 151.0\n", "1 75.0\n", "2 141.0\n", "3 206.0\n", "4 135.0\n", "dtype: float64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As usual we will create the training and evaluation subsets using `train_test_split`" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.5,random_state=42)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model creation\n", "\n", "### Quantum layer circuit\n", "\n", "A fairly simple QNN architecture will be used for the quantum layer, consisting of one input encoder applied at the beginning and end of the circuit and a RealAmplitudes block for the weights." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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dnEwCcek6D9hrMUF1WwHRIZJm20AP/+GT9t9QV1a/P16ZOfmwcbKEu++PqnSYYas4vttbO/fkPEaGiIiIiIiEiwGGiIiIiIiEiwGGiIiIiIiEiwGGiIiIiIiEiwGGiIiIiIiEiwGGiIiIiIiEiw+h4aIiIiIqIFRKBSQyWT6LkMnYrEYIpGo3tfLQENERERE1MDIZDJs3bpV32XoZOzYsZBI6j9esMsZEREREREJFgMNEREREREJFgMNEREREREJFgMNEREREREJFgMNEREREREJFgMNEREREREJFgMNEREREREJFgMNEREREREJFgMNEREREREJFgMNEREREREJFgMNERERERFVKycnB4WFhfouQ41E3wUQEREREVHdyM3NRXR0NGJiYhAbG4vc3FzIZDKYmJjAyckJnp6e8PT0RKtWrWBkVPm5juzsbHz66aewtLTEggULYGZmVo/vomoMNEREREREBkShUCAyMhL79+/H6dOnIZVKK502LCwMAODo6IhBgwahf//+aNKkico0ZWHmzp07AIBVq1Zh9uzZdfcGdNQoAk1aWhqWLVuGbdu2ITExEU5OThgzZgwWL16MWbNmYe3atVi5ciVmzpyp71LV2Hi6wHNsH7ToGwjrVs0gNjVBTlwq4nadwvXVuyEtKNJ3iVTH2AaIGjduA4hIF/fu3cOqVasQERGh03xpaWn4+++/sWXLFowePRqjRo2CRCJRCzN2dnYYP358XZReYwYfaMLDwzFkyBCkpqbC0tISfn5+SE5Oxrfffovo6Gikp6cDADp06KDfQivhPXEAfF8MwZ395xG97TgUUhmce/jjibefRasRPbB7+LuQFRbru0yqQ2wDRI0btwFEpA2FQoEDBw5g/fr1KCp69EWHlZUVevToAR8fH3h4eMDR0RFisRiFhYVITExETEwMrl69ivDwcCgUCkilUmzevBnnz5/HlClTsHbtWpUw8+GHH8LFxUVfb1Mjgw40aWlpGDFiBFJTUzF37lwsXLgQ1tbWAIBly5ZhwYIFkEgkEIlECAgI0HO1msXtPo0rK/9BSU6+ctit3/cjOzYFgW+Og/czA3Dz1316rJDqGtsAUePGbQARVUcul2PdunUIDQ1VDnN0dMS4cePQo0cPmJiYqM1jZWUFX19f+Pr6YujQobh37x727t2Lffv2QaFQIDY2FosWLYJCoQDQ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", "text/plain": [ "
" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "# QNN library integrating with PyTorch\n", "from qailab.circuit import build_circuit, RotationalEncoder, RealAmplitudesBlock\n", "from qailab.circuit.utils import assign_input_weight\n", "\n", "input_encoder = RotationalEncoder('x','input')\n", "qnn_circuit = build_circuit(\n", " 3,\n", " [\n", " input_encoder,\n", " RealAmplitudesBlock('weight'),\n", " input_encoder, # You can put the same block twice in different parts of the circuit. It will encode the same parameters\n", " ],\n", " measure_qubits=[0,1,2] # Measure all qubits\n", " )\n", "\n", "qnn_circuit.assign_parameters(assign_input_weight(qnn_circuit,[1,2,3],np.random.randint(0,9,12))).draw('mpl')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sequential neural network\n", "\n", "Our neural network will consist of two linear layers with ReLU activation functions, then a quantum layer, which outputs a single feature: the expected value of measurement from it's circuit. \n", "\n", "The expected value of a random variable can be expressed as $E[X] = \\sum_{i=0}^{n} P(X == X_i) * X_i$ \n", "Given that our measurement bitstrings can be interpreted as integers, the expected value of a parameterized quantum circuit becomes $E[X] = \\sum_{i=0}^{n} |\\braket{X_i|U(\\theta)|0}|^2 * \\text{integer}(X_i)$, where $X_i$ is a given measurement bitstring. \n", " \n", "Since we measure all 3 qubits in our QNN circuit, the expected value layer will output a value in the range of $[0,7]$. Our problem needs a higher range of numbers, therefore we will tell `ExpectedValueQLayer` to rescale the output." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Neural networks libraries\n", "import torch.nn as nn \n", "\n", "from qailab.torch import ExpectedValueQLayer,QModel\n", "from quantum_launcher.routines.qiskit_routines import AerBackend\n", "\n", "qlayer = ExpectedValueQLayer(\n", " qnn_circuit,\n", " rescale_output=(0,350), # Max target value in dataset + a bit more.\n", " backend=AerBackend('local_simulator')\n", " )\n", "\n", "sequential_net = nn.Sequential(\n", " nn.Linear(len(X.columns),64),\n", " nn.ReLU(),\n", " nn.Linear(64,qlayer.in_features),\n", " qlayer,\n", " \n", ")\n", "\n", "model = QModel(\n", " module=sequential_net,\n", " loss=nn.L1Loss(), # MAE loss\n", " optimizer_type='adam',\n", " learning_rate=0.001,\n", " batch_size=4,\n", " validation_fraction=0.1,\n", " epochs=20,\n", " metric=\"mse\"\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model training and results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Training\n", "\n", "To train our model we can simply call `QModel.fit()`" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 20/20 [03:20<00:00, 10.00s/epochs, epoch=20, loss=47.6, mse=3.38e+3]\n" ] } ], "source": [ "model.fit(X_train,y_train)\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below we can see how our model was performing during the 10 epochs of training." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "\n", "sns.lineplot(model.loss_history)\n", "\n", "plt.title('Loss history')\n", "plt.ylabel('Loss')\n", "plt.xlabel('Epoch')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a comparison we will also train a similar classical model." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "sequential_net_classical = nn.Sequential(\n", " nn.Linear(len(X.columns),64),\n", " nn.ReLU(),\n", " nn.Linear(64,3),\n", " nn.ReLU(),\n", " nn.Linear(3,1),\n", " nn.ReLU()\n", " \n", ")\n", "model_classical = QModel(\n", " module=sequential_net_classical,\n", " loss=nn.L1Loss(), # MAE loss\n", " optimizer_type='adam',\n", " learning_rate=0.001,\n", " batch_size=4,\n", " validation_fraction=0.1,\n", " epochs=20,\n", " metric=\"mse\"\n", " )" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 20/20 [00:02<00:00, 8.09epochs/s, epoch=20, loss=132, mse=97595.0]\n" ] } ], "source": [ "model_classical.fit(X,y)\n", "pass" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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wk4dMQzDZbvrAADALziMBQAALI2wAwAALI2wAwAALM2lYWfdunXq37+/oqOjZRiGMjIyym07evRoGYahWbNmOa3/6quvNGDAAEVERCgoKEjdu3fXJ598UreFAwCABsOlYaeoqEhxcXGaO3duhe3S09O1ZcsWRUdHX7Tt5ptv1rlz57RmzRrt2LFDcXFxuvnmm3X06NG6KhsAADQgLv26UHJyspKTkytsc+jQIY0bN06rVq1Sv379nLYdP35cX3/9tRYuXKhOnTpJkp566im9+OKL2rNnjyIjI+usdgAA0DC49Tk7drtdqampevDBB9WxY8eLtoeHh6tt27Z69dVXVVRUpHPnzmn+/Plq0qSJ4uPjXVAxAABwN279QzDTp0+Xl5eX7r333jK3G4ah1atXKyUlRY0aNZKHh4eaNGmilStXKjQ0tNx+S0pKVFJS4lguKCio9doBAIB7cNs9Ozt27NDzzz+vxYsXl3vhMNM0NWbMGDVp0kTr16/Xtm3blJKSov79++vIkSPl9j1t2jQFBwc7bjExMXU1DAAA4GKGaZqmq4uQzu+lSU9PV0pKiiRp1qxZGj9+vDw8fsljpaWl8vDwUExMjA4cOKCPP/5Yffr00c8//6ygoCBHuzZt2mjEiBH6+9//XuZzlbVnJyYmRvn5+U79AAAA91VQUKDg4OBKP7/d9jBWamqqevfu7bQuMTFRqampGj58uCSpuLhYkpwC0YVlu91ebt82m002m62WKwYAAO7IpWGnsLBQ2dnZjuWcnBxlZWUpLCxMzZs3V3h4uFN7b29vRUZGqm3btpKkbt26KTQ0VGlpaZo0aZL8/Pz0r3/9Szk5ORd9cwsAAPw+ufScne3bt6tz587q3LmzJGn8+PHq3LmzJk2aVKXHR0REaOXKlSosLNSNN96oLl26aMOGDVq2bJni4uLqsnQAANBAuM05O65U1WN+AADAfVT189ttv40FAABQGwg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA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LFmiZcuWyTAMGYahtWvXlnkY69NPP9XVV18tm82mqKgo/f3vf9e5c+cc23v06KF7771XDz30kMLCwhQZGakpU6ZU/x+ummq0Z+fpp59Wv379tHr1asdv7GzevFm5ubn68MMPa6246dOny8vLS/fee2+Z248ePXrRFda9vLwUFhamo0ePltvvtGnT9Nhjj9VanQAAN3amqOLtnjbJ878fh+fOSPaz5bc1PCRvv/P3TVM6W+y83SegWqUNGjRI48aN0yeffKJevXpJOn/0ZOXKlfrwww9VWFiovn37aurUqbLZbHr11VfVv39/7d+/X82bN6+0/8LCQt1888266aab9NprryknJ0f33XefUxu73a5mzZrpnXfeUXh4uDZt2qRRo0YpKipKgwcP1oQJE7R3714VFBRo0aJFkqSwsDAdPnzYqZ9Dhw6pb9++GjZsmF599VXt27dPI0eOlK+vr1OgWbJkicaPH6+tW7dq8+bNGjZsmK677jrddNNN1fq3q44ahZ0bbrhBX331lebOnat9+/ZJkm677TaNGjVKTz75pOO6WZdix44dev7557Vz504ZhnHJ/f3axIkTNX78eMdyQUGBYmJiavU5AABu4p+VnNIwaLHU8b+/EbfmcWnT7PLbRneWRq09f7/4R2lGK+ftU/KrVVpoaKiSk5O1dOlSR9h59913FRERoZ49e8rDw8Pp9+yeeOIJpaen6/3339fYsWMr7X/p0qWy2+1auHChfH191bFjR33//fe6++67HW28vb2ddgC0bNlSmzdv1ttvv63BgwcrMDBQfn5+KikpqfCw1YsvvqiYmBjNmTNHhmGoXbt2Onz4sB5++GFNmjRJHh7nDyZ16tRJkydPliS1adNGc+bM0ccff1ynYadGh7EkKTo6WlOnTtV7772n9957T08++aR+/vlnLVy4sFYKW79+vfLy8tS8eXN5eXnJy8tLBw8e1AMPPKDY2FhJ549L5uXlOT3u3Llz+umnnyqcEJvNpqCgIKcbAACuMHToUL333nsqKSmRJL3++uu644475OHhocLCQk2YMEHt27dXSEiIAgMDtXfvXn333XdV6nvv3r3q1KmTfH19HesuHJH5tblz5yo+Pl6NGzdWYGCgFixYUOXn+PVzdevWzWkHxXXXXafCwkLHb/JJuuh0l6ioqIs+y2tbjX9UsK6lpqaqd+/eTusS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mfnFF1+YAwYMMFu2bGmeOnXK0ceNN95ozp4927Fc2eveVSoa65kzZ8xbbrnFbNasmZmVleX0Gi4pKXH08duxVvZacJWKxnry5ElzwoQJ5ubNm82cnBxz9erV5lVXXWW2adPGPH36tKOPhjKvpln537FpmmZ+fr7p7+9vzps3r8w+Gsrc1hXCziWaPXu22bx5c9PHx8e8+uqrzS1btji23XDDDWZaWppT+7ffftu8/PLLTR8fH7Njx47m8uXL67nimpFU5m3RokWONr8d7/333+/4t2natKnZt29fc+fOnfVffDX9+c9/NqOiokwfHx/zD3/4g/nnP//ZzM7Odmy30rxesGrVKlOSuX///ou2NeR5/eSTT8r8u70wHrvdbj766KNm06ZNTZvNZvbq1euif4MWLVqYkydPdlpX0eveVSoaa05OTrmv4U8++cTRx2/HWtlrwVUqGmtxcbHZp08fs3Hjxqa3t7fZokULc+TIkReFloYyr6ZZ+d+xaZrm/PnzTT8/P/PEiRNl9tFQ5rauGKZpmnW66wgAAMCFOGcHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAABYGmEHAMpgGIYyMjJcXQaAWkDYAeB2hg0bJsMwLrolJSW5ujQADZCXqwsAgLIkJSVp0aJFTutsNpuLqgHQkLFnB4BbstlsioyMdLqFhoZKOn+Iad68eUpOTpafn58uu+wyvfvuu06P3717t2688Ub5+fkpPDxco0aNUmFhoVObV155RR07dpTNZlNUVJTGjh3rtP348eO69dZb5e/vrzZt2uj999+v20EDqBOEHQAN0qOPPqqBAwfq888/19ChQ3XHHXdo7969kqSioiIlJiYqNDRUn332md555x2tXr3aKczMmzdPY8aM0ahRo7R79269//77at26tdNzPPbYYxo8eLC++OIL9e3bV0OHDtVPP/1Ur+MEUAtcfSVSAPittLQ009PT0wwICHC6TZ061TRN05Rkjh492ukxCQkJ5t13322apmkuWLDADA0NNQsLCx3bly9fbnp4eDiufh0dHW0+8sgj5dYgyfzHP/7hWC4sLDQlmStWrKi1cQKoH5yzA8At9ezZU/PmzXNaFxYW5rjfrVs3p23dunVTVlaWJGnv3r2Ki4tTQECAY/t1110nu92u/fv3yzAMHT58WL169aqwhk6dOjnuBwQEKCgoSHl5eTUdEgAXIewAcEsBAQEXHVaqLX5+flVq5+3t7bRsGIbsdntdlASgDnHODoAGacuWLRctt2/fXpLUvn17ff755yoqKnJs37hxozw8PNS2bVs1atRIsbGx+vjjj+u1ZgCuwZ4dAG6ppKRER48edVrn5eWliIgISdI777yjLl26qHv37nr99de1bds2LVy4UJI0dOhQTZ48WWlpaZoyZYp++OEHjRs3TqmpqWratKkkacqUKRo9erSaNGmi5ORknTx5Uhs3btS4cePqd6AA6hxhB4BbWrlypaKiopzWtW3bVvv27ZN0/ptSb775pu655x5FRUXpjTfeUIcOHSRJ/v7+WrVqle677z517dpV/v7+GjhwoJ599llHX2lpaTp9+rSee+45TZgwQREREbr99tvrb4AA6o1hmqbp6iIAoDoMw1B6erpSUlJcXQqABoBzdgAAgKURdgAAgKVxzg6ABoej7wCqgz07AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0gg7AADA0v5/G9s573mehHIAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "\n", "sns.lineplot(model_classical.loss_history)\n", "\n", "plt.title('Loss history')\n", "plt.ylabel('Loss')\n", "plt.xlabel('Epoch')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model evaluation\n", "\n", "Let's compare the performance of our models on the test dataset." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Classical model error: 152.19\n", "Hybrid model error: 46.13027381896973\n" ] } ], "source": [ "from sklearn.metrics import mean_absolute_error\n", "\n", "classical_predictions = model_classical.predict(X_test)\n", "quantum_predictions = model.predict(X_test)\n", "\n", "print(f\"Classical model error: {mean_absolute_error(classical_predictions,y_test)}\")\n", "print(f\"Hybrid model error: {mean_absolute_error(quantum_predictions,y_test)}\")" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.12.3" } }, "nbformat": 4, "nbformat_minor": 2 }