def fit(self, X, Y): self.class_labels = np.array(sorted(set(Y))) D = KMeans(n_clusters=self.n_atoms, init_size=self.n_atoms*3) D.fit(np.vstack(X)[:200000]) D = D.cluster_centers_ D = normalize(D) self.D_mean = np.mean(D, axis=0) self.D = D - self.D_mean self.D_idxs = [] self.clfs = [] for i in xrange(self.n_nodes): idxs = np.random.permutation(self.n_atoms)[:self.n_features] idxs = np.random.permutation(len(X[0][0]))[:self.n_features] enc_X = [] for x in X: x = normalize(x) x = x - self.D_mean enc_X.append(bow(np.argmax(np.abs(np.dot(self.D[:, idxs], x.T[idxs, :])), axis=0), self.n_atoms)) clf = LinearSVC() clf.fit(enc_X, Y) self.clfs.append(clf) self.D_idxs.append(idxs)
def predict(self, X): predictions = [] for idxs, clf in zip(self.D_idxs, self.clfs): enc_X = [] for x in X: x = normalize(x) x = x - self.D_mean enc_X.append(bow(np.argmax(np.abs(np.dot(self.D[:, idxs], x.T[idxs, :])), axis=0), self.n_atoms)) predictions.append(clf.decision_function(enc_X)) predictions = np.array(predictions) return self.class_labels[np.argmax(np.sum(predictions, axis=0), axis=1)]
run_alpha = alphas run_beta = betas else: run_alpha = alphas[:5] run_beta = betas[:5] sample_dims = np.linspace(0, ws-1, int(subsample_pct*ws)).astype(int) # sample_dims = np.random.permutation(ws)[:int(subsample_pct*ws)] X_window = [x[:, sample_dims] for x in X] X_Kmeans = np.vstack(X_window)[:KMeans_tr_size] num_X = len(np.vstack(X_window)) D = KMeans(n_clusters=D_atoms, init_size=D_atoms*3) D.fit(X_Kmeans) D = D.cluster_centers_ D = normalize(D) D_mean = np.mean(D, axis=0) D = D - D_mean plt_ops, plt_accs = accuracy_test(names, num_l1_node, alphas, betas, dict_partition, dim_partition, X_window, Y, D, D_mean, sss, model, num_l2_node) # plt_ops, plt_accs = candidate_test(names, num_nodes, alphas, betas, # dict_partition, dim_partition, X_window, # D, D_mean) plt_dict[name] = (plt_ops, plt_accs)