Ejemplo n.º 1
0
    def train(self, X_train, y_train, param_set=None):
        '''train the classifier'''

        n_classes = len(set(y_train))

        if self.class_dict_coder is not None:
            # ksvd in each class dictionary
            self.class_dict_coder.mmap = self.mmap
            self.class_dict_coder.n_jobs = self.n_jobs
            self.D = self.class_dict_coder(X_train, y_train)
            self.n_class_atoms = self.class_dict_coder.n_class_atoms
        else:
            # every datapoint is an atom
            self.n_class_atoms = (np.zeros(n_classes) +
                                  self.n_class_samples).astype(int)
            n_total_atoms = np.sum(self.n_class_atoms)
            n_features = X_train.shape[0]
            D = np.zeros((n_features, n_total_atoms))
            for c in range(n_classes):
                x_c = y_train == c
                Xc = X_train[:, x_c]
                n_class_samples = Xc.shape[1]

                Dc = init_dictionary(Xc,
                                     self.n_class_atoms[c],
                                     method='data',
                                     normalize=True)
                base = c * self.n_class_atoms[c]
                offset = self.n_class_atoms[c]
                D[:, base:base + offset] = Dc

            self.D = D
Ejemplo n.º 2
0
    def test_init_dictionary(self):
        X = np.array([
            [1, 2, 3, 4, 5],
            [0, 2, 1, 2, 1]
        ])
        n_datapoints = 5
        n_atoms = 3

        D = init_dictionary(X, n_atoms, method='data', return_unused_data=False, normalize=False)

        self.assertEqual(D.shape, (2, n_atoms))
        self.assertEqual(np.sum(np.array_equal(D[:, i], X[:, j])
                                for i in range(n_atoms) for j in range(n_datapoints)), n_atoms)
Ejemplo n.º 3
0
    def train(self, X_train, y_train, param_set=None):
        '''train the classifier'''

        n_classes = len(set(y_train))

        if self.D is None:
            if self.class_dict_coder is not None:
                # ksvd in each class dictionary
                self.class_dict_coder.mmap = self.mmap
                self.class_dict_coder.n_jobs = self.n_jobs
                self.D = self.class_dict_coder(X_train, y_train)
                self.n_class_atoms = self.class_dict_coder.n_class_atoms
            else:
                # every datapoint is an atom
                self.n_class_atoms = (np.zeros(n_classes) +
                                      self.n_class_samples).astype(int)
                n_total_atoms = np.sum(self.n_class_atoms)
                n_features = X_train.shape[0]
                D = np.zeros((n_features, n_total_atoms))
                for c in range(n_classes):
                    x_c = y_train == c
                    Xc = X_train[:, x_c]
                    n_class_samples = Xc.shape[1]

                    Dc = init_dictionary(Xc,
                                         self.n_class_atoms[c],
                                         method='data',
                                         normalize=True)
                    base = c * self.n_class_atoms[c]
                    offset = self.n_class_atoms[c]
                    D[:, base:base + offset] = Dc

                self.D = D

        from lyssa.classify import linear_svm
        self.lsvm = linear_svm()

        # if not self.features_extracted:
        if self.method == "global":
            self.Z_train = global_src_features(X_train,
                                               self.D,
                                               self.sparse_coder,
                                               self.n_class_atoms,
                                               n_jobs=self.n_jobs)
        elif self.method == "local":
            pass
        # self.features_extracted = True
        self.lsvm.train(self.Z_train, y_train, param_set=param_set)
Ejemplo n.º 4
0
    def test_init_dictionary(self):
        X = np.array([[1, 2, 3, 4, 5], [0, 2, 1, 2, 1]])
        n_datapoints = 5
        n_atoms = 3

        D = init_dictionary(X,
                            n_atoms,
                            method='data',
                            return_unused_data=False,
                            normalize=False)

        self.assertEqual(D.shape, (2, n_atoms))
        self.assertEqual(
            np.sum(
                np.array_equal(D[:, i], X[:, j]) for i in range(n_atoms)
                for j in range(n_datapoints)), n_atoms)