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
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