def poisson_se_multiclust(data, k, n_runs=10, **se_params):
    """
    Initializes state estimation using a consensus of several
    fast clustering/dimensionality reduction algorithms.

    It does a consensus of 8 truncated SVD - k-means rounds, and uses the
    basic nmf_init to create starting points.
    """
    clusters = []
    norm_data = cell_normalize(data)
    if sparse.issparse(data):
        log_data = data.log1p()
        log_norm = norm_data.log1p()
    else:
        log_data = np.log1p(data)
        log_norm = np.log1p(norm_data)
    tsvd_50 = TruncatedSVD(50)
    tsvd_k = TruncatedSVD(k)
    km = KMeans(k)
    tsvd1 = tsvd_50.fit_transform(data.T)
    tsvd2 = tsvd_k.fit_transform(data.T)
    tsvd3 = tsvd_50.fit_transform(log_data.T)
    tsvd4 = tsvd_k.fit_transform(log_data.T)
    tsvd5 = tsvd_50.fit_transform(norm_data.T)
    tsvd6 = tsvd_k.fit_transform(norm_data.T)
    tsvd7 = tsvd_50.fit_transform(log_norm.T)
    tsvd8 = tsvd_k.fit_transform(log_norm.T)
    tsvd_results = [tsvd1, tsvd2, tsvd3, tsvd4, tsvd5, tsvd6, tsvd7, tsvd8]
    clusters = []
    for t in tsvd_results:
        clust = km.fit_predict(t)
        clusters.append(clust)
    clusterings = np.vstack(clusters)
    consensus = CE.cluster_ensembles(clusterings, verbose=False, N_clusters_max=k)
    init_m, init_w = nmf_init(data, consensus, k, 'basic')
    M, W, ll = poisson_estimate_state(data, k, init_means=init_m, init_weights=init_w, **se_params)
    return M, W, ll
Initializes state estimation using a consensus of several
    fast clustering/dimensionality reduction algorithms.

    It does a consensus of 8 truncated SVD - k-means rounds, and uses the
    basic nmf_init to create starting points.