Beispiel #1
0
def alternating_alignments_nonlinear(X,Y,proj_align,corr_align,threshold,max_iters):
  corr = Correspondence(pairs=np.array(((0,0),(X.shape[0]-1,Y.shape[0]-1))))
  X_proj,Y_proj = proj_align(X,Y,corr)
  for it in xrange(max_iters):
    new_corr = corr_align(X_proj,Y_proj)
    if corr.dist_from(new_corr) < threshold:
      return new_corr, X_proj, Y_proj
    corr = new_corr
    X_proj,Y_proj = proj_align(X_proj,Y_proj,corr)
  return corr, X_proj, Y_proj
Beispiel #2
0
def alternating_alignments(X,Y,proj_align,corr_align,threshold,max_iters):
  corr = Correspondence(pairs=np.array(((0,0),(X.shape[0]-1,Y.shape[0]-1))))
  aln = TrivialAlignment(X,Y)
  X_proj,Y_proj = X.copy(), Y.copy()  # same as aln.project(X,Y)
  for it in xrange(max_iters):
    aln.apply_transform(proj_align(X_proj,Y_proj,corr))
    X_proj,Y_proj = aln.project(X,Y)
    new_corr = corr_align(X_proj,Y_proj)
    if corr.dist_from(new_corr) < threshold:
      return new_corr, aln
    corr = new_corr
  return corr, aln
Beispiel #3
0
def dtw(X, Y, metric=SquaredL2, debug=False):
    '''Dynamic Time Warping'''
    dist = metric.between(X, Y)
    if debug:
        path = _python_dtw_path(dist)
    else:
        path = _dtw_path(dist)
    return Correspondence(pairs=path)
Beispiel #4
0
    def proposeCorrespondence(self, initialObject, targetObject, conceptMappings, flipTargetObject, oldCodelet):
        from correspondence import Correspondence

        correspondence = Correspondence(initialObject, targetObject, conceptMappings, flipTargetObject)
        for mapping in conceptMappings:
            mapping.initialDescriptionType.buffer = 100.0
            mapping.initialDescriptor.buffer = 100.0
            mapping.targetDescriptionType.buffer = 100.0
            mapping.targetDescriptor.buffer = 100.0
        mappings = correspondence.distinguishingConceptMappings()
        urgency = sum([mapping.strength() for mapping in mappings])
        numberOfMappings = len(mappings)
        if urgency:
            urgency /= numberOfMappings
        bin = self.getUrgencyBin(urgency)
        logging.info('urgency: %s, number: %d, bin: %d' % (urgency, numberOfMappings, bin))
        self.newCodelet('correspondence-strength-tester', oldCodelet, urgency, correspondence)
Beispiel #5
0
    def proposeCorrespondence(self, initialObject, targetObject,
                              conceptMappings, flipTargetObject, oldCodelet):
        from correspondence import Correspondence

        correspondence = Correspondence(initialObject, targetObject,
                                        conceptMappings, flipTargetObject)
        for mapping in conceptMappings:
            mapping.initialDescriptionType.buffer = 100.0
            mapping.initialDescriptor.buffer = 100.0
            mapping.targetDescriptionType.buffer = 100.0
            mapping.targetDescriptor.buffer = 100.0
        mappings = correspondence.distinguishingConceptMappings()
        urgency = sum([mapping.strength() for mapping in mappings])
        numberOfMappings = len(mappings)
        if urgency:
            urgency /= numberOfMappings
        binn = getUrgencyBin(urgency)
        logging.info('urgency: %s, number: %d, bin: %d', urgency,
                     numberOfMappings, binn)
        self.newCodelet('correspondence-strength-tester', oldCodelet, urgency,
                        correspondence)
if __name__ == '__main__':
    # simple usage example / visual test case
    from matplotlib import pyplot
    from viz import show_neighbor_graph
    from util import Timer
    from correspondence import Correspondence
    from synthetic_data import cylinder

    n = 300
    knn = 5
    out_dim = 2

    X = cylinder(np.linspace(0, 4, n))
    W = neighbor_graph(X=X, k=knn)
    corr = Correspondence(matrix=W)

    with Timer('LapEig'):
        le_embed = lapeig(W=W, num_vecs=out_dim)
    with Timer('Linear LapEig'):
        # lapeig_linear returns a projector, not an embedding
        lel_embed = np.dot(X, lapeig_linear(X=X, W=W, num_vecs=out_dim, k=knn))
    with Timer('Isomap'):
        im_embed = isomap(X=X, num_vecs=out_dim, k=knn)
    with Timer('LLE'):
        lle_embed = lle(X=X, num_vecs=out_dim, k=knn)
    with Timer('SFA'):
        sfa_embed = np.dot(X, slow_features(X=X, num_vecs=out_dim))

    show_neighbor_graph(X, corr, 'Original space')
Beispiel #7
0
def gen_data(n, three_d=False):
    t = np.linspace(0, 5, n)
    if three_d:
        X = swiss_roll(t, lambda A: np.sin(A)**2)
        Y = np.vstack((np.sin(t)**2, t, np.zeros(n))).T
    else:
        X = spiral(t)
        Y = X[:, (1, 0)]  # swap x and y axes
    return add_noise(X, 0.05), add_noise(Y, 0.05)


if __name__ == '__main__':
    n = 500
    d = 3
    X, Y = gen_data(n, d == 3)
    corr = Correspondence(matrix=np.eye(n))
    Wx = neighbor_graph(X, k=5)
    Wy = neighbor_graph(Y, k=5)

    lin_aligners = (
        ('no alignment', lambda: TrivialAlignment(X, Y)),
        ('affine', lambda: Affine(X, Y, corr, d)),
        ('procrustes', lambda: Procrustes(X, Y, corr, d)),
        ('cca', lambda: CCA(X, Y, corr, d)),
        ('cca_v2', lambda: CCAv2(X, Y, d)),
        ('linear manifold', lambda: ManifoldLinear(X, Y, corr, d, Wx, Wy)),
        ('ctw', lambda: ctw(X, Y, d)[1]),
        ('manifold warping',
         lambda: manifold_warping_linear(X, Y, d, Wx, Wy)[1]),
    )
Beispiel #8
0
file = "expr.RData"
rf = r['load'](file)

dayExpr = pandas2ri.ri2py_dataframe(r['dayExpr'])
nightExpr = pandas2ri.ri2py_dataframe(r['nightExpr'])

X = dayExpr.as_matrix()  # datWorm.iloc[:, 0:datWorm.shape[1]].as_matrix()
Y = nightExpr.as_matrix()  # datFly.iloc[:, 0:datFly.shape[1]].as_matrix()
n = 17695
d = 3

X_normalized = preprocessing.normalize(X, norm='l2').T
Y_normalized = preprocessing.normalize(Y, norm='l2')[0:13, :].T

corr = Correspondence(
    matrix=np.eye(n))  # Correspondence(matrix=corr.as_matrix())
Wx = neighbor_graph(X_normalized, k=5)
Wy = neighbor_graph(Y_normalized, k=5)

lin_aligners = (
    ('no alignment', lambda: TrivialAlignment(X_normalized, Y_normalized, d)),
    # ('affine',           lambda: Affine(X,Y,corr,d)),
    # ('procrustes',       lambda: Procrustes(X,Y,corr,d)),
    ('cca', lambda: CCA(X_normalized, Y_normalized, corr, d)),
    # ('cca_v2',           lambda: CCAv2(X,Y,d)),
    ('linear manifold',
     lambda: ManifoldLinear(X_normalized, Y_normalized, corr, d, Wx, Wy)),
    ('ctw', lambda: ctw(X_normalized, Y_normalized, d)[1]),
    ('manifold warping',
     lambda: manifold_warping_linear(X_normalized, Y_normalized, d, Wx, Wy)[1]
     ),