qlearnkit.algorithms.qsvm package

Submodules

qlearnkit.algorithms.qsvm.qsvc module

class qlearnkit.algorithms.qsvm.qsvc.QSVClassifier(encoding_map: Optional[qiskit.circuit.library.n_local.n_local.NLocal] = None, quantum_instance: Optional[Union[qiskit.utils.quantum_instance.QuantumInstance, qiskit.providers.basebackend.BaseBackend, qiskit.providers.backend.Backend]] = None, gamma: Union[float, str] = 'scale')[source]

Bases: sklearn.base.ClassifierMixin, qlearnkit.algorithms.quantum_estimator.QuantumEstimator

The Quantum Support Vector Machine algorithm for classification. Maps datapoints to quantum states using a FeatureMap or similar QuantumCircuit.

Example

Classify data using the Iris dataset.

import numpy as np
from qlearnkit.algorithms import QSVClassifier
from qiskit import BasicAer
from qiskit.utils import QuantumInstance, algorithm_globals
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from qiskit.circuit.library import ZZFeatureMap

seed = 42
algorithm_globals.random_seed = seed

quantum_instance = QuantumInstance(BasicAer.get_backend('statevector_simulator'),
                                   shots=1024,
                                   optimization_level=1,
                                   seed_simulator=seed,
                                   seed_transpiler=seed)

# Use iris data set for training and test data
X, y = load_iris(return_X_y=True)

num_features = 2
X = np.asarray([x[0:num_features] for x, y_ in zip(X, y) if y_ != 2])
y = np.asarray([y_ for x, y_ in zip(X, y) if y_ != 2])

encoding_map = ZZFeatureMap(2)

qsvc = QSVClassifier(
    encoding_map=encoding_map,
    quantum_instance=quantum_instance
)

# use iris dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=seed)
qsvc.fit(X_train, y_train)

print(f"Testing accuracy: "
      f"{qsvc.score(X_test, y_test):0.2f}")
Testing accuracy: 0.95
fit(X, y)[source]

Fits the model using X as training dataset and y as training labels. The actual computation is done at the predict stage to allow running the qiskit backend only once

Parameters
  • X – training dataset

  • y – training labels

predict(X_test: numpy.ndarray) numpy.ndarray[source]

Solves a Least Squares problem to predict value of input data. Internally distinguishes between binary and multiclass case. For the binary case solves an optimization problem to find a dividing hyperplane. For the multiclass case uses a one-to-rest approach and thus needs to run the algorithm n_classes different times.

Parameters

X_test – the test data

Returns

numpy ndarray of predicted labels

Module contents

class qlearnkit.algorithms.qsvm.QSVClassifier(encoding_map: Optional[qiskit.circuit.library.n_local.n_local.NLocal] = None, quantum_instance: Optional[Union[qiskit.utils.quantum_instance.QuantumInstance, qiskit.providers.basebackend.BaseBackend, qiskit.providers.backend.Backend]] = None, gamma: Union[float, str] = 'scale')[source]

Bases: sklearn.base.ClassifierMixin, qlearnkit.algorithms.quantum_estimator.QuantumEstimator

The Quantum Support Vector Machine algorithm for classification. Maps datapoints to quantum states using a FeatureMap or similar QuantumCircuit.

Example

Classify data using the Iris dataset.

import numpy as np
from qlearnkit.algorithms import QSVClassifier
from qiskit import BasicAer
from qiskit.utils import QuantumInstance, algorithm_globals
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from qiskit.circuit.library import ZZFeatureMap

seed = 42
algorithm_globals.random_seed = seed

quantum_instance = QuantumInstance(BasicAer.get_backend('statevector_simulator'),
                                   shots=1024,
                                   optimization_level=1,
                                   seed_simulator=seed,
                                   seed_transpiler=seed)

# Use iris data set for training and test data
X, y = load_iris(return_X_y=True)

num_features = 2
X = np.asarray([x[0:num_features] for x, y_ in zip(X, y) if y_ != 2])
y = np.asarray([y_ for x, y_ in zip(X, y) if y_ != 2])

encoding_map = ZZFeatureMap(2)

qsvc = QSVClassifier(
    encoding_map=encoding_map,
    quantum_instance=quantum_instance
)

# use iris dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=seed)
qsvc.fit(X_train, y_train)

print(f"Testing accuracy: "
      f"{qsvc.score(X_test, y_test):0.2f}")
Testing accuracy: 0.95
fit(X, y)[source]

Fits the model using X as training dataset and y as training labels. The actual computation is done at the predict stage to allow running the qiskit backend only once

Parameters
  • X – training dataset

  • y – training labels

predict(X_test: numpy.ndarray) numpy.ndarray[source]

Solves a Least Squares problem to predict value of input data. Internally distinguishes between binary and multiclass case. For the binary case solves an optimization problem to find a dividing hyperplane. For the multiclass case uses a one-to-rest approach and thus needs to run the algorithm n_classes different times.

Parameters

X_test – the test data

Returns

numpy ndarray of predicted labels