Beispiel #1
0
    def __call__(self):
        hmmdata = dict()

        for (name, tracks, probs, objids, coords) in  \
                self.dtable.iterby(self.ecopts.sortby, True):
            if tracks is None:
                hmmdata[name] = None
                continue
            elif probs is None:
                raise RuntimeError(("No prediction probabilities available. "
                                    "Try different hmm learing algorithm"))

            labelmapper = LabelMapper(np.unique(tracks),
                                      self.classdef.class_names.keys())

            # np.unique -> sorted ndarray
            idx = labelmapper.index_from_classdef(np.unique(tracks))
            idx.sort()
            probs = probs[:, :, idx]
            est = self._get_estimator(probs, labelmapper.label2index(tracks))
            est.constrain(self.hmmc(est, labelmapper))

            tracks2 = self.decode(tracks, probs, est)
            tracks2 = labelmapper.index2labels(np.array(tracks2, dtype=int))

            bucket = HmmBucket(tracks, tracks2, est.startprob, est.emis,
                               est.trans,
                               self.dtable.groups(self.ecopts.sortby,
                                                  name), tracks.shape[0],
                               objids, coords, self.ecopts.timelapse)
            hmmdata[name] = bucket
        return hmmdata
Beispiel #2
0
    def __call__(self):
        hmmdata = dict()

        for (name, tracks, probs, objids, coords) in  \
                self.dtable.iterby(self.ecopts.sortby, True):
            if tracks is probs is None:
                hmmdata[name] = None
                continue

            labelmapper = LabelMapper(np.unique(tracks),
                                      self.classdef.class_names.keys())

            # np.unique -> sorted ndarray
            idx = labelmapper.index_from_classdef(np.unique(tracks))
            idx.sort()
            # no prediction probabilities available
            if probs is not None:
                probs = probs[:, :, idx]
            est = self._get_estimator(probs, labelmapper.label2index(tracks))
            est.constrain(self.hmmc(est, labelmapper))

            # ugly sklearn
            hmm_ = MultinomialHMM(n_components=est.nstates)
            hmm_.startprob_ = est.startprob
            hmm_.transmat_ = est.trans
            hmm_.emissionprob_ = est.emis

            tracks2 = []
            for track in labelmapper.label2index(tracks):
                tracks2.append(hmm_.predict(track))
            tracks2 = labelmapper.index2labels(np.array(tracks2, dtype=int))

            bucket = HmmBucket(tracks,
                               tracks2,
                               est.startprob,
                               est.emis,
                               est.trans,
                               self.dtable.groups(self.ecopts.sortby, name),
                               tracks.shape[0],
                               objids,
                               coords,
                               self.ecopts.timelapse)
            hmmdata[name] = bucket
        return hmmdata
Beispiel #3
0
    def __call__(self):
        hmmdata = dict()

        for (name, tracks, probs, objids, coords) in  \
                self.dtable.iterby(self.ecopts.sortby, True):
            if tracks is None:
                hmmdata[name] = None
                continue

            elif probs is None:
                raise RuntimeError(("No prediction probabilities available. "
                                    "Try different hmm learing algorithm"))

            tracks, probs = self._filter_tracks(tracks, probs)
            labelmapper = LabelMapper(np.unique(tracks),
                                      self.classdef.names.keys())

            # np.unique -> sorted ndarray
            idx = labelmapper.index_from_classdef(np.unique(tracks))
            idx.sort()
            probs = probs[:, :, idx]

            est = self._get_estimator(probs, labelmapper.label2index(tracks))
            est.constrain(self.hmmc(est, labelmapper))

            tracks2 = self.decode(tracks, probs, est)
            tracks2 = labelmapper.index2labels(np.array(tracks2, dtype=int))

            bucket = HmmBucket(tracks,
                               tracks2,
                               est.startprob,
                               est.emis,
                               est.trans,
                               self.dtable.groups(self.ecopts.sortby, name),
                               tracks.shape[0],
                               objids,
                               coords,
                               self.ecopts.timelapse)
            hmmdata[name] = bucket
        return hmmdata
Beispiel #4
0
    def __call__(self):
        hmmdata = dict()

        for (name, tracks, probs, objids, coords) in  \
                self.dtable.iterby(self.ecopts.sortby, True):
            if tracks is probs is None:
                hmmdata[name] = None
                continue

            labelmapper = LabelMapper(np.unique(tracks),
                                      self.classdef.class_names.keys())

            # np.unique -> sorted ndarray
            idx = labelmapper.index_from_classdef(np.unique(tracks))
            idx.sort()
            # no prediction probabilities available
            if probs is not None:
                probs = probs[:, :, idx]
            est = self._get_estimator(probs, labelmapper.label2index(tracks))
            est.constrain(self.hmmc(est, labelmapper))

            # ugly sklearn
            hmm_ = MultinomialHMM(n_components=est.nstates)
            hmm_.startprob_ = est.startprob
            hmm_.transmat_ = est.trans
            hmm_.emissionprob_ = est.emis

            tracks2 = []
            for track in labelmapper.label2index(tracks):
                tracks2.append(hmm_.predict(track))
            tracks2 = labelmapper.index2labels(np.array(tracks2, dtype=int))

            bucket = HmmBucket(tracks, tracks2, est.startprob, est.emis,
                               est.trans,
                               self.dtable.groups(self.ecopts.sortby,
                                                  name), tracks.shape[0],
                               objids, coords, self.ecopts.timelapse)
            hmmdata[name] = bucket
        return hmmdata