Support vector machine is one of major method of machine learning. It very useful and powerful algorithm. However, SVM is not suitable for large size dataset.
Recently I’m learning QISKIT and qiskit has an attractive method named QSVM.
It means that perform SVM on quantum circuit!
Dose it sound fun?
Original URL of the paper is below.
https://arxiv.org/pdf/1804.11326.pdf
The author of the article defined quantum kernel functions for quantum SVM. The merit of quantum computing for SVM is parallel. Because quantum computing can generates entangle state which is parallel world.
And fortunately qiskit has QSVM method that means we can QSVM very conveniently!
Today I tried to use QSVM to iris dataset for practice.
At first, import packages and dataset.
import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split import qiskit from qiskit import BasicAer from qiskit.aqua import QuantumInstance from qiskit.aqua.algorithms import QSVM from qiskit.aqua.components.multiclass_extensions import one_against_rest, all_pairs from qiskit.aqua.components.feature_maps import SecondOrderExpansion from qiskit.aqua.input import ClassificationInput from qiskit.aqua import run_algorithm backend = BasicAer.get_backend('qasm_simulator') iris = load_iris()
X, Y = iris.data, iris.target print(X.shape) print(len(set(Y))) train_x, test_x, train_y, test_y = train_test_split(X, Y, test_size=0.2) num_features = 4 training_size = 120 test_size = 30 feature_map = SecondOrderExpansion(feature_dimension=num_features, depth=2)
Then split data for train and test. Iris data set has 4 features so I defined num_features=4, it will be number of qubit.
X, Y = iris.data, iris.target print(X.shape) print(len(set(Y))) train_x, test_x, train_y, test_y = train_test_split(X, Y, test_size=0.2) feature_map = SecondOrderExpansion(feature_dimension=num_features, depth=2)
Next defined parameters for QSVM and transformed data for QSVM.
params = { 'problem': {'name': 'classification'}, 'algorithm': { 'name': 'QSVM', }, 'multiclass_extension': {'name': 'OneAgainstRest'}, 'feature_map': {'name': 'SecondOrderExpansion', 'depth': 2 } } params = { 'problem': {'name': 'classification', 'random_seed': 794}, 'algorithm': { 'name': 'QSVM', }, 'backend': {'shots': 1024}, 'multiclass_extension': {'name': 'OneAgainstRest'}, #'feature_map': {'name': 'SecondOrderExpansion', 'depth': 2, 'entangler_map': [[0, 1]]} 'feature_map': {'name': 'SecondOrderExpansion', 'depth': 2} } training_dataset={'A':train_x[train_y==0], 'B':train_x[train_y==1], 'C':train_x[train_y==2]} test_dataset={'A':test_x[test_y==0], 'B':test_x[test_y==1], 'C':test_x[test_y==2]} total_arr = np.concatenate((test_dataset['A'],test_dataset['B'],test_dataset['C'])) alg_input = ClassificationInput(training_dataset, test_dataset, total_arr)
Finally let’s learning!
%time result = run_algorithm(params, algo_input=alg_input, backend=backend)
Simulated QSVM is not so fast. It took 17min on my MacBook(mid2015 model)
Check the performance. result['test_success_ratio'] > 0.733
Hmm it is not so high accuracy. Are there many room for improve?
And qiskit has more direct method for QSVM named QSVM.
I would like to use the method and tried. But it caused error.
I couldn’t find reason of above.
q_instance = QuantumInstance(backend) qsvm = QSVM(feature_map=feature_map, training_dataset={'A':train_x[train_y==0], 'B':train_x[train_y==1], 'C':train_x[train_y==2]}, test_dataset={'A':test_x[test_y==0], 'B':test_x[test_y==1], 'C':test_x[test_y==2]}, multiclass_extension=one_against_rest.OneAgainstRest)
It is very interesting for me about quantum computing.
programming and quantum computing is very interesting for me!!!!
for new data How can we predict