Esempio n. 1
0
File: dtw.py Progetto: colincsl/LCTM
    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
Esempio n. 4
0
File: dtw.py Progetto: colincsl/LCTM
    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