Exemplo n.º 1
0
    def test_add(self):
        t1 = make_sparse_labeled_tensor(2)
        t2 = make_sparse_labeled_tensor(2)

        t1['cat', 'mammal'] = 1
        t1['cat', 'pet'] = 1
        t1['panda', 'mammal'] = 1
        t2['cat', 'pet'] = 1
        t2['bear', 'pet'] = -1

        t3 = t1 + t2
Exemplo n.º 2
0
    def test_add(self):
        t1 = make_sparse_labeled_tensor(2)
        t2 = make_sparse_labeled_tensor(2)

        t1['cat', 'mammal'] = 1
        t1['cat', 'pet'] = 1
        t1['panda', 'mammal'] = 1
        t2['cat', 'pet'] = 1
        t2['bear', 'pet'] = -1

        t3 = t1 + t2
Exemplo n.º 3
0
 def iteration(self, u, learn=False):
     """Train the eigenvector table with new vector u"""
     print "iteration = ", self._iteration
     mags = []
     u_copy = make_sparse_labeled_tensor(1, initial=u)   # copy
     for k in xrange(min(self._k, self._iteration+1)):
         mag, new_u = self.update_eigenvector(k, u_copy, learn)
         u_copy = new_u
         mags.append(mag)
     if learn:
         self._iteration += 1
         self._v[1:] = sorted(self._v[1:], reverse=True, key=lambda v: v.norm())
     return mags
Exemplo n.º 4
0
 def iteration(self, u, learn=False):
     """Train the eigenvector table with new vector u"""
     print "iteration = ", self._iteration
     mags = []
     u_copy = make_sparse_labeled_tensor(1, initial=u)  # copy
     for k in xrange(min(self._k, self._iteration + 1)):
         mag, new_u = self.update_eigenvector(k, u_copy, learn)
         u_copy = new_u
         mags.append(mag)
     if learn:
         self._iteration += 1
         self._v[1:] = sorted(self._v[1:],
                              reverse=True,
                              key=lambda v: v.norm())
     return mags
Exemplo n.º 5
0
    def update_eigenvector(self, k, u, learn=False):
        """Update eigenvector k with vector u, returning pair
        containing magnitude of eigenvector component and residue vector"""
        if learn:
            # Handle elementary cases
            if self._iteration < k:
                return 0.0, zerovec()

            if self._iteration == k:
                self._v[k] = make_sparse_labeled_tensor(1, initial=u)
                mag = self._v[k].norm()
                return mag, zerovec()

            # Compute weighting factors
            n = min(self._iteration, self._remembrance)
            if n < self._bootstrap:
                w_old = float(n - 1) / n
                w_new = 1.0 / n
            else:
                l = self._amnesia
                w_old = float(n - l) / n
                w_new = float(l) / n

            # Compute the attractor
            attractor = self.compute_attractor(k, u)

            # Approach attractor
            self._v[k] *= w_old
            self._v[k] += attractor * w_new

        # Calculate component magnitudes
        v_hat = self._v[k].hat()
        if k == 0:
            if self._auto_baseline: base_mag = self._v[k].norm()
            else: base_mag = 0.0
        else: base_mag = u * v_hat

        u_residue = u - (v_hat * base_mag)
        if k == 0:
            logger.debug('e0: %s' % str(self._v[k]))
            logger.debug('u: %s' % str(u))
            if learn:
                logger.debug('attractor: %s' % str(attractor))
            logger.debug('residue: %s' % str(u_residue))
            logger.debug('')
        return base_mag, u_residue
Exemplo n.º 6
0
def make_twit_vec(text, extras=None):
    words = list(clean_twitter(text)) or ['empty']
    twitvec = make_sparse_labeled_tensor(ndim=1)
    for word in words:
        if word.strip():
            if word[0] == '-':
                twitvec[word[1:]] += -1
            else:
                twitvec[word] += 1
    twitvec = twitvec.hat()
    if extras is not None:
        for extra in extras.split():
            if extra[0] == '-':
                twitvec[extra[1:]] = -0.1
            else:
                twitvec[extra] = 0.1
    return twitvec
Exemplo n.º 7
0
def make_twit_vec(text, extras=None):
    words = list(clean_twitter(text)) or [ 'empty' ]
    twitvec = make_sparse_labeled_tensor(ndim=1)
    for word in words:
        if word.strip():
            if word[0] == '-':
                twitvec[word[1:]] += -1
            else:
                twitvec[word] += 1
    twitvec = twitvec.hat()
    if extras is not None:
        for extra in extras.split():
            if extra[0] == '-':
                twitvec[extra[1:]] = -0.1
            else:
                twitvec[extra] = 0.1
    return twitvec
Exemplo n.º 8
0
    def update_eigenvector(self, k, u, learn=False):
        """Update eigenvector k with vector u, returning pair
        containing magnitude of eigenvector component and residue vector"""
        if learn:
            # Handle elementary cases
            if self._iteration < k:
                return 0.0, zerovec()

            if self._iteration == k:
                self._v[k] = make_sparse_labeled_tensor(1, initial=u)
                mag = self._v[k].norm()
                return mag, zerovec()

            # Compute weighting factors
            n = min(self._iteration, self._remembrance)
            if n < self._bootstrap:
                w_old = float(n - 1) / n
                w_new = 1.0 / n
            else:
                l = self._amnesia
                w_old = float(n - l) / n
                w_new = float(l) / n

            # Compute the attractor
            attractor = self.compute_attractor(k, u)

            # Approach attractor
            self._v[k] *= w_old
            self._v[k] += attractor * w_new

        # Calculate component magnitudes
        v_hat = self._v[k].hat()
        if k == 0:
            if self._auto_baseline: base_mag = self._v[k].norm()
            else: base_mag = 0.0
        else: base_mag = u * v_hat

        u_residue = u - (v_hat * base_mag)
        if k == 0:
            logger.debug('e0: %s' % str(self._v[k]))
            logger.debug('u: %s' % str(u))
            if learn:
                logger.debug('attractor: %s' % str(attractor))
            logger.debug('residue: %s' % str(u_residue))
            logger.debug('')
        return base_mag, u_residue
Exemplo n.º 9
0
def test_make_shape():
    labels = OrderedSet(list("abcde"))
    t = make_sparse_labeled_tensor(ndim=1, labels=[labels])
    eq_(t.shape[0], len(labels))
    eq_(t.tensor.shape[0], len(labels))
Exemplo n.º 10
0
def ez_matrix(rows, cols, vals):
    '''
    Simple way to make a matrix (2D sparse tensor).
    '''
    return make_sparse_labeled_tensor(ndim=2, initial=zip(zip(rows, cols), vals))
Exemplo n.º 11
0
def zerovec():
    return make_sparse_labeled_tensor(1)
Exemplo n.º 12
0
def zerovec():
    return make_sparse_labeled_tensor(1)
Exemplo n.º 13
0
def test_make_shape():
    labels = OrderedSet(list('abcde'))
    t = make_sparse_labeled_tensor(ndim=1, labels=[labels])
    eq_(t.shape[0], len(labels))
    eq_(t.tensor.shape[0], len(labels))
Exemplo n.º 14
0
 def setUp(self):
     self.tensor = make_sparse_labeled_tensor(2)
Exemplo n.º 15
0
def ez_matrix(rows, cols, vals):
    '''
    Simple way to make a matrix (2D sparse tensor).
    '''
    return make_sparse_labeled_tensor(ndim=2,
                                      initial=zip(zip(rows, cols), vals))
Exemplo n.º 16
0
 def stack_contains(self, cls):
     from csc.divisi.labeled_view import make_sparse_labeled_tensor
     return make_sparse_labeled_tensor(2).stack_contains(cls)
Exemplo n.º 17
0
def test_wrong_dims():
    from csc.divisi.labeled_view import make_sparse_labeled_tensor
    t1 = make_sparse_labeled_tensor(ndim=1)
    t2 = make_sparse_labeled_tensor(ndim=2)
    Blend([t1, t2])
Exemplo n.º 18
0
 def stack_contains(self, cls):
     from csc.divisi.labeled_view import make_sparse_labeled_tensor
     return make_sparse_labeled_tensor(2).stack_contains(cls)
Exemplo n.º 19
0
def test_wrong_dims():
    from csc.divisi.labeled_view import make_sparse_labeled_tensor
    t1 = make_sparse_labeled_tensor(ndim=1)
    t2 = make_sparse_labeled_tensor(ndim=2)
    Blend([t1, t2])
Exemplo n.º 20
0
 def setUp(self):
     self.tensor = make_sparse_labeled_tensor(2)