def test_kcenters_8(): X = np.random.RandomState(1).randn(100, 2) for dtype in [np.float64, np.float32]: X = X.astype(dtype) m1 = KCenters(n_clusters=10, random_state=0, opt=True).fit([X]) m2 = KCenters(n_clusters=10, random_state=0, opt=False).fit([X]) eq(m1.cluster_centers_, m2.cluster_centers_) eq(m1.distances_[0], m2.distances_[0]) eq(m1.labels_[0], m2.labels_[0]) assert np.all(np.logical_not(np.isnan(m1.distances_[0]))) eq(m1.predict([X])[0], m2.predict([X])[0]) eq(m1.predict([X])[0], m1.labels_[0])
def test_kcenters_3(): # test for predict using euclidean distance model = KCenters(n_clusters=10) data = np.random.randn(100, 2) labels1 = model.fit_predict([data]) labels2 = model.predict([data]) eq(labels1[0], labels2[0]) all_pairs = scipy.spatial.distance.cdist(data, model.cluster_centers_) eq(labels2[0], np.argmin(all_pairs, axis=1))
def test_kcenters_4(): # test for predict() using non-euclidean distance. because of the # way the code is structructured, this takes a different path model = KCenters(n_clusters=10, metric='cityblock') data = np.random.randn(100, 2) labels1 = model.fit_predict([data]) labels2 = model.predict([data]) eq(labels1[0], labels2[0]) all_pairs = scipy.spatial.distance.cdist(data, model.cluster_centers_, metric='cityblock') eq(labels2[0], np.argmin(all_pairs, axis=1))