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
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
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)
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)
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')
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]), )
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] ),