Beispiel #1
0
    def setUp(self):
        self.random_seed = 10598
        self.shots = 8192
        np.random.seed(self.random_seed)
        self.training_data = {
            'A': np.asarray([[2.95309709, 2.51327412],
                             [3.14159265, 4.08407045]]),
            'B': np.asarray([[4.08407045, 2.26194671],
                             [4.46106157, 2.38761042]])
        }
        self.testing_data = {
            'A': np.asarray([[3.83274304, 2.45044227]]),
            'B': np.asarray([[3.89557489, 0.31415927]])
        }

        self.ref_kernel_matrix_training = np.asarray(
            [[1., 0.85632324, 0.1184082, 0.36523438],
             [0.85632324, 1., 0.11352539, 0.45068359],
             [0.1184082, 0.11352539, 1., 0.6730957],
             [0.36523438, 0.45068359, 0.6730957, 1.]])

        self.ref_kernel_matrix_testing = np.asarray(
            [[0.14892578, 0.18115234, 0.47631836, 0.14709473],
             [0.33239746, 0.3782959, 0.02270508, 0.16418457]])

        self.ref_support_vectors = np.asarray([[2.95309709, 2.51327412],
                                               [3.14159265, 4.08407045],
                                               [4.08407045, 2.26194671],
                                               [4.46106157, 2.38761042]])
        self.ref_alpha = np.asarray(
            [0.38038017, 1.46000306, 0.02371895, 1.81666428])

        self.ref_bias = np.asarray([-0.03570662])

        self.svm_input = SVMInput(self.training_data, self.testing_data)
Beispiel #2
0
    def setUp(self):
        self.random_seed = 10598
        self.training_data = {'A': np.asarray([[2.95309709, 2.51327412], [3.14159265, 4.08407045]]),
                              'B': np.asarray([[4.08407045, 2.26194671], [4.46106157, 2.38761042]])}
        self.testing_data = {'A': np.asarray([[3.83274304, 2.45044227]]),
                             'B': np.asarray([[3.89557489, 0.31415927]])}

        self.ref_opt_params = np.asarray([2.6985,   1.5935,   2.2456,  -6.255,  -4.3215,  -5.41,
                                          -6.9215,   0.2656,   1.5701,  -4.677,   2.6987, -11.7649,
                                          -2.3141,  -2.7084,   0.0622,  -0.1577])
        self.ref_train_loss = 0.6294606017231916

        self.svm_input = SVMInput(self.training_data, self.testing_data)
    def setUp(self):
        super().setUp()
        self.random_seed = 10598
        self.shots = 12000
        np.random.seed(self.random_seed)
        self.training_data = {
            'A': np.asarray([[2.95309709, 2.51327412],
                             [3.14159265, 4.08407045]]),
            'B': np.asarray([[4.08407045, 2.26194671],
                             [4.46106157, 2.38761042]])
        }
        self.testing_data = {
            'A': np.asarray([[3.83274304, 2.45044227]]),
            'B': np.asarray([[3.89557489, 0.31415927]])
        }

        self.svm_input = SVMInput(self.training_data, self.testing_data)
Beispiel #4
0
    def test_qsvm_kernel_binary_via_run_algorithm(self):

        training_input = {
            'A':
            np.asarray([[0.6560706, 0.17605998], [0.14154948, 0.06201424],
                        [0.80202323, 0.40582692], [0.46779595, 0.39946754],
                        [0.57660199, 0.21821317]]),
            'B':
            np.asarray([[0.38857596, -0.33775802], [0.49946978, -0.48727951],
                        [-0.30119743, -0.11221681], [-0.16479252, -0.08640519],
                        [0.49156185, -0.3660534]])
        }

        test_input = {
            'A':
            np.asarray([[0.57483139, 0.47120732], [0.48372348, 0.25438544],
                        [0.08791134, 0.11515506], [0.45988094, 0.32854319],
                        [0.53015085, 0.41539212]]),
            'B':
            np.asarray([[-0.06048935, -0.48345293], [-0.01065613, -0.33910828],
                        [-0.17323832, -0.49535592], [0.14043268, -0.87869109],
                        [-0.15046837, -0.47340207]])
        }

        temp = [test_input[k] for k in test_input]
        total_array = np.concatenate(temp)

        params = {
            'problem': {
                'name': 'svm_classification',
                'random_seed': self.random_seed
            },
            'backend': {
                'shots': self.shots
            },
            'algorithm': {
                'name': 'QSVM.Kernel'
            }
        }
        backend = Aer.get_backend('qasm_simulator')
        algo_input = SVMInput(training_input, test_input, total_array)
        result = run_algorithm(params, algo_input, backend=backend)
        self.assertEqual(result['testing_accuracy'], 0.6)
        self.assertEqual(result['predicted_classes'],
                         ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'A', 'A', 'A'])
Beispiel #5
0
    def setUp(self):
        super().setUp()
        self.random_seed = 10598
        self.training_data = {
            'A': np.asarray([[2.95309709, 2.51327412],
                             [3.14159265, 4.08407045]]),
            'B': np.asarray([[4.08407045, 2.26194671],
                             [4.46106157, 2.38761042]])
        }
        self.testing_data = {
            'A': np.asarray([[3.83274304, 2.45044227]]),
            'B': np.asarray([[3.89557489, 0.31415927]])
        }

        self.ref_opt_params = np.array([
            -0.09936191, -1.26202073, 1.30316646, 3.24053034, -0.50731743,
            -0.6853292, 2.57404557, 1.74873317, 1.62238446, -1.83326183,
            4.48499251, 0.21433137, -1.76288916, -0.15767913, 1.86321388,
            0.27216782
        ])
        self.ref_train_loss = 1.4088445273265953

        self.svm_input = SVMInput(self.training_data, self.testing_data)
    def test_classical_multiclass_one_against_all(self):
        training_input = {
            'A':
            np.asarray([[0.6560706, 0.17605998], [0.25776033, 0.47628296],
                        [0.79687342, 0.26933706], [0.39016555, -0.08469916],
                        [0.3994399, 0.13601573], [0.26752049, -0.03978988],
                        [0.24026485, 0.01953518], [0.49490503, 0.17239737],
                        [0.70171827, 0.5323737], [0.43221576, 0.42357294],
                        [0.62864856, 0.45504447], [0.6259567, 0.30917324],
                        [0.58272403, 0.20760754], [0.3938784, 0.17184466],
                        [0.14154948, 0.06201424], [0.80202323, 0.40582692],
                        [0.46779595, 0.39946754], [0.57660199, 0.21821317],
                        [0.51044761, 0.03699459], [0.8690704, 0.70847635]]),
            'B':
            np.asarray([[0.38857596, -0.33775802], [0.49946978, -0.48727951],
                        [-0.30119743, -0.11221681], [-0.16479252, -0.08640519],
                        [-0.21808884, -0.56508327], [-0.14683258, -0.46528508],
                        [-0.05888195, -0.51474852], [0.20517435, -0.66839091],
                        [0.25475584, -0.21239966], [0.55194854, 0.02789679],
                        [-0.11542951, -0.54157026], [0.44625538, -0.49485869],
                        [-0.14609118, -0.60719757], [0.18121305, -0.1922198],
                        [0.19283785, -0.31798925], [0.29626405, -0.54563098],
                        [-0.39044304, -0.36527253], [-0.29432215, -0.43924164],
                        [-0.40294517, -0.31381308], [0.49156185, -0.3660534]]),
            'C':
            np.asarray([[-0.68088231, 0.46824423], [-0.56167659, 0.65270294],
                        [-0.54323753, 0.67630888], [-0.57685569, -0.08515631],
                        [-0.67765364, 0.19654347], [-0.62129115, 0.22223066],
                        [-0.78040851, 0.65247848], [-0.50730279, 0.59898039],
                        [-0.64275805, 0.63381998], [-0.72854201, 0.14151325],
                        [-0.57004437, 0.12344874], [-0.55215973, 0.74331215],
                        [-0.60916047, 0.52006917], [-0.23093745, 1.],
                        [-0.84025337, 0.5564536], [-0.66952391, 0.57918859],
                        [-0.67725082, 0.60439934], [-1., 0.23715261],
                        [-0.62933025, 0.19055405], [-0.82139073, 0.29941512]])
        }

        test_input = {
            'A':
            np.asarray([[0.57483139, 0.47120732], [0.48372348, 0.25438544],
                        [0.08791134, 0.11515506], [0.45988094, 0.32854319],
                        [0.53015085, 0.41539212], [0.5073321, 0.47346751],
                        [0.71081819, 0.19202569], [1., 0.51698289],
                        [0.630973, 0.19898666], [0.48142649, 0.15931707]]),
            'B':
            np.asarray([[-0.06048935, -0.48345293], [-0.01065613, -0.33910828],
                        [-0.17323832, -0.49535592], [0.14043268, -0.87869109],
                        [-0.15046837, -0.47340207], [-0.39600934, -0.21647957],
                        [-0.394202, -0.44705385], [0.15243621, -0.36695163],
                        [0.06195634, -0.23262325], [0.06183066, -0.53376975]]),
            'C':
            np.asarray([[-0.74561108, 0.27047295], [-0.69942965, 0.11885162],
                        [-0.52649891, 0.35265538], [-0.54345106, 0.13113995],
                        [-0.57181448, 0.13594725], [-0.33713329, 0.05095243],
                        [-0.65741384, 0.477976], [-0.79986067, 0.41733195],
                        [-0.73856328, 0.80699537], [-0.66489165, 0.1181712]])
        }

        temp = [test_input[k] for k in test_input]
        total_array = np.concatenate(temp)

        params = {
            'problem': {
                'name': 'svm_classification'
            },
            'algorithm': {
                'name': 'SVM'
            },
            'multiclass_extension': {
                'name': 'OneAgainstRest'
            }
        }

        algo_input = SVMInput(training_input, test_input, total_array)

        result = run_algorithm(params, algo_input)
        self.assertEqual(result['testing_accuracy'], 1.0)
        self.assertEqual(result['predicted_classes'], [
            'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B',
            'B', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C',
            'C', 'C', 'C', 'C'
        ])
    def test_classical_binary(self):
        training_input = {
            'A':
            np.asarray([[0.6560706, 0.17605998], [0.25776033, 0.47628296],
                        [0.79687342, 0.26933706], [0.39016555, -0.08469916],
                        [0.3994399, 0.13601573], [0.26752049, -0.03978988],
                        [0.24026485, 0.01953518], [0.49490503, 0.17239737],
                        [0.70171827, 0.5323737], [0.43221576, 0.42357294],
                        [0.62864856, 0.45504447], [0.6259567, 0.30917324],
                        [0.58272403, 0.20760754], [0.3938784, 0.17184466],
                        [0.14154948, 0.06201424], [0.80202323, 0.40582692],
                        [0.46779595, 0.39946754], [0.57660199, 0.21821317],
                        [0.51044761, 0.03699459], [0.8690704, 0.70847635]]),
            'B':
            np.asarray([[0.38857596, -0.33775802], [0.49946978, -0.48727951],
                        [-0.30119743, -0.11221681], [-0.16479252, -0.08640519],
                        [-0.21808884, -0.56508327], [-0.14683258, -0.46528508],
                        [-0.05888195, -0.51474852], [0.20517435, -0.66839091],
                        [0.25475584, -0.21239966], [0.55194854, 0.02789679],
                        [-0.11542951, -0.54157026], [0.44625538, -0.49485869],
                        [-0.14609118, -0.60719757], [0.18121305, -0.1922198],
                        [0.19283785, -0.31798925], [0.29626405, -0.54563098],
                        [-0.39044304, -0.36527253], [-0.29432215, -0.43924164],
                        [-0.40294517, -0.31381308], [0.49156185, -0.3660534]])
        }

        test_input = {
            'A':
            np.asarray([[0.57483139, 0.47120732], [0.48372348, 0.25438544],
                        [0.08791134, 0.11515506], [0.45988094, 0.32854319],
                        [0.53015085, 0.41539212], [0.5073321, 0.47346751],
                        [0.71081819, 0.19202569], [1., 0.51698289],
                        [0.630973, 0.19898666], [0.48142649, 0.15931707]]),
            'B':
            np.asarray([[-0.06048935, -0.48345293], [-0.01065613, -0.33910828],
                        [-0.17323832, -0.49535592], [0.14043268, -0.87869109],
                        [-0.15046837, -0.47340207], [-0.39600934, -0.21647957],
                        [-0.394202, -0.44705385], [0.15243621, -0.36695163],
                        [0.06195634, -0.23262325], [0.06183066, -0.53376975]])
        }

        temp = [test_input[k] for k in test_input]
        total_array = np.concatenate(temp)

        params = {
            'problem': {
                'name': 'svm_classification'
            },
            'algorithm': {
                'name': 'SVM',
            }
        }

        algo_input = SVMInput(training_input, test_input, total_array)

        result = run_algorithm(params, algo_input)
        self.assertEqual(result['testing_accuracy'], 1.0)
        self.assertEqual(result['predicted_classes'], [
            'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B',
            'B', 'B', 'B', 'B', 'B', 'B', 'B'
        ])
Beispiel #8
0
from qiskit_aqua.utils import split_dataset_to_data_and_labels
from qiskit_aqua.input import SVMInput
from qiskit_qcgpu_provider import QCGPUProvider
from qiskit_aqua import run_algorithm
n = 2 # How many features to use (dimensionality)
training_dataset_size = 20
testing_dataset_size = 10

sample_Total, training_input, test_input, class_labels = breast_cancer(training_dataset_size, testing_dataset_size, n)

datapoints, class_to_label = split_dataset_to_data_and_labels(test_input)
print(class_to_label)
params = {
   'problem': {'name': 'svm_classification', 'random_seed': 10598},
   'algorithm': { 'name': 'QSVM.Kernel' },
   'backend': {'name': 'qasm_simulator', 'shots': 1024},
   'feature_map': {'name': 'SecondOrderExpansion', 'depth': 2, 'entanglement': 'linear'}
}

backend = QCGPUProvider().get_backend('qasm_simulator')

algo_input = SVMInput(training_input, test_input, datapoints[0])
%time result = run_algorithm(params, algo_input)
%time result = run_algorithm(params, algo_input, backend=backend)

print("ground truth:    {}".format(datapoints[1]))
print("prediction:      {}".format(result['predicted_labels']))
Beispiel #9
0
temp = [test_input[k] for k in test_input]
total_array = np.concatenate(temp)

aqua_dict = {
    'problem': {
        'name': 'svm_classification'
    },
    'algorithm': {
        'name': 'SVM'
    },
    'multiclass_extension': {
        'name': 'AllPairs'
    }
}

algo_input = SVMInput(training_input, test_input, total_array)

from qiskit.aqua import QiskitAqua

aqua_obj = QiskitAqua(aqua_dict, algo_input)
algo_obj = aqua_obj.quantum_algorithm

result = aqua_obj.run()  #run_algorithm(aqua_dict, algo_input)
for k, v in result.items():
    print("'{}' : {}".format(k, v))

# 6
to_predict = singleDataItem('', 'data.csv', [1, 2, 0, 0, 0, 0, 0, 1, 0], n=3)
print(algo_obj.predict(to_predict))

# 2
Beispiel #10
0
    def test_qsvm_kernel_multiclass_error_correcting_code(self):

        backend = get_aer_backend('qasm_simulator')
        training_input = {
            'A':
            np.asarray([[0.6560706, 0.17605998], [0.25776033, 0.47628296],
                        [0.8690704, 0.70847635]]),
            'B':
            np.asarray([[0.38857596, -0.33775802], [0.49946978, -0.48727951],
                        [0.49156185, -0.3660534]]),
            'C':
            np.asarray([[-0.68088231, 0.46824423], [-0.56167659, 0.65270294],
                        [-0.82139073, 0.29941512]])
        }

        test_input = {
            'A':
            np.asarray([[0.57483139, 0.47120732], [0.48372348, 0.25438544],
                        [0.48142649, 0.15931707]]),
            'B':
            np.asarray([[-0.06048935, -0.48345293], [-0.01065613, -0.33910828],
                        [0.06183066, -0.53376975]]),
            'C':
            np.asarray([[-0.74561108, 0.27047295], [-0.69942965, 0.11885162],
                        [-0.66489165, 0.1181712]])
        }

        total_array = np.concatenate(
            (test_input['A'], test_input['B'], test_input['C']))

        params = {
            'problem': {
                'name': 'svm_classification',
                'random_seed': self.random_seed
            },
            'algorithm': {
                'name': 'QSVM.Kernel',
            },
            'backend': {
                'shots': self.shots
            },
            'multiclass_extension': {
                'name': 'ErrorCorrectingCode',
                'code_size': 5
            },
            'feature_map': {
                'name': 'SecondOrderExpansion',
                'depth': 2,
                'entangler_map': {
                    0: [1]
                }
            }
        }

        algo_input = SVMInput(training_input, test_input, total_array)

        result = run_algorithm(params, algo_input, backend=backend)
        self.assertAlmostEqual(result['testing_accuracy'],
                               0.55555555,
                               places=4,
                               msg='Please ensure you are using C++ simulator')
        self.assertEqual(result['predicted_classes'],
                         ['A', 'A', 'C', 'A', 'A', 'A', 'C', 'C', 'C'])