def _embed(self, A1, A2): if self.n_components is None: num_dims1 = select_dimension(A1)[0][-1] num_dims2 = select_dimension(A2)[0][-1] self.n_components = max(num_dims1, num_dims2) ase = AdjacencySpectralEmbed(n_components=self.n_components) X1_hat = ase.fit_transform(A1) X2_hat = ase.fit_transform(A2) if isinstance(X1_hat, tuple) and isinstance(X2_hat, tuple): X1_hat = np.concatenate(X1_hat, axis=-1) X2_hat = np.concatenate(X2_hat, axis=-1) elif isinstance(X1_hat, tuple) ^ isinstance(X2_hat, tuple): msg = ("input graphs do not have same directedness. " "consider symmetrizing the directed graph.") raise ValueError(msg) return X1_hat, X2_hat
xticklabels=False, yticklabels=False, ) stashfig("agglomerative-path-dist-mat" + basename) # %% [markdown] # ## from graspy.embed import select_dimension print("Running CMDS on path dissimilarity...") X = path_dist_mat cmds = ClassicalMDS(dissimilarity="precomputed", n_components=int(np.ceil(np.log2(np.min(X.shape))))) path_embed = cmds.fit_transform(X) elbows, elbow_vals = select_dimension(cmds.singular_values_, n_elbows=3) rng = np.arange(1, len(cmds.singular_values_) + 1) elbows = np.array(elbows) fig, ax = plt.subplots(1, 1, figsize=(8, 4)) pc = ax.scatter(elbows, elbow_vals, color="red", label="ZG") pc.set_zorder(10) ax.plot(rng, cmds.singular_values_, "o-") ax.legend() stashfig("cmds-screeplot" + basename) # %% [markdown] # ## pairplot(path_embed, alpha=0.02) stashfig("cmds-pairs-all" + basename) # %% [markdown]
agmm = AutoGMMCluster( min_components=2, max_components=50, affinity=["euclidean", "manhattan"], max_agglom_size=3000, n_jobs=-2, verbose=10, ) agmm.fit(all_hop_hist.T) # %% [markdown] # ## from graspy.embed import select_dimension select_dimension(all_hop_hist.T, n_elbows=5) #%% from graspy.embed import selectSVD from graspy.plot import pairplot n_elbows = 3 U, S, V = selectSVD(all_hop_hist.T, n_elbows=n_elbows) plot_df = pd.DataFrame(data=U) plot_df["label"] = meta["merge_class"].values pg = sns.PairGrid(plot_df, hue="label", palette=CLASS_COLOR_DICT, vars=np.arange(U.shape[1]), height=4)
elif dim_reduce == "tsne": best_embed = None best_kl = np.inf n_tsne = 10 for i in range(n_tsne): manifold = TSNE(metric="precomputed") path_embed = manifold.fit_transform(X) kl = manifold.kl_divergence_ print(kl) if kl < best_kl: best_embed = path_embed best_kl = kl path_embed = best_embed if dim_reduce in ["cmds", "iso"]: elbows, elbow_vals = select_dimension(sing_vals, n_elbows=3) elbows = np.array(elbows) rng = np.arange(1, len(sing_vals) + 1) # screeplot fig, ax = plt.subplots(1, 1, figsize=(8, 4)) ax.plot(rng, sing_vals, "o-") pc = ax.scatter(elbows, elbow_vals, color="red", label="ZG") pc.set_zorder(100) # put red above ax.legend() stashfig(f"screeplot" + basename) # pairplot of full embedding pairplot(path_embed, alpha=0.02) else:
joint_embed = omni.fit_transform(embed_adjs) print(joint_embed[0].shape) # %% [markdown] # ## meta = mg.meta lp_inds, rp_inds = get_paired_inds(meta) left_inds = meta[meta["left"]]["inds"] right_inds = meta[meta["right"]]["inds"] cat_embed = np.concatenate(joint_embed, axis=-1) for e in cat_embed: e[left_inds] = e[left_inds] @ orthogonal_procrustes( e[lp_inds], e[rp_inds])[0] cat_embed = np.concatenate(cat_embed, axis=-1) print(select_dimension(cat_embed, n_elbows=3)) U, S, Vt = selectSVD(cat_embed, n_elbows=3) pg = pairplot(U, labels=meta["merge_class"].values, palette=CLASS_COLOR_DICT, size=20, alpha=0.4) pg._legend.remove() stashfig("omni-reduced-dim") # %% [markdown] # ## results = crossval_cluster(U,