{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Quantum Kernel Machine Learning\n", "\n", "## Overview\n", "\n", "The general task of machine learning is to find and study patterns in data. For many datasets, the datapoints are better understood in a higher dimensional feature space. This is the fundamental principle behind a series of machine learning algorithms known as *kernel methods*.\n", "\n", "In this notebook, you will learn how to define quantum kernels using `qiskit-machine-learning` and how these can be plugged into different algorithms to solve classification and clustering problems.\n", "\n", "All examples used in this tutorial are based on this reference paper: [_Supervised learning with quantum enhanced feature spaces_](https://arxiv.org/pdf/1804.11326.pdf).\n", "\n", "The content is structured as follows:\n", "\n", "1. [Introduction](#1.-Introduction)\n", "2. [Classification](#2.-Classification)\n", "3. [Clustering](#3.-Clustering)\n", "4. [Kernel Principal Components Analysis](#4.-Kernel-Principal-Component-Analysis)\n", "5. [Conclusion](#5.-Conclusion)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Introduction\n", "\n", "### 1.1. Kernel Methods for Machine Learning\n", "\n", "Kernel methods are a collection of pattern analysis algorithms that use kernel functions to operate in a high-dimensional feature space. The best-known application of kernel methods is in **Support Vector Machines (SVMs)**, supervised learning algorithms commonly used for classification tasks. The main goal of SVMs is to find decision boundaries to separate a given set of data points into classes. When these data spaces are not linearly separable, SVMs can benefit from the use of kernels to find these boundaries.\n", "\n", "Formally, decision boundaries are hyperplanes in a high dimensional space. The kernel function implicitly maps input data into this higher dimensional space, where it can be easier to solve the initial problem. In other words, kernels may allow data distributions that were originally non-linearly separable to become a linearly separable problem. This is an effect known as the \"kernel trick\".\n", "\n", "There are use-cases for kernel-based unsupervised algorithms too, for example, in the context of clustering. **Spectral Clustering** is a technique where data points are treated as nodes of a graph, and the clustering task is viewed as a graph partitioning problem where nodes are mapped to a space where they can be easily segregated to form clusters.\n", "\n", "### 1.2. Kernel Functions\n", "\n", "Mathematically, kernel functions follow:\n", "\n", "$k(\\vec{x}_i, \\vec{x}_j) = \\langle f(\\vec{x}_i), f(\\vec{x}_j) \\rangle$\n", "\n", "where \n", "* $k$ is the kernel function\n", "* $\\vec{x}_i, \\vec{x}_j$ are $n$ dimensional inputs\n", "* $f$ is a map from $n$-dimension to $m$-dimension space and \n", "* $\\langle a,b \\rangle$ denotes the inner product\n", "\n", "When considering finite data, a kernel function can be represented as a matrix: \n", "\n", "$K_{ij} = k(\\vec{x}_i,\\vec{x}_j)$.\n", "\n", "### 1.3. Quantum Kernels\n", "\n", "The main idea behind quantum kernel machine learning is to leverage quantum feature maps to perform the kernel trick. In this case, the quantum kernel is created by mapping a classical feature vector $\\vec{x}$ to a Hilbert space using a quantum feature map $\\phi(\\vec{x})$. Mathematically:\n", "\n", "$K_{ij} = \\left| \\langle \\phi(\\vec{x}_i)| \\phi(\\vec{x}_j) \\rangle \\right|^{2}$\n", "\n", "where \n", "* $K_{ij}$ is the kernel matrix\n", "* $\\vec{x}_i, \\vec{x}_j$ are $n$ dimensional inputs\n", "* $\\phi(\\vec{x})$ is the quantum feature map\n", "* $\\left| \\langle a|b \\rangle \\right|^{2}$ denotes the overlap of two quantum states $a$ and $b$\n", "\n", "Quantum kernels can be plugged into common classical kernel learning algorithms such as SVMs or clustering algorithms, as you will see in the examples below. They can also be leveraged in new quantum kernel methods like [QSVC](https://qiskit.org/ecosystem/machine-learning/stubs/qiskit_machine_learning.algorithms.QSVC.html) class provided by `qiskit-machine-learning` which is explored in this tutorial, and other methods as shown in later tutorials on [Pegasos QSVC](07_pegasos_qsvc.ipynb) and [Quantum Kernel Training](08_quantum_kernel_trainer.ipynb).\n", "\n", "***\n", "\n", "Before introducing any example, we set up the global seed to ensure reproducibility:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from qiskit_algorithms.utils import algorithm_globals\n", "\n", "algorithm_globals.random_seed = 12345" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Classification\n", "\n", "This section illustrates a quantum kernel classification workflow using `qiskit-machine-learning`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1. Defining the dataset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this example, we will use the _ad hoc dataset_ as described in the reference [paper](https://arxiv.org/pdf/1804.11326.pdf). \n", "\n", "We can define the dataset dimension and get our train and test subsets:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from qiskit_machine_learning.datasets import ad_hoc_data\n", "\n", "adhoc_dimension = 2\n", "train_features, train_labels, test_features, test_labels, adhoc_total = ad_hoc_data(\n", " training_size=20,\n", " test_size=5,\n", " n=adhoc_dimension,\n", " gap=0.3,\n", " plot_data=False,\n", " one_hot=False,\n", " include_sample_total=True,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This dataset is two-dimensional, the two features are represented by the $x$ and $y$ coordinates, and it has two class labels: A and B. We can plot it and see what the distribution looks like. We define utility functions to plot the dataset." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "\n", "def plot_features(ax, features, labels, class_label, marker, face, edge, label):\n", " # A train plot\n", " ax.scatter(\n", " # x coordinate of labels where class is class_label\n", " features[np.where(labels[:] == class_label), 0],\n", " # y coordinate of labels where class is class_label\n", " features[np.where(labels[:] == class_label), 1],\n", " marker=marker,\n", " facecolors=face,\n", " edgecolors=edge,\n", " label=label,\n", " )\n", "\n", "\n", "def plot_dataset(train_features, train_labels, test_features, test_labels, adhoc_total):\n", "\n", " plt.figure(figsize=(5, 5))\n", " plt.ylim(0, 2 * np.pi)\n", " plt.xlim(0, 2 * np.pi)\n", " plt.imshow(\n", " np.asmatrix(adhoc_total).T,\n", " interpolation=\"nearest\",\n", " origin=\"lower\",\n", " cmap=\"RdBu\",\n", " extent=[0, 2 * np.pi, 0, 2 * np.pi],\n", " )\n", "\n", " # A train plot\n", " plot_features(plt, train_features, train_labels, 0, \"s\", \"w\", \"b\", \"A train\")\n", "\n", " # B train plot\n", " plot_features(plt, train_features, train_labels, 1, \"o\", \"w\", \"r\", \"B train\")\n", "\n", " # A test plot\n", " plot_features(plt, test_features, test_labels, 0, \"s\", \"b\", \"w\", \"A test\")\n", "\n", " # B test plot\n", " plot_features(plt, test_features, test_labels, 1, \"o\", \"r\", \"w\", \"B test\")\n", "\n", " plt.legend(bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n", " plt.title(\"Ad hoc dataset\")\n", "\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we actually plot the dataset for classification:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "nbsphinx-thumbnail" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhsAAAHBCAYAAADAanlpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbpklEQVR4nO3de3xT9f0/8NdJ0oaWXqBIbZFC0RYsViwIs8AQnFwKlJvDogMH6vbFfVGHwL5SuqnwA4qbbDr3la8gFx0oVsaltpOLFy5DBEQLFDspEyi6dqAgAWoDST6/P9KGpk2TnCYn5yR5PR+PPGhPTk7e5+TSN5/P+/P5SEIIASIiIiKF6NQOgIiIiEIbkw0iIiJSFJMNIiIiUhSTDSIiIlIUkw0iIiJSFJMNIiIiUhSTDSIiIlIUkw0iIiJSFJMNIiIiUhSTDdKMP//5z5AkCZmZmbIet2bNGkiShFOnTrndb9q0aYiJifEhQuVNmzYNqamprXrsK6+8gjVr1vg1Hl8sXrwYmzdvVjsMItIAJhukGatWrQIAHDt2DPv371c5muDDZIOItIrJBmnCp59+isOHD2P06NEAgJUrV6ocERER+QuTDdKEhuRiyZIlGDBgANavX4/a2tpm+33yyScYOHAg2rRpg06dOiE/Px/Xrl2T9VwnTpzAqFGjEBMTg5SUFMyePRtms9lpn/Pnz+O///u/cdNNNyEyMhI333wzCgoKmu1ns9nw8ssvIysrC1FRUWjXrh2ys7NRXFzsMY41a9agR48eMBqNyMjIwBtvvOFyv/nz5+Ouu+5CQkIC4uLi0KdPH6xcuRKN11BMTU3FsWPHsGvXLkiSBEmSHN0xdXV1mD17NrKyshAfH4+EhAT0798fW7ZsafZc77zzDu666y7Ex8cjOjoaN998Mx555BGnfUwmE+bMmYNu3bohMjISN910E2bOnIkrV6449pEkCVeuXMHrr7/uiGfIkCEerwkRhSaD2gEQ/fDDD3jrrbfQr18/ZGZm4pFHHsEvfvELvPPOO5g6dapjvy+++AL33nsvUlNTsWbNGkRHR+OVV17Bm2++6fVzXbt2DWPHjsWjjz6K2bNnY/fu3fh//+//IT4+Hs888wwA+x/ne+65B//6178wf/589OrVC3v27EFhYSHKyspQWlrqON60adOwdu1aPProo1iwYAEiIyPx2WefeawfWbNmDR5++GGMGzcOS5cuxcWLF/Hcc8/BbDZDp3P+P8CpU6cwffp0dOnSBYA94XriiSfwzTffOGLetGkTJk6ciPj4eLzyyisAAKPRCAAwm804f/485syZg5tuuglXr17F+++/j/vuuw+rV6/Gz3/+cwDAvn37MGnSJEyaNAnPPfcc2rRpg9OnT+PDDz90xFJbW4vBgwfj66+/xrx589CrVy8cO3YMzzzzDI4ePYr3338fkiRh3759+MlPfoJ77rkHv/vd7wAAcXFxXr9ORBRiBJHK3njjDQFA/N///Z8QQohLly6JmJgYMWjQIKf9Jk2aJKKiokRNTY1jm8ViEbfeeqsAIE6ePOn2eaZOnSoAiKKiIqfto0aNEj169HD8/n//938u93v++ecFALF9+3YhhBC7d+8WAERBQYGs87VaraJTp06iT58+wmazObafOnVKREREiK5du7p97LVr18SCBQtEhw4dnB5/2223icGDB3t8fovFIq5duyYeffRR0bt3b8f2F154QQAQ33//fYuPLSwsFDqdThw8eNBp+4YNGwQA8fe//92xrW3btmLq1Kke4yGi0MduFFLdypUrERUVhQceeAAAEBMTg/vvvx979uxBZWWlY7+PPvoI9957L2688UbHNr1ej0mTJnn9XJIkYcyYMU7bevXqhdOnTzt+//DDD9G2bVtMnDjRab9p06YBAD744AMAwHvvvQcAmDFjhtfPDwBffvkl/v3vf+NnP/sZJElybO/atSsGDBjQbP8PP/wQQ4cORXx8PPR6PSIiIvDMM8/gu+++w9mzZ716znfeeQcDBw5ETEwMDAYDIiIisHLlSlRUVDj26devHwAgLy8PRUVF+Oabb5odp6SkBJmZmcjKyoLFYnHcRowYAUmSsHPnTlnXgojCA5MNUtWJEyewe/dujB49GkIIfP/99/j+++8df+gbRqgAwHfffYekpKRmx3C1rSXR0dFo06aN0zaj0Yi6urpmz9M4EQCAxMREGAwGfPfddwCAc+fOQa/Xy3r+huO3FHfTbQcOHMDw4cMBACtWrMDevXtx8OBBFBQUALB3QXmyceNG5OXl4aabbsLatWuxb98+HDx4EI888ojTed99993YvHkzLBYLfv7zn6Nz587IzMzEW2+95djnP//5D44cOYKIiAinW2xsLIQQ+Pbbb2VdCyIKD6zZIFWtWrUK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WRZqMR3n0D5nGLBvH3DpErBvH9qPGIrpOIcs1KodIhERhTDZycYf//hHPProo/jFL36BjIwMvPjii0hJScGyZcuUiI98ZbUiz2ACcnMhbdnitLaDVFwMjB6NPIMJEjhPABERKUNWN8rVq1dx6NAhzJ0712n78OHD8fHHH7t8jNlshtl8ven+4sWLAIBLly7JjdV1TFCuQMtkMrm9X1jdD3lz93hPj/VVw3Pr9u6F0WLGpZkzgcuXm+84cyYMpaVIwQ84gTZ+e94GSp6np9cnVPjzPe7re1ormp6Hlr8HlHxuX/h6zVobW8N3PydCCzNChm+++UYAEHv37nXavmjRItG9e3eXj3n22WcFAN5444033nhz3M6cOSPnzw8FuVYViDZdB0AI0eLaAPn5+Zg1a5bj9++//x5du3ZFVVUV4uPjW/P0QcdkMiElJQVnzpxBXFyc2uEEBM85PM4ZCM/z5jm3/pyFELh06RI6derkx+hI62QlGzfccAP0ej1qamqctp89exY33nijy8cYjUYYjcZm2+Pj48PmQ9ogLi6O5xwGwvGcgfA8b55z64TLfzTpOlkFopGRkbjzzjuxY8cOp+07duzAgAED/BoYERERhQbZ3SizZs3CQw89hL59+6J///5Yvnw5qqqq8NhjjykRHxEREQU52cnGpEmT8N1332HBggWorq5GZmYm/v73v6Nr165ePd5oNOLZZ5912bUSqnjO4SEczxkIz/PmORPJIwnB8UdERESkHC7ERkRERIpiskFERESKYrJBREREimKyQURERIoKaLLxyiuvoFu3bmjTpg3uvPNO7NmzJ5BPH3C7d+/GmDFj0KlTJ0iShM2bN6sdkuIKCwvRr18/xMbGIjExEePHj8eXX36pdliKWrZsGXr16uWY7Kh///5477331A4roAoLCyFJEmbOnKl2KIp67rnnIEmS0y0pKUntsBT3zTffYMqUKejQoQOio6ORlZWFQ4cOqR0WBZGAJRvhuDT9lStXcMcdd+Avf/mL2qEEzK5duzBjxgx88skn2LFjBywWC4YPH44rV66oHZpiOnfujCVLluDTTz/Fp59+ip/85CcYN24cjh07pnZoAXHw4EEsX74cvXr1UjuUgLjttttQXV3tuB09elTtkBR14cIFDBw4EBEREXjvvffwxRdfYOnSpWjXrp3aoVEwCdQiLD/60Y/EY4895rTt1ltvFXPnzg1UCKoCIDZt2qR2GAF39uxZAUDs2rVL7VACqn379uK1115TOwzFXbp0SaSnp4sdO3aIwYMHi1//+tdqh6SoZ599Vtxxxx1qhxFQTz/9tPjxj3+sdhgU5ALSstGwNP3w4cOdtrtbmp5Cw8WLFwEACQkJKkcSGFarFevXr8eVK1fQv39/tcNR3IwZMzB69GgMHTpU7VACprKyEp06dUK3bt3wwAMP4KuvvlI7JEUVFxejb9++uP/++5GYmIjevXtjxYoVaodFQSYgyca3334Lq9XabLG2G2+8sdmibhQ6hBCYNWsWfvzjHyMzM1PtcBR19OhRxMTEwGg04rHHHsOmTZvQs2dPtcNS1Pr16/HZZ5+hsLBQ7VAC5q677sIbb7yBbdu2YcWKFaipqcGAAQPw3XffqR2aYr766issW7YM6enp2LZtGx577DE8+eSTeOONN9QOjYJIq5aYby05S9NT8Hv88cdx5MgR/OMf/1A7FMX16NEDZWVl+P777/G3v/0NU6dOxa5du0I24Thz5gx+/etfY/v27WjTpo3a4QTMyJEjHT/ffvvt6N+/P2655Ra8/vrrmDVrloqRKcdms6Fv375YvHgxAKB37944duwYli1bhp///OcqR0fBIiAtG61Zmp6C2xNPPIHi4mJ89NFH6Ny5s9rhKC4yMhJpaWno27cvCgsLcccdd+Cll15SOyzFHDp0CGfPnsWdd94Jg8EAg8GAXbt24c9//jMMBgOsVqvaIQZE27Ztcfvtt6OyslLtUBSTnJzcLGnOyMgI6eJ+8r+AJBtcmj58CCHw+OOPY+PGjfjwww/RrVs3tUNShRACZrNZ7TAUc++99+Lo0aMoKytz3Pr27YvJkyejrKwMer1e7RADwmw2o6KiAsnJyWqHopiBAwc2G75+/PhxrxffJAIC2I0SjkvTX758GSdOnHD8fvLkSZSVlSEhIQFdunRRMTLlzJgxA2+++Sa2bNmC2NhYR2tWfHw8oqKiVI5OGfPmzcPIkSORkpKCS5cuYf369di5cye2bt2qdmiKiY2NbVaH07ZtW3To0CGk63PmzJmDMWPGoEuXLjh79iwWLlwIk8mEqVOnqh2aYp566ikMGDAAixcvRl5eHg4cOIDly5dj+fLlaodGwSSQQ1/+93//V3Tt2lVERkaKPn36hPxwyI8++kgAaHabOnWq2qEpxtX5AhCrV69WOzTFPPLII473dceOHcW9994rtm/frnZYARcOQ18nTZokkpOTRUREhOjUqZO47777xLFjx9QOS3HvvvuuyMzMFEajUdx6661i+fLlaodEQYZLzBMREZGiuDYKERERKYrJBhERESmKyQYREREpiskGERERKYrJBhERESmKyQYREREpiskGERERKYrJBhERESmKyQYREREpiskGERERKYrJBhERESmKyQYREREp6v8DsWk1Aw2l3c4AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_dataset(train_features, train_labels, test_features, test_labels, adhoc_total)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2. Defining the quantum kernel\n", "\n", "The next step is to create a quantum kernel instance that will help classify this data. \n", "\n", "We use the [FidelityQuantumKernel](https://qiskit.org/ecosystem/machine-learning/stubs/qiskit_machine_learning.kernels.FidelityQuantumKernel.html) class, and pass two input arguments to its constructor: \n", "\n", "1. `feature_map`: in this case, a two-qubit [ZZFeatureMap](https://qiskit.org/documentation/stubs/qiskit.circuit.library.ZZFeatureMap.html).\n", "\n", "2. `fidelity`: in this case, the [ComputeUncompute](https://qiskit.org/ecosystem/algorithms/stubs/qiskit_algorithms.state_fidelities.ComputeUncompute.html) fidelity subroutine that leverages the [Sampler](https://qiskit.org/documentation/stubs/qiskit.primitives.Sampler.html) primitive.\n", "\n", "**NOTE:** If you don't pass a `Sampler` or `Fidelity` instance, then the instances of the reference `Sampler` and `ComputeUncompute` classes (found in `qiskit.primitives`) will be created by default." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from qiskit.circuit.library import ZZFeatureMap\n", "from qiskit.primitives import Sampler\n", "from qiskit_algorithms.state_fidelities import ComputeUncompute\n", "from qiskit_machine_learning.kernels import FidelityQuantumKernel\n", "\n", "adhoc_feature_map = ZZFeatureMap(feature_dimension=adhoc_dimension, reps=2, entanglement=\"linear\")\n", "\n", "sampler = Sampler()\n", "\n", "fidelity = ComputeUncompute(sampler=sampler)\n", "\n", "adhoc_kernel = FidelityQuantumKernel(fidelity=fidelity, feature_map=adhoc_feature_map)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.3. Classification with SVC\n", "The quantum kernel can now be plugged into classical kernel methods, such as the [SVC](https://scikit-learn.org/stable/modules/svm.html) algorithm from `scikit-learn`. This algorithm allows us to define a [custom kernel](https://scikit-learn.org/stable/modules/svm.html#custom-kernels) in two ways:\n", "\n", "1. by providing the kernel as a **callable function**\n", "2. by precomputing the **kernel matrix**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Kernel as a callable function\n", "\n", "We define a SVC model and directly pass the `evaluate` function of the quantum kernel as a callable. Once the model is created, we train it by calling the `fit` method on the training dataset and evaluate the model for accuracy with `score`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Callable kernel classification test score: 1.0\n" ] } ], "source": [ "from sklearn.svm import SVC\n", "\n", "adhoc_svc = SVC(kernel=adhoc_kernel.evaluate)\n", "\n", "adhoc_svc.fit(train_features, train_labels)\n", "\n", "adhoc_score_callable_function = adhoc_svc.score(test_features, test_labels)\n", "\n", "print(f\"Callable kernel classification test score: {adhoc_score_callable_function}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Precomputed kernel matrix\n", "\n", "Instead of passing a function of the quantum kernel as a callable, we can also precompute training and testing kernel matrices before passing them to the `scikit-learn` `SVC` algorithm. \n", "\n", "To extract the train and test matrices, we can call `evaluate` on the previously defined kernel and visualize them graphically as follows:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "adhoc_matrix_train = adhoc_kernel.evaluate(x_vec=train_features)\n", "adhoc_matrix_test = adhoc_kernel.evaluate(x_vec=test_features, y_vec=train_features)\n", "\n", "fig, axs = plt.subplots(1, 2, figsize=(10, 5))\n", "\n", "axs[0].imshow(\n", " np.asmatrix(adhoc_matrix_train), interpolation=\"nearest\", origin=\"upper\", cmap=\"Blues\"\n", ")\n", "axs[0].set_title(\"Ad hoc training kernel matrix\")\n", "\n", "axs[1].imshow(np.asmatrix(adhoc_matrix_test), interpolation=\"nearest\", origin=\"upper\", cmap=\"Reds\")\n", "axs[1].set_title(\"Ad hoc testing kernel matrix\")\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To use these matrices, we set the `kernel` parameter of a new `SVC` instance to `\"precomputed\"`. We train the classifier by calling `fit` with the training matrix and training dataset. Once the model is trained, we evaluate it using the test matrix on the test dataset." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Precomputed kernel classification test score: 1.0\n" ] } ], "source": [ "adhoc_svc = SVC(kernel=\"precomputed\")\n", "\n", "adhoc_svc.fit(adhoc_matrix_train, train_labels)\n", "\n", "adhoc_score_precomputed_kernel = adhoc_svc.score(adhoc_matrix_test, test_labels)\n", "\n", "print(f\"Precomputed kernel classification test score: {adhoc_score_precomputed_kernel}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.4. Classification with QSVC\n", "\n", "`QSVC` is an alternative training algorithm provided by `qiskit-machine-learning` for convenience. It is an extension of `SVC` that takes in a quantum kernel instead of the `kernel.evaluate` method shown before." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "QSVC classification test score: 1.0\n" ] } ], "source": [ "from qiskit_machine_learning.algorithms import QSVC\n", "\n", "qsvc = QSVC(quantum_kernel=adhoc_kernel)\n", "\n", "qsvc.fit(train_features, train_labels)\n", "\n", "qsvc_score = qsvc.score(test_features, test_labels)\n", "\n", "print(f\"QSVC classification test score: {qsvc_score}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.5. Evaluation of models used for classification" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Classification Model | Accuracy Score\n", "---------------------------------------------------------\n", "SVC using kernel as a callable function | 1.00\n", "SVC using precomputed kernel matrix | 1.00\n", "QSVC | 1.00\n" ] } ], "source": [ "print(f\"Classification Model | Accuracy Score\")\n", "print(f\"---------------------------------------------------------\")\n", "print(f\"SVC using kernel as a callable function | {adhoc_score_callable_function:10.2f}\")\n", "print(f\"SVC using precomputed kernel matrix | {adhoc_score_precomputed_kernel:10.2f}\")\n", "print(f\"QSVC | {qsvc_score:10.2f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As the classification dataset is small, we find that the three models achieve 100% accuracy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Clustering\n", "\n", "The second workflow in this tutorial focuses on a clustering task using `qiskit-machine-learning` and the spectral clustering algorithm from `scikit-learn`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1. Defining the dataset\n", "\n", "We will once again use the _ad hoc dataset_, but now generated with a higher gap of `0.6` (previous example: `0.3`) between the two classes. \n", "\n", "Note that clustering falls under the category of unsupervised machine learning, so a test dataset is not required." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "adhoc_dimension = 2\n", "train_features, train_labels, test_features, test_labels, adhoc_total = ad_hoc_data(\n", " training_size=25,\n", " test_size=0,\n", " n=adhoc_dimension,\n", " gap=0.6,\n", " plot_data=False,\n", " one_hot=False,\n", " include_sample_total=True,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " We plot the clustering dataset below:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfYAAAHBCAYAAACblJmpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABKgUlEQVR4nO3dfVxUZd4/8M+BgVGUYYU0MBUs0CgkNSuETSvNNFCp26wtS3vYtc3aTWt/iXSXFjo9b7t3adma5q1m9oQmm5ml1hqWWoSad0LlQwlqPjCoMToz1++PYUYGBmYOM2fOmTOf9+vFC+Zw5sw1M2f4cq7vdX0vSQghQERERLoQpXYDiIiIKHgY2ImIiHSEgZ2IiEhHGNiJiIh0hIGdiIhIRxjYiYiIdISBnYiISEcY2ImIiHSEgZ2IiEhHGNjDwD//+U9IkoSsrCxZ91u0aBEkScKePXva3G/SpEno3LlzAC1U3qRJk5CWltau+86dOxeLFi0KansCMWfOHJSWlvq9/549e5Cfn4/ExERIkoQHH3xQsbb566qrrsJVV12l2PGVfs8kScLMmTMVOz6RmgxqN4B8e/311wEAO3fuxJdffokrrrhC5RaFl7lz5+Kcc87BpEmT1G4KAGdgHzduHAoLC/3af+rUqfjyyy/x+uuvIzk5GSkpKco2UAOUfs/Ky8vRo0cPRY5NpDZesWvc1q1b8e233yI/Px8AsGDBApVbRKG2Y8cOXH755SgsLEROTg5SU1MDOp7dbofVag1S68KHEAK//fYbACAnJ4eBnXSLgV3jXIH8qaeeQm5uLpYvX45Tp0612G/z5s3Iy8tDhw4d0L17dxQVFeHMmTOyHqu6uhrXX389OnfujJ49e+Khhx5qEQCOHj2K++67D+eddx5iY2Nx/vnno7i4uMV+DocD//M//4P+/fujY8eO+N3vfoecnBysWrXKZzsWLVqEvn37wmg0IjMzE4sXL/a636xZs3DFFVcgMTERJpMJAwcOxIIFC9B0XaO0tDTs3LkTGzduhCRJkCTJ3aXf0NCAhx56CP3790dCQgISExMxePBgrFy5ssVjvf3227jiiiuQkJCAuLg4nH/++bjrrrs89rFYLHj44YfRu3dvxMbG4rzzzsODDz6IkydPuveRJAknT57EG2+84W5Pa13aGzZsgCRJqK6uxocffuje35Va2bdvHyZMmIBu3bq5X6vnn38eDofDfYw9e/ZAkiQ888wzKCkpQe/evWE0GrF+/fpWX//2vHeutm7YsMFju+vxm3ar//jjj7jlllvQvXt3GI1GnHvuuRg2bBgqKioAtP2e+fs6u17r+++/H6+88goyMzNhNBrxxhtvuH/XtCvelbZav349/vznP+Occ85BUlISbrzxRhw4cMDjuFarFQ899BCSk5MRFxeHIUOGYNu2bUhLS9NMrxBFNnbFa9hvv/2GN998E5dddhmysrJw11134Z577sHbb7+NiRMnuvf77rvvMGzYMKSlpWHRokWIi4vD3LlzsWzZMr8f68yZMxgzZgzuvvtuPPTQQ/jss8/w5JNPIiEhAY899hgAZyC8+uqr8cMPP2DWrFnIzs7G559/DrPZjIqKCpSVlbmPN2nSJCxZsgR33303nnjiCcTGxuLrr7/2me9ftGgR7rzzTowdOxbPP/886urqMHPmTFitVkRFef4fumfPHkyePBm9evUC4Pzn5oEHHsAvv/zibvP777+PcePGISEhAXPnzgUAGI1GAM4/0EePHsXDDz+M8847D6dPn8a6detw4403YuHChbjjjjsAOLttb775Ztx8882YOXMmOnTogL179+LTTz91t+XUqVMYOnQofv75Z8yYMQPZ2dnYuXMnHnvsMWzfvh3r1q2DJEkoLy/HNddcg6uvvhr//d//DQAwmUxeX4uBAweivLwcN9xwAy644AI899xzAICUlBQcPnwYubm5OH36NJ588kmkpaVh9erVePjhh/HDDz+4n6vLP//5T/Tp0wfPPfccTCYTMjIyWn0P2vve+ev666+H3W7HM888g169euHXX3/FF198gePHjwNo+z3z93V2KS0txeeff47HHnsMycnJ6NatW5ttu+eee5Cfn49ly5Zh//79+Nvf/oYJEyZ4vNd33nkn3nrrLfy///f/cM011+C7777DDTfcAIvFEpTXhyhggjRr8eLFAoB45ZVXhBBC1NfXi86dO4srr7zSY7+bb75ZdOzYUdTW1rq32Ww2ceGFFwoA4qeffmrzcSZOnCgAiBUrVnhsv/7660Xfvn3dt1955RWv+z399NMCgFi7dq0QQojPPvtMABDFxcWynq/dbhfdu3cXAwcOFA6Hw719z549IiYmRqSmprZ53zNnzognnnhCJCUledz/4osvFkOHDvX5+Dab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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5, 5))\n", "plt.ylim(0, 2 * np.pi)\n", "plt.xlim(0, 2 * np.pi)\n", "plt.imshow(\n", " np.asmatrix(adhoc_total).T,\n", " interpolation=\"nearest\",\n", " origin=\"lower\",\n", " cmap=\"RdBu\",\n", " extent=[0, 2 * np.pi, 0, 2 * np.pi],\n", ")\n", "\n", "# A label plot\n", "plot_features(plt, train_features, train_labels, 0, \"s\", \"w\", \"b\", \"B\")\n", "\n", "# B label plot\n", "plot_features(plt, train_features, train_labels, 1, \"o\", \"w\", \"r\", \"B\")\n", "\n", "plt.legend(bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n", "plt.title(\"Ad hoc dataset for clustering\")\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2. Defining the Quantum Kernel\n", "We use an identical setup as in the classification example. We create another instance of the `FidelityQuantumKernel` class with a `ZZFeatureMap`, but you might notice that in this case we do not provide a `fidelity` instance. This is because the `ComputeUncompute` method provided in the previous case is instantiated by default when the fidelity instance is not provided explicitly. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "adhoc_feature_map = ZZFeatureMap(feature_dimension=adhoc_dimension, reps=2, entanglement=\"linear\")\n", "\n", "adhoc_kernel = FidelityQuantumKernel(feature_map=adhoc_feature_map)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.3. Clustering with the Spectral Clustering Model\n", "\n", "The `scikit-learn` spectral clustering algorithm allows us to define a custom kernel in two ways (just like `SVC`):\n", "\n", "1. by providing the kernel as a **callable function**\n", "2. by precomputing the **kernel matrix**. \n", "\n", "With the current `FidelityQuantumKernel` class in `qiskit-machine-learning`, we can only use the latter option, so we precompute the kernel matrix by calling `evaluate` and visualize it as follows:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAHBCAYAAAAIMO5OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABYQklEQVR4nO3daXiTZfo+/jNNmnTfoS2UlgJlp+yrIJuAbMogo46O4qh/ZcAF0dFBRi3zVQo4w4DCiKggjgsqA4obsoigIlo22VH2CrRlaZt0TZPc/xf+mqG29/VQFumj5+c4+oKcvZInT5LeTbmvXBallAIREZHJBFzpAyAiIroQXMCIiMiUuIAREZEpcQEjIiJT4gJGRESmxAWMiIhMiQsYERGZEhcwIiIyJS5gRERkSlzA6rDnnnsOFosFbdu2rVXdq6++CovFgiNHjojfd8cddyAsLOwijvCXdb7360Jt3LgRGRkZKCgouCzXf8cdd6Bx48aX5bqN9OvXr9bPo7qicePGuOOOO670Yfhd6POkrt2PXwMuYHXYwoULAQC7d+/GN998c4WP5tdv48aNmDp16mVbwJ544gksX778slw3/XIu9HmyfPlyPPHEE5fnoH6juIDVUZs3b8Z3332H4cOHAwBeeeWVK3xEdKFKSkoAAE2bNkXHjh2v8NFcHqWlpeDHqtastLQUANCxY0c0bdr0Ch/NrwsXsDqqcsGaPn06evXqhSVLlvh/EJ5r06ZNuOqqqxAUFIQGDRpg8uTJqKioqNVtHThwAMOGDUNYWBgaNWqEhx9+GOXl5VW+5+zZsxg/fjwaNmwIu92OJk2aYMqUKdW+z+fz4fnnn0eHDh0QHByMqKgo9OjRAytWrDA8jm+++QYjR45EbGwsgoKC0LRpU0ycOFGs0f1Zpl+/fujXr1+V43r66afRokUL/3Glp6djzpw5AICMjAz85S9/AQCkpqbCYrHAYrHg888/91/H22+/jZ49eyI0NBRhYWEYMmQItm3bVuV2K/8su3PnTgwePBjh4eEYOHCgP/v5nxAtFgvuu+8+/Oc//0GrVq0QEhKC9u3b48MPP6x2n95//32kp6fD4XCgSZMmmDNnDjIyMmCxWMRzpLN8+XKEhITg7rvvhsfjAfDTL07XXXcdYmJiEBQUhI4dO+Kdd96pUlf5p9xVq1bhzjvvRL169RASEoLy8nL/nyqzsrLQp08fhISEoEmTJpg+fTp8Pl+V63E6nXjkkUeQmpoKu92Ohg0bYuLEiSguLr6g+1N5LhctWuR/nLt06YJNmzZBKYVnn30WqampCAsLw4ABA3DgwIEq9atXr8b111+PpKQkBAUFoVmzZrj33ntx+vRp//cYPU8aN26MESNGYNmyZejYsSOCgoIwdepUf3buc3XcuHEICgrCli1b/Jf5fD4MHDgQ8fHxOHny5AWdh98URXVOSUmJioyMVF27dlVKKfXyyy8rAOrVV1+t8n27d+9WISEhqnXr1uqtt95S77//vhoyZIhKTk5WANThw4fF2xk7dqyy2+2qVatW6h//+Idas2aNevLJJ5XFYlFTp071f19paalKT09XoaGh6h//+IdatWqVeuKJJ5TNZlPDhg2rcp233Xabslgs6u6771bvv/+++uSTT9Qzzzyj5syZIx7LypUrVWBgoEpPT1evvvqq+uyzz9TChQvVzTff7P+eRYsWVbtfKSkpauzYsdWur2/fvqpv377+f2dmZiqr1aqeeuoptXbtWrVy5Uo1e/ZslZGRoZRSKjs7W91///0KgFq2bJn6+uuv1ddff60KCwuVUko988wzymKxqDvvvFN9+OGHatmyZapnz54qNDRU7d69u8o5DQwMVI0bN1aZmZlq7dq16tNPP/VnKSkpVY4TgGrcuLHq1q2beuedd9THH3+s+vXrp2w2mzp48KD/+z755BMVEBCg+vXrp5YvX67effdd1b17d9W4cWN1Pi/jvn37qjZt2vj/PWvWLGW1WtX//d//+S/77LPPlN1uV3369FFvv/22WrlypbrjjjsUALVo0aJqj0PDhg3VPffcoz755BO1dOlS5fF4VN++fVVsbKxKS0tT8+fPV6tXr1bjx49XANTixYv911FcXKw6dOig4uLi1KxZs9SaNWvUnDlzVGRkpBowYIDy+XyGj/HPAVApKSmqV69eatmyZWr58uWqefPmKiYmRj300EPq+uuvVx9++KF64403VHx8vEpPT69yOy+88ILKzMxUK1asUOvXr1eLFy9W7du3Vy1atFBut1spZfw8SUlJUYmJiapJkyZq4cKFat26derbb7+t8X6UlpaqDh06qCZNmqj8/HyllFJPPvmkCggIUKtWrTK8v6QUF7A66LXXXlMA1Pz585VSSrlcLhUWFqb69OlT5ftu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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "adhoc_matrix = adhoc_kernel.evaluate(x_vec=train_features)\n", "\n", "plt.figure(figsize=(5, 5))\n", "plt.imshow(np.asmatrix(adhoc_matrix), interpolation=\"nearest\", origin=\"upper\", cmap=\"Greens\")\n", "plt.title(\"Ad hoc clustering kernel matrix\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we define a spectral clustering model and fit it using the precomputed kernel. Further, we score the labels using normalized mutual information, since we know the class labels a priori (before hand)." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Clustering score: 0.7287008798015754\n" ] } ], "source": [ "from sklearn.cluster import SpectralClustering\n", "from sklearn.metrics import normalized_mutual_info_score\n", "\n", "adhoc_spectral = SpectralClustering(2, affinity=\"precomputed\")\n", "\n", "cluster_labels = adhoc_spectral.fit_predict(adhoc_matrix)\n", "\n", "cluster_score = normalized_mutual_info_score(cluster_labels, train_labels)\n", "\n", "print(f\"Clustering score: {cluster_score}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Kernel Principal Component Analysis\n", "\n", "This section focuses on a Principal Component Analysis task using a kernel PCA algorithm. We calculate a kernel matrix using a `ZZFeatureMap` and show that this approach translates the original features into a new space, where axes are chosen along principal components. In this space the classification task can be performed with a simpler model rather than an SVM." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.1. Defining the dataset\n", "\n", "We again use the _ad hoc dataset_ with a gap of `0.6` between the two classes. This dataset resembles the dataset we had in the clustering section, the difference is that in this case `test_size` is not zero." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "adhoc_dimension = 2\n", "train_features, train_labels, test_features, test_labels, adhoc_total = ad_hoc_data(\n", " training_size=25,\n", " test_size=10,\n", " n=adhoc_dimension,\n", " gap=0.6,\n", " plot_data=False,\n", " one_hot=False,\n", " include_sample_total=True,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We plot the training and test datasets below. Our ultimate goal in this section is to construct new coordinates where the two classes can be linearly separated." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhsAAAHBCAYAAADAanlpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABfs0lEQVR4nO3de1yUZd4/8M89AzOCHAKToESxQKOQ0KxQ1tTNFBUVW6ODtlrtPtZaban7K2SfTqtQz2Zb7T66ZZq1WkamSLCJdvCwhodKPC2PQqm4BalpjkIMzsz1+2NgZIZhDjD33HP4vF8vXjD3XHPPNcMNfLmu7/W9JCGEABEREZFMVEp3gIiIiAIbgw0iIiKSFYMNIiIikhWDDSIiIpIVgw0iIiKSFYMNIiIikhWDDSIiIpIVgw0iIiKSFYMNIiIikhWDDfIZr732GiRJQlpamluPW7lyJSRJwrFjxxy2mzVrFiIiIrrRQ/nNmjULSUlJXXrskiVLsHLlSo/2pzsKCwtRUlKidDeIyAcw2CCfsWLFCgDAoUOHsGvXLoV7438YbBCRr2KwQT7hyy+/xL59+zBx4kQAwPLlyxXuEREReQqDDfIJbcHFCy+8gOHDh2PNmjVoamrq0G7nzp3IyspCjx49cOWVVyI/Px8XL15067lqa2sxYcIEREREIDExEfPmzYNer7dqc+bMGfzud7/DVVddBY1Gg6uvvhoFBQUd2plMJvz1r39FRkYGwsLCcNlllyEzMxOlpaVO+7Fy5UoMHDgQWq0WqampeOedd+y2e+6553DLLbcgNjYWUVFRGDJkCJYvX472eygmJSXh0KFD2Lp1KyRJgiRJlumY5uZmzJs3DxkZGYiOjkZsbCyGDRuGDRs2dHiuDz74ALfccguio6MRHh6Oq6++Gg888IBVG51Oh/nz56N///7QaDS46qqr8Pjjj6OxsdHSRpIkNDY24u2337b0Z9SoUU7fEyIKTCFKd4Do559/xnvvvYebbroJaWlpeOCBB/Cb3/wGH3zwAWbOnGlp9+9//xu33XYbkpKSsHLlSoSHh2PJkiV49913XX6uixcvYvLkyXjwwQcxb948bNu2DX/6058QHR2Np59+GoD5j/Po0aPxzTff4LnnnkN6ejq2b9+OoqIiVFVVoby83HK+WbNmYdWqVXjwwQfx/PPPQ6PR4Ouvv3aaP7Jy5Urcf//9mDJlChYvXoxz587h2WefhV6vh0pl/T/AsWPHMHv2bPTt2xeAOeB69NFH8d1331n6vH79ekybNg3R0dFYsmQJAECr1QIA9Ho9zpw5g/nz5+Oqq65CS0sLPvnkE9xxxx1466238Otf/xoAUFlZibvuugt33XUXnn32WfTo0QPHjx/HZ599ZulLU1MTRo4cif/85z9YsGAB0tPTcejQITz99NM4cOAAPvnkE0iShMrKSvzyl7/E6NGj8d///d8AgKioKJe/T0QUYASRwt555x0BQPz9738XQghx/vx5ERERIUaMGGHV7q677hJhYWGioaHBcsxgMIhrr71WABBHjx51+DwzZ84UAERxcbHV8QkTJoiBAwdabv/973+32+7FF18UAMSmTZuEEEJs27ZNABAFBQVuvV6j0SiuvPJKMWTIEGEymSzHjx07JkJDQ0W/fv0cPvbixYvi+eefF7169bJ6/PXXXy9Gjhzp9PkNBoO4ePGiePDBB8XgwYMtx1966SUBQPz000+dPraoqEioVCqxZ88eq+Nr164VAMQ///lPy7GePXuKmTNnOu0PEQU+TqOQ4pYvX46wsDDcfffdAICIiAjceeed2L59O2pqaiztPv/8c9x222244oorLMfUajXuuusul59LkiRMmjTJ6lh6ejqOHz9uuf3ZZ5+hZ8+emDZtmlW7WbNmAQA+/fRTAMDHH38MAJgzZ47Lzw8Ahw8fxvfff497770XkiRZjvfr1w/Dhw/v0P6zzz7DmDFjEB0dDbVajdDQUDz99NP48ccfcfLkSZee84MPPkBWVhYiIiIQEhKC0NBQLF++HNXV1ZY2N910EwAgLy8PxcXF+O677zqcp6ysDGlpacjIyIDBYLB8jBs3DpIkYcuWLW69F0QUHBhskKJqa2uxbds2TJw4EUII/PTTT/jpp58sf+jbVqgAwI8//oj4+PgO57B3rDPh4eHo0aOH1TGtVovm5uYOz9M+EACAuLg4hISE4McffwQAnDp1Cmq12q3nbzt/Z/22PbZ7926MHTsWALBs2TLs2LEDe/bsQUFBAQDzFJQz69atQ15eHq666iqsWrUKlZWV2LNnDx544AGr133rrbeipKQEBoMBv/71r9GnTx+kpaXhvffes7T54YcfsH//foSGhlp9REZGQgiB06dPu/VeEFFwYM4GKWrFihUQQmDt2rVY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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_dataset(train_features, train_labels, test_features, test_labels, adhoc_total)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.2. Defining the Quantum Kernel\n", "\n", "We proceed with the same kernel setup as it was in the classification task, namely a `ZZFeatureMap` circuit as a feature map and an instance of `FidelityQuantumKernel`." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "feature_map = ZZFeatureMap(feature_dimension=2, reps=2, entanglement=\"linear\")\n", "qpca_kernel = FidelityQuantumKernel(fidelity=fidelity, feature_map=feature_map)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, we evaluate kernel matrices for the training and test features." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "matrix_train = qpca_kernel.evaluate(x_vec=train_features)\n", "matrix_test = qpca_kernel.evaluate(x_vec=test_features, y_vec=train_features)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.3. Comparison of Kernel PCA on gaussian and quantum kernel\n", "\n", "In this section we use the `KernelPCA` implementation from `scikit-learn`, with the `kernel` parameter set to \"rbf\" for a gaussian kernel and \"precomputed\" for a quantum kernel. The former is very popular in classical machine learning models, whereas the latter allows using a quantum kernel defined as `qpca_kernel`.\n", "\n", "One can observe that the gaussian kernel based Kernel PCA model fails to make the dataset linearly separable, while the quantum kernel succeeds.\n", "\n", "While usually PCA is used to reduce the number of features in a dataset, or in other words to reduce dimensionality of a dataset, we don't do that here. Rather we keep the number of dimensions and employ the kernel PCA, mostly for visualization purposes, to show that classification on the transformed dataset becomes easily tractable by linear methods, like logistic regression. We use this method to separate two classes in the principal component space with a `LogisticRegression` model from `scikit-learn`. As usual we train it by calling the `fit` method on the training dataset and evaluate the model for accuracy with `score`." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "from sklearn.decomposition import KernelPCA\n", "\n", "kernel_pca_rbf = KernelPCA(n_components=2, kernel=\"rbf\")\n", "kernel_pca_rbf.fit(train_features)\n", "train_features_rbf = kernel_pca_rbf.transform(train_features)\n", "test_features_rbf = kernel_pca_rbf.transform(test_features)\n", "\n", "kernel_pca_q = KernelPCA(n_components=2, kernel=\"precomputed\")\n", "train_features_q = kernel_pca_q.fit_transform(matrix_train)\n", "test_features_q = kernel_pca_q.transform(matrix_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we train and score a model." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Logistic regression score: 0.9\n" ] } ], "source": [ "from sklearn.linear_model import LogisticRegression\n", "\n", "logistic_regression = LogisticRegression()\n", "logistic_regression.fit(train_features_q, train_labels)\n", "\n", "logistic_score = logistic_regression.score(test_features_q, test_labels)\n", "print(f\"Logistic regression score: {logistic_score}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's plot the results. First, we plot the transformed dataset we get with the quantum kernel. On the same plot we also add model results. Then, we plot the transformed dataset we get with the gaussian kernel." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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/fr1Q6dOneDp6alZf/jw4ejRowciIiKQkZGBAwcOYM6cOZg2bRpcXV31jo2IqD7YN1XHvol9U1PEQoseaHZ2dti3bx88PT0xatQo9OrVC0uWLKn1E7ChQ4eic+fOGDRoECZOnIgxY8YgJiYGADSX/NPT0xEQEIC33noLn3zyicFxxcbG4plnnsFrr72Gbt26Ydq0aZovxGzbti12796NY8eOITAwEK+88gpefPFFzJ8/36j34H5LlizBzJkzERQUhIKCAnz//fews7MDoP7E75tvvsHWrVsREBCABQsWYNGiRYiKitJ7/46Ojjh06BDat2+P8ePHo3v37pg6dSpu3bplUIexaNEi5Ofno2PHjnWOh0hKSsKgQYMAqKcfrvz5ftbW1ti1axdatGiBgQMHYuLEiZqpfImIGgr7purYN7FvaooUousmViLSKSoqClevXtV8Z0pzkpSUhCFDhuDKlStwd3dv7HCIiEhP7JuILBOvaBEREREREZkYCy0iIiIiIiIT462DREREREREJsYrWkRERERERCbGQouIiIiIiMjEWGgRERERERGZGAstIiIiIiIiE2OhRUREREREZGIstIiIiIiIiEyMhRYREREREZGJsdAiIiIiIiIyMRZaREREREREJvZ/SD0U9NQuPEQAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (q_ax, rbf_ax) = plt.subplots(1, 2, figsize=(10, 5))\n", "\n", "\n", "plot_features(q_ax, train_features_q, train_labels, 0, \"s\", \"w\", \"b\", \"A train\")\n", "plot_features(q_ax, train_features_q, train_labels, 1, \"o\", \"w\", \"r\", \"B train\")\n", "\n", "plot_features(q_ax, test_features_q, test_labels, 0, \"s\", \"b\", \"w\", \"A test\")\n", "plot_features(q_ax, test_features_q, test_labels, 1, \"o\", \"r\", \"w\", \"A test\")\n", "\n", "q_ax.set_ylabel(\"Principal component #1\")\n", "q_ax.set_xlabel(\"Principal component #0\")\n", "q_ax.set_title(\"Projection of training and test data\\n using KPCA with Quantum Kernel\")\n", "\n", "# Plotting the linear separation\n", "h = 0.01 # step size in the mesh\n", "\n", "# create a mesh to plot in\n", "x_min, x_max = train_features_q[:, 0].min() - 1, train_features_q[:, 0].max() + 1\n", "y_min, y_max = train_features_q[:, 1].min() - 1, train_features_q[:, 1].max() + 1\n", "xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n", "\n", "predictions = logistic_regression.predict(np.c_[xx.ravel(), yy.ravel()])\n", "\n", "# Put the result into a color plot\n", "predictions = predictions.reshape(xx.shape)\n", "q_ax.contourf(xx, yy, predictions, cmap=plt.cm.RdBu, alpha=0.2)\n", "\n", "plot_features(rbf_ax, train_features_rbf, train_labels, 0, \"s\", \"w\", \"b\", \"A train\")\n", "plot_features(rbf_ax, train_features_rbf, train_labels, 1, \"o\", \"w\", \"r\", \"B train\")\n", "plot_features(rbf_ax, test_features_rbf, test_labels, 0, \"s\", \"b\", \"w\", \"A test\")\n", "plot_features(rbf_ax, test_features_rbf, test_labels, 1, \"o\", \"r\", \"w\", \"A test\")\n", "\n", "rbf_ax.set_ylabel(\"Principal component #1\")\n", "rbf_ax.set_xlabel(\"Principal component #0\")\n", "rbf_ax.set_title(\"Projection of training data\\n using KernelPCA\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, the data points on the right figure are not separable, but they are on the left figure, hence in case of quantum kernel we can apply linear models on the transformed dataset and this is why SVM classifier works perfectly well on the _ad hoc_ dataset as we saw in the [classification section](#2.-Classification)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Conclusion\n", "\n", "In this tutorial:\n", "\n", "* We reviewed the fundamentals of quantum kernel learning\n", "* We understood how to define quantum kernels as instances of `FidelityQuantumKernel`\n", "* We learned how to use the `scikit-learn` `SVC` algorithm with a custom quantum kernel as a callable function vs precomputed quantum kernel matrix for classification\n", "* We learned how to train classifiers with the `QSVC` algorithm from `qiskit-machine-learning`\n", "* We learned how to use the `scikit-learn` `SpectralClustering` algorithms with a precomputed quantum kernel matrix for clustering\n", "* We investigated how to plug in a quantum kernel into `scikit-learn`'s `KernelPCA` algorithm and transform the ad-hoc dataset into a new one that can be tackled by a linear model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For further reference, `scikit-learn` has other algorithms that can use a precomputed kernel matrix, such as:\n", "\n", "- [Agglomerative clustering](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html)\n", "- [Support vector regression](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html)\n", "- [Ridge regression](https://scikit-learn.org/stable/modules/generated/sklearn.kernel_ridge.KernelRidge.html)\n", "- [Gaussian process regression](https://scikit-learn.org/stable/modules/gaussian_process.html)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "

Version Information

Qiskit SoftwareVersion
qiskit-terra0.23.1
qiskit-aer0.11.2
qiskit-ibmq-provider0.20.0
qiskit0.41.0
qiskit-machine-learning0.5.0
System information
Python version3.10.9
Python compilerGCC 11.2.0
Python buildmain, Jan 11 2023 15:21:40
OSLinux
CPUs10
Memory (Gb)7.394691467285156
Wed Feb 22 10:36:16 2023 CET
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

This code is a part of Qiskit

© Copyright IBM 2017, 2023.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import qiskit.tools.jupyter\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" ] } ], "metadata": { "celltoolbar": "Tags", "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.13" } }, "nbformat": 4, "nbformat_minor": 2 }