Portuguese, Brazilian
Idiomas
English
Japanese
German
Korean
Portuguese, Brazilian
French
Shortcuts

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)
../../_images/tutorials_machine_learning_02_qsvm_multiclass_3_0.png

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 SoftwareVersion
Qiskit0.23.0
Terra0.16.0
Aer0.7.0
Ignis0.5.0
Aqua0.8.0
IBM Q Provider0.11.0
System information
Python3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
OSLinux
CPUs1
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.