def fit(self, X, Y): Xs_train = [] Ys_train = [] for i in range(len(X)): Xs, Ys = utils.segment_data(X[i], Y[i]) if self.normalize: Xs = [normalize(x) for x in Xs] Xs_train += Xs Ys_train += Ys self.Xs_train = Xs_train self.Ys_train = Ys_train self.n_train = len(Xs_train) self.n_classes = len(np.unique(Ys_train))
def fit(self, X, Y): Xs_train = [] Ys_train = [] for i in range(len(X)): Xs, Ys = utils.segment_data(X[i], Y[i]) if self.normalize: Xs = [normalize(x) for x in Xs] Xs_train += Xs Ys_train += Ys self.Xs_train = Xs_train self.Ys_train = Ys_train self.n_train = len(Xs_train) self.n_classes = len(np.unique(Ys_train))
def predict(self, X, Y, return_prob=False): if type(X) is list: out = [] for i in range(len(Xi)): out += [self.predict(model, X[i], Y[i], return_prob)] return out Xs, Ys = utils.segment_data(X, Y) n_segs = len(Xs) if self.normalize: Xs = [normalize(x) for x in Xs] Ps = np.zeros(n_segs, np.int) Ps_prob = np.zeros([self.n_classes, n_segs], np.float) top_scores = [np.inf] * self.n_neighbors for k in range(n_segs): scores = np.zeros(self.n_train, np.float) worst_best_score = np.inf for j in range(self.n_train): scores[j] = DTW(Xs[k][:, ::self.sample_rate], self.Xs_train[j][:, ::self.sample_rate], worst_best_score) if scores[j] < np.min(top_scores): idx = np.argmin(top_scores) top_scores[idx] = scores[j] worst_best_score = np.max(top_scores) argsorted = scores.argsort() neighbors = [ self.Ys_train[a] for a in argsorted[:self.n_neighbors] ] neighbors_scores = np.array( [scores[a] for a in argsorted[:self.n_neighbors]]) Ps_prob[:, k] = np.histogram(neighbors, self.n_classes, [0, self.n_classes])[0] * 1. Ps_prob[:, k] /= Ps_prob[:, k].sum() Ps[k] = scipy.stats.mode(neighbors)[0][0] if return_prob: return Ps_prob else: return Ps
def predict(self, X, Y, return_prob=False): if type(X) is list: out = [] for i in range(len(Xi)): out += [self.predict(model, X[i], Y[i], return_prob)] return out Xs, Ys = utils.segment_data(X, Y) n_segs = len(Xs) if self.normalize: Xs = [normalize(x) for x in Xs] Ps = np.zeros(n_segs, np.int) Ps_prob = np.zeros([self.n_classes, n_segs], np.float) top_scores = [np.inf]*self.n_neighbors for k in range(n_segs): scores = np.zeros(self.n_train, np.float) worst_best_score = np.inf for j in range(self.n_train): scores[j] = DTW(Xs[k][:,::self.sample_rate], self.Xs_train[j][:,::self.sample_rate], worst_best_score) if scores[j] < np.min(top_scores): idx = np.argmin(top_scores) top_scores[idx] = scores[j] worst_best_score = np.max(top_scores) argsorted = scores.argsort() neighbors = [self.Ys_train[a] for a in argsorted[:self.n_neighbors]] neighbors_scores = np.array([scores[a] for a in argsorted[:self.n_neighbors]]) Ps_prob[:,k] = np.histogram(neighbors, self.n_classes, [0, self.n_classes])[0]*1. Ps_prob[:,k] /= Ps_prob[:,k].sum() Ps[k] = scipy.stats.mode(neighbors)[0][0] if return_prob: return Ps_prob else: return Ps
def clf_(p, y): segs_p, segs_y = utils.segment_data(p[:,None].T, y) segs = np.array([scipy.stats.mode(s)[0][0] for s in segs_p]) return np.mean(segs == segs_y)*100