Exemple #1
0
def test_predict_no_centroids1():
    with pytest.raises(AttributeError):
        kmeans = MultiviewSphericalKMeans()
        kmeans.centroids_ = [None, None]
        view1 = np.random.random((10,11))
        view2 = np.random.random((10,10))
        kmeans.predict([view1, view2]) 
def perform_clustering(seed, m_data, labels, n_clusters):
    # Singleview spherical kmeans clustering
    # Cluster each view separately
    s_kmeans = SphericalKMeans(n_clusters=n_clusters,
                               random_state=seed,
                               n_init=100)
    s_clusters_v1 = s_kmeans.fit_predict(m_data[0])
    s_clusters_v2 = s_kmeans.fit_predict(m_data[1])

    # Concatenate the multiple views into a single view
    s_data = np.hstack(m_data)
    s_clusters = s_kmeans.fit_predict(s_data)

    # Compute nmi between true class labels and singleview cluster labels
    s_nmi_v1 = nmi_score(labels, s_clusters_v1)
    s_nmi_v2 = nmi_score(labels, s_clusters_v2)
    s_nmi = nmi_score(labels, s_clusters)
    print('Singleview View 1 NMI Score: {0:.3f}\n'.format(s_nmi_v1))
    print('Singleview View 2 NMI Score: {0:.3f}\n'.format(s_nmi_v2))
    print('Singleview Concatenated NMI Score: {0:.3f}\n'.format(s_nmi))

    # Multiview spherical kmeans clustering

    # Use the MultiviewKMeans instance to cluster the data
    m_kmeans = MultiviewSphericalKMeans(n_clusters=n_clusters,
                                        n_init=100,
                                        random_state=seed)
    m_clusters = m_kmeans.fit_predict(m_data)

    # Compute nmi between true class labels and multiview cluster labels
    m_nmi = nmi_score(labels, m_clusters)
    print('Multiview NMI Score: {0:.3f}\n'.format(m_nmi))

    return m_clusters
Exemple #3
0
def test_not_2_views():
    with pytest.raises(ValueError):
        view1 = np.random.random((10,))
        view2 = np.random.random((10,))
        view3 = np.random.random((10,))
        kmeans = MultiviewSphericalKMeans()
        kmeans.fit([view1, view2, view3]) 
Exemple #4
0
def test_init_not_2_views(data_small):
    with pytest.raises(ValueError):
        view1 = np.random.random((2,8))
        view2 = np.random.random((2,9))
        view3 = np.random.random((2,9))
        kmeans = MultiviewSphericalKMeans(init=[view1, view2, view3])
        kmeans.fit(data_small)
def test_final_centroids_less_than_n_clusters():
    with pytest.warns(ConvergenceWarning):
        kmeans = MultiviewSphericalKMeans(n_clusters=3,
                                          random_state=RANDOM_SEED)
        view1 = np.random.random((2, 11))
        view2 = np.random.random((2, 10))
        kmeans.fit([view1, view2])
Exemple #6
0
def test_preprocess_data(data_random):
    n_clusters = data_random['n_clusters']
    kmeans = MultiviewSphericalKMeans(n_clusters=n_clusters)
    processed = kmeans._preprocess_data(data_random['test_data'])
    for mat in processed:
        mat = np.linalg.norm(mat, axis=1)
        ones = np.ones(mat.shape)
        assert(np.allclose(mat, ones))    
Exemple #7
0
def test_final_centroids_less_than_n_clusters():
    with pytest.raises(ConvergenceWarning):
        kmeans = MultiviewSphericalKMeans(n_clusters=3, random_state=RANDOM_SEED)
        view1 = np.random.random((2,5))
        view2 = np.random.random((2,6))
        v1_centroids = np.random.random((3, 5))
        v2_centroids = np.random.random((3, 6))
        centroids = [v1_centroids, v2_centroids]
        kmeans._final_centroids([view1, view2], centroids)
Exemple #8
0
def test_final_centroids_no_consensus():
    with pytest.raises(ConvergenceWarning):
        kmeans = MultiviewSphericalKMeans(random_state=RANDOM_SEED)
        view1 = np.array([[0, 1], [1, 0]])
        view2 = np.array([[1, 0], [0, 1]])
        v1_centroids = np.array([[0, 1],[1, 0]])
        v2_centroids = np.array([[0, 1],[1, 0]])
        centroids = [v1_centroids, v2_centroids]
        kmeans._final_centroids([view1, view2], centroids)
Exemple #9
0
def test_fit_predict_n_jobs_all(data_random):
    
    n_clusters = data_random['n_clusters']
    kmeans = MultiviewSphericalKMeans(n_clusters=n_clusters, n_jobs=-1)
    cluster_pred = kmeans.fit_predict(data_random['test_data'])
    
    assert(data_random['n_test'] ==  cluster_pred.shape[0])
    for cl in cluster_pred:
        assert(cl >= 0 and cl < data_random['n_clusters'])
Exemple #10
0
def test_fit_predict_patience(data_random):
    
    n_clusters = data_random['n_clusters']
    patience=10
    kmeans = MultiviewSphericalKMeans(n_clusters=n_clusters, patience=patience)
    cluster_pred = kmeans.fit_predict(data_random['test_data'])
    
    assert(data_random['n_test'] ==  cluster_pred.shape[0])
    for cl in cluster_pred:
        assert(cl >= 0 and cl < data_random['n_clusters'])
Exemple #11
0
def test_fit_predict_max_iter(data_random):

    n_clusters = data_random['n_clusters']
    max_iter = 5
    kmeans = MultiviewSphericalKMeans(n_clusters=n_clusters, max_iter=max_iter)
    cluster_pred = kmeans.fit_predict(data_random['test_data'])

    assert (data_random['n_test'] == cluster_pred.shape[0])
    for cl in cluster_pred:
        assert (cl >= 0 and cl < data_random['n_clusters'])
Exemple #12
0
def test_fit_predict_init_random(data_random):
    
    n_clusters = data_random['n_clusters']
    init = 'random'
    kmeans = MultiviewSphericalKMeans(n_clusters=n_clusters, init='random')
    cluster_pred = kmeans.fit_predict(data_random['test_data'])
    
    assert(data_random['n_test'] ==  cluster_pred.shape[0])
    for cl in cluster_pred:
        assert(cl >= 0 and cl < data_random['n_clusters'])
Exemple #13
0
def test_fit_predict_init_predefined():

    n_clusters = 2
    v1_centroid = np.array([[-1, -1],[1, 1]])
    v2_centroid = np.array([[-1, -1],[1, 1]])
    centroids = [v1_centroid, v2_centroid]
    v1_data = np.array([[-1, -1],[-2, -2],[0.5, 0.5],[0.7, 0.7],[1, 1]])
    v2_data = np.array([[-1, -1],[-2, -2],[0.5, 0.5],[0.4, 0.7],[1, 1]])
    data = [v1_data, v2_data]
    kmeans = MultiviewSphericalKMeans(n_clusters=n_clusters, init=centroids)
    cluster_pred = kmeans.fit_predict(data)
Exemple #14
0
def test_predict_random_small(data_random):

    kmeans = MultiviewSphericalKMeans()
    input_data = [data_random['fit_data'][0][:2],data_random['fit_data'][1][:2]] 
    kmeans.fit(input_data)
    cluster_pred = kmeans.predict(data_random['test_data'])

    assert(data_random['n_test'] ==  cluster_pred.shape[0])

    for cl in cluster_pred:
        assert(cl >= 0 and cl < data_random['n_clusters'])
Exemple #15
0
def test_n_init_not_positive_int():
    with pytest.raises(ValueError):
        kmeans = MultiviewSphericalKMeans(n_init=-1)
        kmeans.fit(data_small)
    with pytest.raises(ValueError):
        kmeans = MultiviewSphericalKMeans(n_init=0)
        kmeans.fit(data_small)
Exemple #16
0
def test_max_iter_not_positive_int(data_small):
    with pytest.raises(ValueError):
        kmeans = MultiviewSphericalKMeans(max_iter=-1)
        kmeans.fit(data_small)
    
    with pytest.raises(ValueError):
        kmeans = MultiviewSphericalKMeans(max_iter=0)
        kmeans.fit(data_small)
Exemple #17
0
def data_random():

    num_fit_samples = 200
    num_test_samples = 5
    n_feats1 = 20
    n_feats2 = 18
    n_clusters = 2
    np.random.seed(RANDOM_SEED)
    fit_data = []
    fit_data.append(np.random.rand(num_fit_samples, n_feats1))
    fit_data.append(np.random.rand(num_fit_samples, n_feats2))

    test_data = []
    test_data.append(np.random.rand(num_test_samples, n_feats1))
    test_data.append(np.random.rand(num_test_samples, n_feats2))

    kmeans = MultiviewSphericalKMeans(n_clusters=n_clusters,
                                      random_state=RANDOM_SEED)
    return {
        'n_test': num_test_samples,
        'n_feats1': n_feats1,
        'n_feats2': n_feats2,
        'n_clusters': n_clusters,
        'kmeans': kmeans,
        'fit_data': fit_data,
        'test_data': test_data
    }
Exemple #18
0
def test_predict_no_centroids2():
    kmeans = MultiviewSphericalKMeans()
    
    with pytest.raises(ConvergenceWarning):
        view1 = np.array([[0, 1], [1, 0]])
        view2 = np.array([[1, 0], [0, 1]])
        v1_centroids = np.array([[0, 1],[1, 0]])
        v2_centroids = np.array([[0, 1],[1, 0]])
        centroids = [v1_centroids, v2_centroids]
        kmeans._final_centroids([view1, view2], centroids)

    with pytest.raises(AttributeError):
        kmeans.predict([view1, view2])
Exemple #19
0
def test_patience_not_nonnegative_int(data_small):
    with pytest.raises(ValueError):
        kmeans = MultiviewSphericalKMeans(patience=-1)
        kmeans.fit(data_small)
Exemple #20
0
def test_init_samples_not_2D_2(data_small):
    with pytest.raises(ValueError):
        view1 = np.random.random((2,))
        view2 = np.random.random((2,))
        kmeans = MultiviewSphericalKMeans(init=[view1, view2])
        kmeans.fit(data_small)
Exemple #21
0
def test_samples_not_2D_2():
    with pytest.raises(ValueError):
        view1 = np.random.random((10,))
        view2 = np.random.random((10,))
        kmeans = MultiviewSphericalKMeans()
        kmeans.fit([view1, view2])
Exemple #22
0
def test_samples_not_list():
    with pytest.raises(ValueError):
        view1 = 1
        view2 = 3
        kmeans = MultiviewSphericalKMeans()
        kmeans.fit([view1, view2])
Exemple #23
0
def test_predict_not_fit():
    with pytest.raises(NotFittedError):
        kmeans = MultiviewSphericalKMeans()
        view1 = np.random.random((10,11))
        view2 = np.random.random((10,10))
        kmeans.predict([view1, view2])
Exemple #24
0
def test_init_samples_not_list(data_small):
    with pytest.raises(ValueError):
        view1 = 1
        view2 = 3
        kmeans = MultiviewSphericalKMeans(init=[view1, view2])
        kmeans.fit(data_small)
Exemple #25
0
def test_init_not_n_clusters(data_small):
    with pytest.raises(ValueError):
        view1 = np.random.random((3, 8))
        view2 = np.random.random((3, 9)) 
        kmeans = MultiviewSphericalKMeans(init=[view1, view2])
        kmeans.fit(data_small)
Exemple #26
0
def test_init_not_feat_dimensions(data_small):
    with pytest.raises(ValueError):
        view1 = np.random.random((2, 9))
        view2 = np.random.random((2, 9)) 
        kmeans = MultiviewSphericalKMeans(init=[view1, view2])
        kmeans.fit(data_small)
Exemple #27
0
def test_tol_not_nonnegative_float(data_small):
    with pytest.raises(ValueError):
        kmeans = MultiviewSphericalKMeans(tol=-1)
        kmeans.fit(data_small)
Exemple #28
0
def test_random_state_not_convertible(data_small):
    with pytest.raises(ValueError):
        kmeans = MultiviewSphericalKMeans(random_state='ab')
        kmeans.fit(data_small)
Exemple #29
0
def test_not_init1(data_small):
    with pytest.raises(ValueError):
        kmeans = MultiviewSphericalKMeans(init='Not_Init')
        kmeans.fit(data_small)