def train(self, data, labels):
        """
        train the svm
        Args:
            data (dict): dictionary which maps each class to the points in the class
            class_labels (list): list of classes. For example: ['A', 'B']
        """
        labels = labels.astype(np.float)
        labels = labels * 2. - 1.
        kernel_matrix = self.construct_kernel_matrix(data, data, self.gamma)
        self._ret['kernel_matrix_training'] = kernel_matrix
        [alpha, b, support] = optimize_svm(kernel_matrix, labels)
        alphas = np.array([])
        svms = np.array([])
        yin = np.array([])
        for alphindex in range(len(support)):
            if support[alphindex]:
                alphas = np.vstack([alphas, alpha[alphindex]
                                    ]) if alphas.size else alpha[alphindex]
                svms = np.vstack([svms, data[alphindex]
                                  ]) if svms.size else data[alphindex]
                yin = np.vstack([yin, labels[alphindex]
                                 ]) if yin.size else labels[alphindex]

        self._ret['svm'] = {}
        self._ret['svm']['alphas'] = alphas
        self._ret['svm']['bias'] = b
        self._ret['svm']['support_vectors'] = svms
        self._ret['svm']['yin'] = yin
Esempio n. 2
0
    def train(self, data, labels):
        """
        train the svm
        Args:
            data (numpy.ndarray): NxD array, where N is the number of data,
                                  D is the feature dimension.
            labels (numpy.ndarray): Nx1 array, where N is the number of data
        """
        scaling = 1.0 if QuantumAlgorithm.is_statevector_backend(
            self.qalgo.backend) else None
        kernel_matrix = self.construct_kernel_matrix(data)
        labels = labels * 2 - 1  # map label from 0 --> -1 and 1 --> 1
        labels = labels.astype(np.float)
        [alpha, b, support] = optimize_svm(kernel_matrix,
                                           labels,
                                           scaling=scaling)
        support_index = np.where(support)
        alphas = alpha[support_index]
        svms = data[support_index]
        yin = labels[support_index]

        self._ret['kernel_matrix_training'] = kernel_matrix
        self._ret['svm'] = {}
        self._ret['svm']['alphas'] = alphas
        self._ret['svm']['bias'] = b
        self._ret['svm']['support_vectors'] = svms
        self._ret['svm']['yin'] = yin