Beispiel #1
0
    def __init__(self,
                 filename,
                 window=10,
                 size=600,
                 decay=8.0,
                 balanced=False,
                 prior=True):
        self._window = window
        self._size = size
        self._decay = decay
        self._prior_pred = prior
        self._stopwordslist = []
        self._props = {
            "window": window,
            "size": size,
            "decay": decay,
            "prior": prior,
            "balanced": balanced
        }
        super(Ensemble, self).__init__(filename)

        self.collaborative = {}
        self.skipgram = {}
        self.cbowsim = {}
        self.collaborative = CollaborativeFiltering(filename, 27, 300, decay,
                                                    balanced, True)
        self.cbowsim = CbowSim(filename, 45, 275, decay, balanced, True)
        self.skipgram = SkipGram(filename, 23, 350, decay, balanced, False)
        self._models = ["collaborative", "cbowsim", "skipgram"]
    def __init__(self, filename, window=10, size=600, decay=8.0, balanced=False, prior=True):
        self._window = window
        self._size = size
        self._decay = decay
        self._prior_pred = prior
        self._stopwordslist = []
        self._props = {"window": window, "size": size, "decay": decay,
                       "prior": prior, "balanced": balanced}
        super(Ensemble, self).__init__(filename)

        self.collaborative = {}
        self.skipgram = {}
        self.cbowsim = {}
        self.collaborative = CollaborativeFiltering(filename, 27, 300, decay, balanced, True)
        self.cbowsim = CbowSim(filename, 45, 275, decay, balanced, True)
        self.skipgram = SkipGram(filename, 23, 350, decay, balanced, False)
        self._models = ["collaborative", "cbowsim", "skipgram"]
Beispiel #3
0
class Ensemble(BinaryPredictor):
    def __init__(self,
                 filename,
                 window=10,
                 size=600,
                 decay=8.0,
                 balanced=False,
                 prior=True):
        self._window = window
        self._size = size
        self._decay = decay
        self._prior_pred = prior
        self._stopwordslist = []
        self._props = {
            "window": window,
            "size": size,
            "decay": decay,
            "prior": prior,
            "balanced": balanced
        }
        super(Ensemble, self).__init__(filename)

        self.collaborative = {}
        self.skipgram = {}
        self.cbowsim = {}
        self.collaborative = CollaborativeFiltering(filename, 27, 300, decay,
                                                    balanced, True)
        self.cbowsim = CbowSim(filename, 45, 275, decay, balanced, True)
        self.skipgram = SkipGram(filename, 23, 350, decay, balanced, False)
        self._models = ["collaborative", "cbowsim", "skipgram"]

    def train(self, filename):
        self.collaborative.train(filename)
        self.cbowsim.train(filename)
        self.skipgram.train(filename)
        self._prior = self.cbowsim._prior
        self._weights = {m: defaultdict(lambda: 0) for m in self._models}

        with open(filename) as f:
            for line in f:
                feed_events = line.split("|")[2].split(" ")
                actual = line.split("|")[0].split(",")

                cf_preds = self.collaborative.predict(feed_events)
                cbow_preds = self.cbowsim.predict(feed_events)
                skip_preds = self.skipgram.predict(feed_events)

                for diag in self._diags:
                    if diag in actual:
                        self._weights["collaborative"][diag] += cf_preds[diag]
                        self._weights["cbowsim"][diag] += cbow_preds[diag]
                        self._weights["skipgram"][diag] += skip_preds[diag]
                    else:
                        self._weights["collaborative"][
                            diag] += 1 - cf_preds[diag]
                        self._weights["cbowsim"][diag] += 1 - cbow_preds[diag]
                        self._weights["skipgram"][diag] += 1 - skip_preds[diag]

            # Normalize weights
            for diag in self._diags:
                norm = (self._weights["collaborative"][diag] +
                        self._weights["cbowsim"][diag] +
                        self._weights["skipgram"][diag])
                self._weights["collaborative"][diag] /= norm
                self._weights["cbowsim"][diag] /= norm
                self._weights["skipgram"][diag] /= norm

            print(self._weights)

    def predict(self, feed_events):
        cf_preds = self.collaborative.predict(feed_events)
        cbow_preds = self.cbowsim.predict(feed_events)
        skip_preds = self.skipgram.predict(feed_events)
        predictions = {}
        for diag in self._diags:
            predictions[
                diag] = cf_preds[diag] * self._weights["collaborative"][diag]
            predictions[
                diag] += cbow_preds[diag] * self._weights["cbowsim"][diag]
            predictions[
                diag] += skip_preds[diag] * self._weights["skipgram"][diag]
        return predictions
class Ensemble(BinaryPredictor):
    def __init__(self, filename, window=10, size=600, decay=8.0, balanced=False, prior=True):
        self._window = window
        self._size = size
        self._decay = decay
        self._prior_pred = prior
        self._stopwordslist = []
        self._props = {"window": window, "size": size, "decay": decay,
                       "prior": prior, "balanced": balanced}
        super(Ensemble, self).__init__(filename)

        self.collaborative = {}
        self.skipgram = {}
        self.cbowsim = {}
        self.collaborative = CollaborativeFiltering(filename, 27, 300, decay, balanced, True)
        self.cbowsim = CbowSim(filename, 45, 275, decay, balanced, True)
        self.skipgram = SkipGram(filename, 23, 350, decay, balanced, False)
        self._models = ["collaborative", "cbowsim", "skipgram"]

    def train(self, filename):
        self.collaborative.train(filename)
        self.cbowsim.train(filename)
        self.skipgram.train(filename)
        self._prior = self.cbowsim._prior
        self._weights = {m: defaultdict(lambda: 0) for m in self._models}

        with open(filename) as f:
            for line in f:
                feed_events = line.split("|")[2].split(" ")
                actual = line.split("|")[0].split(",")

                cf_preds = self.collaborative.predict(feed_events)
                cbow_preds = self.cbowsim.predict(feed_events)
                skip_preds = self.skipgram.predict(feed_events)

                for diag in self._diags:
                    if diag in actual:
                        self._weights["collaborative"][diag] += cf_preds[diag]
                        self._weights["cbowsim"][diag] += cbow_preds[diag]
                        self._weights["skipgram"][diag] += skip_preds[diag]
                    else:
                        self._weights["collaborative"][diag] += 1 - cf_preds[diag]
                        self._weights["cbowsim"][diag] += 1 - cbow_preds[diag]
                        self._weights["skipgram"][diag] += 1 - skip_preds[diag]

            # Normalize weights
            for diag in self._diags:
                norm = (self._weights["collaborative"][diag] + self._weights["cbowsim"][diag] +
                        self._weights["skipgram"][diag])
                self._weights["collaborative"][diag] /= norm
                self._weights["cbowsim"][diag] /= norm
                self._weights["skipgram"][diag] /= norm

            print(self._weights)

    def predict(self, feed_events):
        cf_preds = self.collaborative.predict(feed_events)
        cbow_preds = self.cbowsim.predict(feed_events)
        skip_preds = self.skipgram.predict(feed_events)
        predictions = {}
        for diag in self._diags:
            predictions[diag] = cf_preds[diag] * self._weights["collaborative"][diag]
            predictions[diag] += cbow_preds[diag] * self._weights["cbowsim"][diag]
            predictions[diag] += skip_preds[diag] * self._weights["skipgram"][diag]
        return predictions