Exemplo n.º 1
0
 def test_cluster(self):
     data = self.dat['Dat']
     assignments, centers = uncurl.poisson_cluster(data, 3)
     self.assertEqual(assignments.shape[0], data.shape[1])
     self.assertEqual(centers.shape[0], data.shape[0])
     # just checking that the values are valid
     self.assertFalse(np.isnan(centers).any())
Exemplo n.º 2
0
 def test_cluster(self):
     data = self.data
     assignments, centers = uncurl.poisson_cluster(data, 2)
     self.assertEqual(assignments.shape[0], data.shape[1])
     self.assertEqual(centers.shape[0], data.shape[0])
     # just checking that the values are valid
     self.assertFalse(np.isnan(centers).any())
     self.assertTrue(purity(assignments, self.labs) > 0.8)
Exemplo n.º 3
0
 def test_simulation(self):
     """
     Basically this is to test that the Poisson EM can correctly separate
     clusters in simulated data.
     """
     centers = np.array([[1, 10, 20], [1, 11, 1], [50, 1, 100]])
     centers = centers.astype(float)
     data, labs = generate_poisson_data(centers, 500)
     data = data.astype(float)
     assignments, c_centers = uncurl.poisson_cluster(data, 3)
     distances = np.zeros((3, 3))
     for i in range(3):
         for j in range(3):
             distances[i, j] = uncurl.poisson_dist(centers[:, i],
                                                   c_centers[:, j])
     self.assertTrue(purity(assignments, labs) > 0.8)
Exemplo n.º 4
0
from scipy.io import loadmat
import numpy as np
import matplotlib.pyplot as plt

import uncurl
from uncurl.lineage import fourier_series

if __name__ == '__main__':
    dat = loadmat('data/BranchedSynDat.mat')
    data = dat['Dat'].astype(float)
    # Poisson clustering
    assignments, centers = uncurl.poisson_cluster(data, 3)
    # State estimation
    #means, weights = uncurl.poisson_estimate_state(data, 3, max_iters=5)
    means, weights = np.load('means_weights.npy')
    # dimensionality reduction
    X = uncurl.dim_reduce(means, weights, 2)
    proj = np.dot(X.T, weights)
    cluster_curves, cluster_fitted_vals, cluster_edges, cluster_assignments = uncurl.lineage(
        means, weights, curve_function='poly')
    # dimensionality reduction with true data
    true_weights = dat['X']
    true_means = dat['M']
    X = uncurl.dim_reduce(true_means, true_weights, 2)
    proj_true = np.dot(X.T, true_weights)
    true_curves, true_fitted, true_edges, true_assignments = uncurl.lineage(
        true_means, true_weights)
    # plotting dimensionality reduction, fitted curves
    plt.clf()
    plt.cla()
    plt.title('Dimensionality reduction plot')
Exemplo n.º 5
0
from scipy.io import loadmat
import numpy as np
import matplotlib.pyplot as plt

import uncurl
from uncurl.evaluation import purity

if __name__ == '__main__':
    dat = loadmat('data/SCDE_test.mat')
    data = dat['dat'].toarray()
    centers, assignments = uncurl.kmeans_pp(data, 2)
    lls = uncurl.poisson_ll(data, centers)
    # Poisson clustering
    assignments_poisson, centers = uncurl.poisson_cluster(data,
                                                          2,
                                                          init=centers)
    # NB clustering
    assignments_nb, P, R = uncurl.nb_cluster(data, 2)
    # ZIP clustering
    assignments_zip, M, L = uncurl.zip_cluster(data, 2)
    true_labs = dat['Lab'][0]
    print 'poisson purity:', purity(assignments_poisson, true_labs)
    print 'NB purity:', purity(assignments_nb, true_labs)
    print 'ZIP purity:', purity(assignments_zip, true_labs)
    # State estimation
    means, weights, ll = uncurl.poisson_estimate_state(data, 2, disp=False)
    w_classes = weights.argmax(0)
    print 'W argmax purity:', purity(w_classes, true_labs)
    # dimensionality reduction
    X = uncurl.dim_reduce(means, weights, 2)
    proj = np.dot(X, weights)