Nota
Esta página foi gerada a partir de tutorials/machine_learning/02_qsvm_multiclass.ipynb.
Execute interativamente no IBM Quantum lab.
Classificação multiclasse QSVM¶
Uma extensão multiclasse funciona em conjunto com um classificador binário (duas classes) subjacente para fornecer classificação onde o número de classes é maior que dois.
Atualmente as seguintes extensões multiclasse são suportadas:
OneAgainstRest
AllPairs
ErrorCorrectingCode
Estas usam diferentes técnicas para agrupar os dados da classificação binária para obter a classificação multiclasse final.
[1]:
import numpy as np
from qiskit import BasicAer
from qiskit.circuit.library import ZZFeatureMap
from qiskit.aqua import QuantumInstance, aqua_globals
from qiskit.aqua.algorithms import QSVM
from qiskit.aqua.components.multiclass_extensions import AllPairs
from qiskit.aqua.utils.dataset_helper import get_feature_dimension
Queremos um conjunto de dados com mais de duas classes, então aqui vamos escolher o conjunto de dados Wine
que possui 3 classes.
[2]:
from qiskit.ml.datasets import wine
n = 2 # dimension of each data point
sample_Total, training_input, test_input, class_labels = wine(training_size=24,
test_size=6, n=n, plot_data=True)
temp = [test_input[k] for k in test_input]
total_array = np.concatenate(temp)

Para usar uma extensão multiclasse uma instância dela simplesmente precisa ser fornecida, na criação do QSVM, usando o parâmetro multiclass_extension
. Embora AllPairs()
seja usado no exemplo abaixo, as seguintes extensões multiclasse também funcionariam:
OneAgainstRest()
ErrorCorrectingCode(code_size=5)
[3]:
aqua_globals.random_seed = 10598
backend = BasicAer.get_backend('qasm_simulator')
feature_map = ZZFeatureMap(feature_dimension=get_feature_dimension(training_input),
reps=2, entanglement='linear')
svm = QSVM(feature_map, training_input, test_input, total_array,
multiclass_extension=AllPairs())
quantum_instance = QuantumInstance(backend, shots=1024,
seed_simulator=aqua_globals.random_seed,
seed_transpiler=aqua_globals.random_seed)
result = svm.run(quantum_instance)
for k,v in result.items():
print(f'{k} : {v}')
testing_accuracy : 1.0
test_success_ratio : 1.0
predicted_labels : [0 1 2 2 2 2]
predicted_classes : ['A', 'B', 'C', 'C', 'C', 'C']
[4]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright
Version Information
Qiskit Software | Version |
---|---|
Qiskit | 0.23.0 |
Terra | 0.16.0 |
Aer | 0.7.0 |
Ignis | 0.5.0 |
Aqua | 0.8.0 |
IBM Q Provider | 0.11.0 |
System information | |
Python | 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] |
OS | Linux |
CPUs | 1 |
Memory (Gb) | 5.827335357666016 |
Thu Nov 12 17:37:28 2020 EST |
This code is a part of Qiskit
© Copyright IBM 2017, 2020.
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.