コード例 #1
0
    def argmax(self, w, feat_idx, training):
        feature_vector = self.get_features().get_feature_vector(feat_idx)
        label = None
        if training == True:
            label = int(
                RealNumber.obtain_from_generic(
                    self.get_labels().get_label(feat_idx)).value)
        ypred = 0
        max_score = -1e10
        for c in xrange(self.n_classes):
            score = 0.0
            for i in xrange(self.n_feats):
                score += w[i + self.n_feats * c] * feature_vector[i]
            if training == True:
                score += (c != label)
            if score > max_score:
                max_score = score
                ypred = c

        res = ResultSet()
        res.score = max_score
        res.psi_pred = RealVector(self.dim)
        res.psi_pred.zero()
        for i in xrange(self.n_feats):
            res.psi_pred[i + self.n_feats * ypred] = feature_vector[i]
        res.argmax = RealNumber(ypred)
        if training == True:
            res.delta = (label != ypred)
            res.psi_truth = RealVector(self.dim)
            res.psi_truth.zero()
            for i in xrange(self.n_feats):
                res.psi_truth[i + self.n_feats * label] = feature_vector[i]
            for i in xrange(self.n_feats):
                res.score -= w[i + self.n_feats * label] * feature_vector[i]
        return res