{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Variational quantum classifier\n", "\n", "- Trains a `VQCClassifier` on a synthetic dataset, on the `torch` backend.\n", "- Then `VQCRegressor`, the same circuit read as a value." ] }, { "cell_type": "markdown", "id": "6e675f82", "metadata": {}, "source": [ "### 1. Data\n", "\n", "- `make_classification`, 200 samples, 4 features, 2 classes.\n", "- `normalize=\"minmax\"` is fit on the train split only.\n", "- `AngleEmbedding` prescaling maps it to [0, pi] during `setup()`." ] }, { "cell_type": "code", "id": "4b9f82c6", "metadata": { "ExecuteTime": { "end_time": "2026-09-19T10:49:39.432753753Z", "start_time": "2026-09-19T10:49:39.403662618Z" } }, "source": [ "import numpy as np\n", "from sklearn.datasets import make_classification\n", "\n", "X, y = make_classification(\n", " n_samples=200,\n", " n_features=4,\n", " n_informative=4,\n", " n_redundant=0,\n", " n_classes=2,\n", " random_state=42,\n", ")" ], "outputs": [], "execution_count": 9 }, { "cell_type": "code", "id": "de5f8343", "metadata": { "ExecuteTime": { "end_time": "2026-09-19T10:49:39.511200937Z", "start_time": "2026-09-19T10:49:39.462107284Z" } }, "source": [ "from pyqit import DataModule, set_backend\n", "\n", "set_backend(\"torch\")\n", "\n", "dm = DataModule(\n", " X=X,\n", " y=y,\n", " normalize=\"minmax\",\n", " batch_size=16,\n", " split=(0.7, 0.15, 0.15),\n", " seed=42,\n", ")" ], "outputs": [], "execution_count": 10 }, { "cell_type": "markdown", "id": "db59580f", "metadata": {}, "source": [ "### 2. Model and training\n", "\n", "- 4 qubits, 3 layers, `SELAnsatz`, `AngleEmbedding`.\n", "- 15 epochs at lr 0.05.\n", "- `fit` returns a `TrainingHistory`." ] }, { "cell_type": "code", "id": "2ed25f29", "metadata": { "ExecuteTime": { "end_time": "2026-09-19T10:49:41.931095401Z", "start_time": "2026-09-19T10:49:39.525389444Z" } }, "source": [ "from pyqit import Trainer\n", "from pyqit.ansatzes import SELAnsatz\n", "from pyqit.core import AngleEmbedding\n", "from pyqit.models import VQCClassifier\n", "\n", "# Initialize the VQC\n", "model = VQCClassifier(\n", " n_qubits=4,\n", " n_layers=3,\n", " n_classes=2,\n", " ansatz=SELAnsatz,\n", " encoder=AngleEmbedding,\n", ")\n", "\n", "# Set up the Trainer\n", "trainer = Trainer(max_epochs=15, learning_rate=0.05)\n", "\n", "history = trainer.fit(model, datamodule=dm)" ], "outputs": [ { "data": { "text/plain": [ "\u001b[1;36m \u001b[0m\u001b[1;36mParameter \u001b[0m\u001b[1;36m \u001b[0m\u001b[1;36m \u001b[0m\u001b[1;36mValue \u001b[0m\u001b[1;36m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mModel Name \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1mVQCClassifier \u001b[0m\u001b[1m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mBackend \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1mTorch \u001b[0m\u001b[1m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mQubits \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1m4 \u001b[0m\u001b[1m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mAnsatz \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1mSELAnsatz \u001b[0m\u001b[1m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mEncoder \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1mAngleEmbedding\u001b[0m\u001b[1m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mTrainable Params \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1m36 \u001b[0m\u001b[1m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mDevice \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1mdefault.qubit \u001b[0m\u001b[1m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mDiff Method \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1mbackprop \u001b[0m\u001b[1m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mOptimizer \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1mADAM \u001b[0m\u001b[1m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mLearning Rate \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1m0.05 \u001b[0m\u001b[1m \u001b[0m\n", "\u001b[2m \u001b[0m\u001b[2mTrain / Val Samples \u001b[0m\u001b[2m \u001b[0m\u001b[1m \u001b[0m\u001b[1m140 / 30 \u001b[0m\u001b[1m \u001b[0m\n" ], "text/html": [ "
 Parameter             Value          \n",
       " Model Name            VQCClassifier  \n",
       " Backend               Torch          \n",
       " Qubits                4              \n",
       " Ansatz                SELAnsatz      \n",
       " Encoder               AngleEmbedding \n",
       " Trainable Params      36             \n",
       " Device                default.qubit  \n",
       " Diff Method           backprop       \n",
       " Optimizer             ADAM           \n",
       " Learning Rate         0.05           \n",
       " Train / Val Samples   140 / 30       \n",
       "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "\n" ], "text/html": [ "
\n",
       "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "GPU available: True (cuda), used: False\n", "TPU available: False, using: 0 TPU cores\n", "/home/aryan/PyQit/.venv/lib/python3.12/site-packages/lightning/pytorch/trainer/setup.py:175: GPU available but not used. You can set it by doing `Trainer(accelerator='gpu')`.\n", "💡 Tip: For seamless cloud logging and experiment tracking, try installing [litlogger](https://pypi.org/project/litlogger/) to enable LitLogger, which logs metrics and artifacts automatically to the Lightning Experiments platform.\n", "`Trainer(limit_val_batches=1.0)` was configured so 100% of the batches will be used..\n" ] }, { "data": { "text/plain": [ "Output()" ], "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, "model_id": "25c7c799264945e595bd01c9c6c86c5a" } }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "/home/aryan/PyQit/.venv/lib/python3.12/site-packages/lightning/pytorch/utilities/_pytree.py:21: \n", "`isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` \n", "instead.\n" ], "text/html": [ "
/home/aryan/PyQit/.venv/lib/python3.12/site-packages/lightning/pytorch/utilities/_pytree.py:21: \n",
       "`isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` \n",
       "instead.\n",
       "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "/home/aryan/PyQit/.venv/lib/python3.12/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:434: \n", "The 'val_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the \n", "`num_workers` argument` to `num_workers=15` in the `DataLoader` to improve performance.\n" ], "text/html": [ "
/home/aryan/PyQit/.venv/lib/python3.12/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:434: \n",
       "The 'val_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the \n",
       "`num_workers` argument` to `num_workers=15` in the `DataLoader` to improve performance.\n",
       "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "/home/aryan/PyQit/.venv/lib/python3.12/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:434: \n", "The 'train_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the \n", "`num_workers` argument` to `num_workers=15` in the `DataLoader` to improve performance.\n" ], "text/html": [ "
/home/aryan/PyQit/.venv/lib/python3.12/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:434: \n",
       "The 'train_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the \n",
       "`num_workers` argument` to `num_workers=15` in the `DataLoader` to improve performance.\n",
       "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "`Trainer.fit` stopped: `max_epochs=15` reached.\n" ] }, { "data": { "text/plain": [], "text/html": [ "
\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "\u001b[1;32m[\u001b[0m\u001b[1;32mTrainer\u001b[0m\u001b[1;32m]\u001b[0m Training complete.\n"
      ],
      "text/html": [
       "
[Trainer] Training complete.\n",
       "
\n" ] }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 11 }, { "cell_type": "markdown", "id": "778213e8", "metadata": {}, "source": [ "### 3. Loss curve\n", "\n", "- `history.as_dict()` returns the per-epoch metrics." ] }, { "cell_type": "code", "id": "28db8a54", "metadata": { "ExecuteTime": { "end_time": "2026-09-19T10:49:42.046318124Z", "start_time": "2026-09-19T10:49:41.937691322Z" } }, "source": [ "import matplotlib.pyplot as plt\n", "\n", "# Extract metrics from the history\n", "train_loss = history.as_dict()[\"train_loss\"]\n", "val_loss = history.as_dict()[\"val_loss\"]\n", "epochs = range(1, len(train_loss) + 1)\n", "\n", "plt.figure(figsize=(8, 5))\n", "plt.plot(epochs, train_loss, label=\"Train Loss\", marker=\"o\")\n", "plt.plot(epochs, val_loss, label=\"Validation Loss\", marker=\"o\")\n", "plt.title(\"VQC Training History\")\n", "plt.xlabel(\"Epoch\")\n", "plt.ylabel(\"Loss\")\n", "plt.legend()\n", "plt.grid(True)\n", "plt.show()" ], "outputs": [ { "data": { "text/plain": [ "
" ], "image/png": "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LPG+jRo14tFuPeyN9LvvLGD4S7EMemHw7Tl4EZHfkVZpEBFxUDVq1KBz504l/rVu3brEmOOpqfZmFyA+PoE//OEegoKCAOje7VEWL/6ACxcuAJCZmcmKFR/TvfuvjXTvXj15972F9mYXYO1XX5V4n3379tmbXYCt27YRHBz8+x2siMhtpDO8IiIO6kZzeAEy0tNLvE5LSwMgMDCAM2fOYLVaOfnztl+cPHmSgMBAAMxmM97e3hw/fvy675Odk1Pitc1mw2QylecwREQMpzO8IiJOzNPTq8RrLy9PALKysrDZbFy4cAEvr9+O8SI7KwuAgoICCgsLsVgslRFXRMQQanhFRJxYeHgYgT+frQXo0qUL586d4/jxVAB27txFTJcuJf5PTEwMO3bsBODq1atsTkykZ8/HSozx9va+zclFRCqPpjSIiDioa920BvDVunVcunQJgIsXc1m65EPef38RPnfeydAhgxn/vxMoLCwEYNLkyXz+9894e+4cvt26lU4dowkKqs8Lg3+92WzChL+y+tNVLF+2hH9+8SV3+vjQtWtXHu4QXTkHKiJym6nhFRFxQEePHWXjxk107typ1L7NiYn2hnfX7l3Exc2jc6eOeHp6MnjIUNatW28fe/jwd0R37MxTTz7BvfdGceDAQUaNHsPZs2ftY44dO0679h3o0+cpWrRowcmTJ+n9+BP2/QcOHCTzbGaJDCdOnGD9hvWIiDiDKn7+gVeNDiEiIjdvwoTxNGjQgH79BhgdRUTEoWkOr4iIiIi4NE1pEBFxUteaaiAiIqVpSoOIiIiIuDRNaRARERERl6aGV0RERERcmhpeEREREXFpanhFRERExKWp4RURERERl6aGV0RERERcmhpeEREREXFpanhFRERExKWp4RURERERl/ZvdFWjZHn+40AAAAAASUVORK5CYII=" }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 12 }, { "cell_type": "markdown", "id": "4e17db71", "metadata": {}, "source": [ "### 4. Evaluation\n", "\n", "- `predict` runs on the test split.\n", "- `return_format=\"numpy\"` forces numpy output on the torch backend." ] }, { "cell_type": "code", "id": "ebbb7b4c", "metadata": { "ExecuteTime": { "end_time": "2026-09-19T10:49:42.156544733Z", "start_time": "2026-09-19T10:49:42.052430429Z" } }, "source": [ "from sklearn.metrics import accuracy_score, confusion_matrix\n", "\n", "# Predict\n", "predictions = trainer.predict(model, datamodule=dm, return_format=\"numpy\")\n", "actuals = dm.y_test.astype(int)\n", "\n", "# Calculate Accuracy\n", "acc = accuracy_score(actuals, predictions)\n", "print(f\"Standalone VQC Test Accuracy: {acc * 100:.2f}%\")\n", "\n", "# Plot Confusion Matrix\n", "cm = confusion_matrix(actuals, predictions)\n", "plt.figure(figsize=(5, 4))\n", "plt.imshow(cm)\n", "plt.title(\"Standalone VQC Confusion Matrix\")\n", "plt.xlabel(\"Predicted Label\")\n", "plt.ylabel(\"True Label\")\n", "\n", "for i in range(cm.shape[0]):\n", " for j in range(cm.shape[1]):\n", " plt.text(j, i, cm[i, j], ha=\"center\", va=\"center\")\n", "plt.xticks(np.arange(cm.shape[1]))\n", "plt.yticks(np.arange(cm.shape[0]))\n", "\n", "plt.colorbar()\n", "plt.tight_layout()\n", "plt.show()" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Standalone VQC Test Accuracy: 83.33%\n" ] }, { "data": { "text/plain": [ "
" ], "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Variational quantum regressor\n", "\n", "- `VQCRegressor` reads the same circuit as one value: the parity `` in [-1, 1], then a trained `scale * + offset`.\n", "- The default `loss_fn=\"mse\"` applies. Accuracy is recorded as NaN for a regressor.\n", "- Target: `sin(pi * x)` on one feature. `minmax` and `AngleEmbedding` prescaling map x to [0, pi]." ] }, { "cell_type": "code", "metadata": {}, "source": [ "from pyqit.models import VQCRegressor\n", "\n", "X_r = np.linspace(-1, 1, 80).reshape(-1, 1)\n", "y_r = np.sin(np.pi * X_r).ravel()\n", "\n", "dm_r = DataModule(\n", " X=X_r, y=y_r, normalize=\"minmax\", batch_size=16, split=(0.7, 0.15, 0.15), seed=42\n", ")\n", "\n", "regressor = VQCRegressor(n_qubits=2, n_layers=3)\n", "trainer_r = Trainer(max_epochs=30, learning_rate=0.05)\n", "history_r = trainer_r.fit(regressor, datamodule=dm_r)" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- `predict` returns one value per row, no thresholding.\n", "- `dm_r.X_test` is the prescaled input, so the x axis is in [0, pi]." ] }, { "cell_type": "code", "metadata": {}, "source": [ "preds_r = trainer_r.predict(regressor, datamodule=dm_r, return_format=\"numpy\")\n", "print(f\"Test MSE: {np.mean((preds_r - dm_r.y_test) ** 2):.4f}\")\n", "\n", "order = np.argsort(dm_r.X_test[:, 0])\n", "plt.plot(dm_r.X_test[order, 0], dm_r.y_test[order], \"o\", label=\"target\")\n", "plt.plot(dm_r.X_test[order, 0], preds_r[order], \"x\", label=\"prediction\")\n", "plt.xlabel(\"x (prescaled)\")\n", "plt.ylabel(\"y\")\n", "plt.legend()\n", "plt.show()" ], "execution_count": null, "outputs": [] } ], "metadata": { "kernelspec": { "display_name": ".venv (3.12.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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }