Example #1
0
    def test_constructor(self):
        """Tests properties of PegasosQSVC"""
        with self.subTest("Default parameters"):
            pegasos_qsvc = PegasosQSVC()
            self.assertIsInstance(pegasos_qsvc.quantum_kernel, QuantumKernel)
            self.assertFalse(pegasos_qsvc.precomputed)
            self.assertEqual(pegasos_qsvc.num_steps, 1000)

        with self.subTest("PegasosQSVC with QuantumKernel"):
            qkernel = QuantumKernel(
                feature_map=self.feature_map,
                quantum_instance=self.statevector_simulator)
            pegasos_qsvc = PegasosQSVC(quantum_kernel=qkernel)
            self.assertIsInstance(pegasos_qsvc.quantum_kernel, QuantumKernel)
            self.assertFalse(pegasos_qsvc.precomputed)

        with self.subTest("PegasosQSVC with precomputed kernel"):
            pegasos_qsvc = PegasosQSVC(precomputed=True)
            self.assertIsNone(pegasos_qsvc.quantum_kernel)
            self.assertTrue(pegasos_qsvc.precomputed)

        with self.subTest("PegasosQSVC with wrong parameters"):
            qkernel = QuantumKernel(
                feature_map=self.feature_map,
                quantum_instance=self.statevector_simulator)
            with self.assertRaises(ValueError):
                _ = PegasosQSVC(quantum_kernel=qkernel, precomputed=True)

        with self.subTest("PegasosQSVC with wrong type of kernel"):
            with self.assertRaises(TypeError):
                _ = PegasosQSVC(quantum_kernel=object())
Example #2
0
    def test_empty_kernel(self):
        """Test PegasosQSVC with empty QuantumKernel"""
        qkernel = QuantumKernel()
        pegasos_qsvc = PegasosQSVC(quantum_kernel=qkernel)

        with self.assertRaises(QiskitMachineLearningError):
            pegasos_qsvc.fit(self.sample_train, self.label_train)
Example #3
0
    def test_qsvc_4d(self):
        """Test PegasosQSVC with 4-dimensional input data"""
        qkernel = QuantumKernel(feature_map=self.feature_map_4d,
                                quantum_instance=self.statevector_simulator)

        pegasos_qsvc = PegasosQSVC(quantum_kernel=qkernel,
                                   C=1000,
                                   num_steps=self.tau)

        pegasos_qsvc.fit(self.sample_train_4d, self.label_train_4d)
        score = pegasos_qsvc.score(self.sample_test_4d, self.label_test_4d)
        self.assertEqual(score, 1.0)
Example #4
0
    def test_qsvc(self):
        """Test PegasosQSVC"""
        qkernel = QuantumKernel(feature_map=self.feature_map,
                                quantum_instance=self.statevector_simulator)

        pegasos_qsvc = PegasosQSVC(quantum_kernel=qkernel,
                                   C=1000,
                                   num_steps=self.tau)

        pegasos_qsvc.fit(self.sample_train, self.label_train)
        score = pegasos_qsvc.score(self.sample_test, self.label_test)

        self.assertEqual(score, 1.0)
Example #5
0
    def test_decision_function(self):
        """Test PegasosQSVC."""
        qkernel = QuantumKernel(feature_map=self.feature_map,
                                quantum_instance=self.statevector_simulator)

        pegasos_qsvc = PegasosQSVC(quantum_kernel=qkernel,
                                   C=1000,
                                   num_steps=self.tau)

        pegasos_qsvc.fit(self.sample_train, self.label_train)
        decision_function = pegasos_qsvc.decision_function(self.sample_test)

        self.assertTrue(
            np.all((decision_function > 0) == (self.label_test == 0)))
Example #6
0
    def test_precomputed_kernel(self):
        """Test PegasosQSVC with a precomputed kernel matrix"""
        qkernel = QuantumKernel(feature_map=self.feature_map,
                                quantum_instance=self.statevector_simulator)

        pegasos_qsvc = PegasosQSVC(C=1000,
                                   num_steps=self.tau,
                                   precomputed=True)

        # training
        kernel_matrix_train = qkernel.evaluate(self.sample_train,
                                               self.sample_train)
        pegasos_qsvc.fit(kernel_matrix_train, self.label_train)

        # testing
        kernel_matrix_test = qkernel.evaluate(self.sample_test,
                                              self.sample_train)
        score = pegasos_qsvc.score(kernel_matrix_test, self.label_test)

        self.assertEqual(score, 1.0)
Example #7
0
    def test_labels(self):
        """Test PegasosQSVC with different integer labels than {0, 1}"""
        qkernel = QuantumKernel(feature_map=self.feature_map,
                                quantum_instance=self.statevector_simulator)

        pegasos_qsvc = PegasosQSVC(quantum_kernel=qkernel,
                                   C=1000,
                                   num_steps=self.tau)

        label_train_temp = self.label_train.copy()
        label_train_temp[self.label_train == 0] = 2
        label_train_temp[self.label_train == 1] = 3

        label_test_temp = self.label_test.copy()
        label_test_temp[self.label_test == 0] = 2
        label_test_temp[self.label_test == 1] = 3

        pegasos_qsvc.fit(self.sample_train, label_train_temp)
        score = pegasos_qsvc.score(self.sample_test, label_test_temp)

        self.assertEqual(score, 1.0)
Example #8
0
    def test_save_load(self):
        """Tests save and load models."""
        features = np.array([[0, 0], [0.1, 0.2], [1, 1], [0.9, 0.8]])
        labels = np.array([0, 0, 1, 1])

        qkernel = QuantumKernel(feature_map=self.feature_map,
                                quantum_instance=self.statevector_simulator)

        regressor = PegasosQSVC(quantum_kernel=qkernel,
                                C=1000,
                                num_steps=self.tau)
        regressor.fit(features, labels)

        # predicted labels from the newly trained model
        test_features = np.array([[0.5, 0.5]])
        original_predicts = regressor.predict(test_features)

        # save/load, change the quantum instance and check if predicted values are the same
        file_name = os.path.join(tempfile.gettempdir(), "pegasos.model")
        regressor.save(file_name)
        try:
            regressor_load = PegasosQSVC.load(file_name)
            loaded_model_predicts = regressor_load.predict(test_features)

            np.testing.assert_array_almost_equal(original_predicts,
                                                 loaded_model_predicts)

            # test loading warning
            class FakeModel(SerializableModelMixin):
                """Fake model class for test purposes."""

                pass

            with self.assertRaises(TypeError):
                FakeModel.load(file_name)

        finally:
            os.remove(file_name)