Skip to main contentIBM Quantum Documentation
You are viewing the API reference for an old version of Qiskit SDK. Switch to latest version

QSVM

QSVM(feature_map, training_dataset=None, test_dataset=None, datapoints=None, multiclass_extension=None, quantum_instance=None) GitHub(opens in a new tab)

Quantum SVM algorithm.

A key concept in classification methods is that of a kernel. Data cannot typically be separated by a hyperplane in its original space. A common technique used to find such a hyperplane consists on applying a non-linear transformation function to the data. This function is called a feature map, as it transforms the raw features, or measurable properties, of the phenomenon or subject under study. Classifying in this new feature space – and, as a matter of fact, also in any other space, including the raw original one – is nothing more than seeing how close data points are to each other. This is the same as computing the inner product for each pair of data in the set. In fact we do not need to compute the non-linear feature map for each datum, but only the inner product of each pair of data points in the new feature space. This collection of inner products is called the kernel and it is perfectly possible to have feature maps that are hard to compute but whose kernels are not.

The QSVM algorithm applies to classification problems that require a feature map for which computing the kernel is not efficient classically. This means that the required computational resources are expected to scale exponentially with the size of the problem. QSVM uses a Quantum processor to solve this problem by a direct estimation of the kernel in the feature space. The method used falls in the category of what is called supervised learning, consisting of a training phase (where the kernel is calculated and the support vectors obtained) and a test or classification phase (where new data without labels is classified according to the solution found in the training phase).

Internally, QSVM will run the binary classification or multiclass classification based on how many classes the data has. If the data has more than 2 classes then a multiclass_extension is required to be supplied. Aqua provides several multiclass_extensions.

See also https://arxiv.org/abs/1804.11326(opens in a new tab)

Parameters

  • feature_map (Union[QuantumCircuit, FeatureMap]) – Feature map module, used to transform data
  • training_dataset (Optional[Dict[str, ndarray]]) – Training dataset.
  • test_dataset (Optional[Dict[str, ndarray]]) – Testing dataset.
  • datapoints (Optional[ndarray]) – Prediction dataset.
  • multiclass_extension (Optional[MulticlassExtension]) – If number of classes is greater than 2 then a multiclass scheme must be supplied, in the form of a multiclass extension.
  • quantum_instance (Union[QuantumInstance, BaseBackend, None]) – Quantum Instance or Backend

Raises

AquaError – Multiclass extension not supplied when number of classes > 2


Attributes

BATCH_SIZE

= 1000

backend

qiskit.providers.basebackend.BaseBackend

Returns backend.

Return type

BaseBackend

quantum_instance

Union[None, qiskit.aqua.quantum_instance.QuantumInstance]

Returns quantum instance.

Return type

Optional[QuantumInstance]

random

Return a numpy random.

ret

returns result


Methods

construct_circuit

QSVM.construct_circuit(x1, x2, measurement=False)

Generate inner product of x1 and x2 with the given feature map.

The dimension of x1 and x2 must be the same.

Parameters

  • x1 (numpy.ndarray) – data points, 1-D array, dimension is D
  • x2 (numpy.ndarray) – data points, 1-D array, dimension is D
  • measurement (bool) – add measurement gates at the end

Returns

constructed circuit

Return type

QuantumCircuit

construct_kernel_matrix

QSVM.construct_kernel_matrix(x1_vec, x2_vec=None, quantum_instance=None)

Construct kernel matrix, if x2_vec is None, self-innerproduct is conducted.

Notes

When using statevector_simulator, we only build the circuits for Psi(x1)|0> rather than Psi(x2)^dagger Psi(x1)|0>, and then we perform the inner product classically. That is, for statevector_simulator, the total number of circuits will be O(N) rather than O(N^2) for qasm_simulator.

Parameters

  • x1_vec (numpy.ndarray) – data points, 2-D array, N1xD, where N1 is the number of data, D is the feature dimension
  • x2_vec (numpy.ndarray) – data points, 2-D array, N2xD, where N2 is the number of data, D is the feature dimension
  • quantum_instance (QuantumInstance) – quantum backend with all settings

Returns

2-D matrix, N1xN2

Return type

numpy.ndarray

Raises

AquaError – Quantum instance is not present.

get_kernel_matrix

static QSVM.get_kernel_matrix(quantum_instance, feature_map, x1_vec, x2_vec=None)

Construct kernel matrix, if x2_vec is None, self-innerproduct is conducted.

Notes

When using statevector_simulator, we only build the circuits for Psi(x1)|0> rather than Psi(x2)^dagger Psi(x1)|0>, and then we perform the inner product classically. That is, for statevector_simulator, the total number of circuits will be O(N) rather than O(N^2) for qasm_simulator.

Parameters

  • quantum_instance (QuantumInstance) – quantum backend with all settings
  • feature_map (FeatureMap) – a feature map that maps data to feature space
  • x1_vec (numpy.ndarray) – data points, 2-D array, N1xD, where N1 is the number of data, D is the feature dimension
  • x2_vec (numpy.ndarray) – data points, 2-D array, N2xD, where N2 is the number of data, D is the feature dimension

Returns

2-D matrix, N1xN2

Return type

numpy.ndarray

load_model

QSVM.load_model(file_path)

Load a model from a file path.

Parameters

file_path (str) – the path of the saved model.

predict

QSVM.predict(data, quantum_instance=None)

Predict using the svm.

Parameters

  • data (numpy.ndarray) – NxD array, where N is the number of data, D is the feature dimension.
  • quantum_instance (QuantumInstance) – quantum backend with all setting

Returns

predicted labels, Nx1 array

Return type

numpy.ndarray

Raises

AquaError – Quantum instance is not present.

run

QSVM.run(quantum_instance=None, **kwargs)

Execute the algorithm with selected backend.

Parameters

Returns

results of an algorithm.

Return type

dict

Raises

AquaError – If a quantum instance or backend has not been provided

save_model

QSVM.save_model(file_path)

Save the model to a file path.

Parameters

file_path (str) – a path to save the model.

set_backend

QSVM.set_backend(backend, **kwargs)

Sets backend with configuration.

Return type

None

setup_datapoint

QSVM.setup_datapoint(datapoints)

Setup data points, if the data were there, they would be overwritten.

Parameters

datapoints (numpy.ndarray) – prediction dataset.

setup_test_data

QSVM.setup_test_data(test_dataset)

Setup test data, if the data were there, they would be overwritten.

Parameters

test_dataset (dict) – test dataset.

setup_training_data

QSVM.setup_training_data(training_dataset)

Setup training data, if the data were there, they would be overwritten.

Parameters

training_dataset (dict) – training dataset.

test

QSVM.test(data, labels, quantum_instance=None)

Test the svm.

Parameters

  • data (numpy.ndarray) – NxD array, where N is the number of data, D is the feature dimension.
  • labels (numpy.ndarray) – Nx1 array, where N is the number of data
  • quantum_instance (QuantumInstance) – quantum backend with all setting

Returns

accuracy

Return type

float

Raises

AquaError – Quantum instance is not present.

train

QSVM.train(data, labels, quantum_instance=None)

Train the svm.

Parameters

  • data (numpy.ndarray) – NxD array, where N is the number of data, D is the feature dimension.
  • labels (numpy.ndarray) – Nx1 array, where N is the number of data
  • quantum_instance (QuantumInstance) – quantum backend with all setting

Raises

AquaError – Quantum instance is not present.

Was this page helpful?
Report a bug or request content on GitHub.