Spaces:
Sleeping
Sleeping
from util import * | |
from sklearn.cluster import KMeans, SpectralClustering, DBSCAN | |
from sklearn import metrics | |
import numpy as np | |
import warnings | |
import os | |
from util.Monitor_construction import Box | |
from runtime_monitors import * | |
def k_means_cluster(data, n_clusters): | |
kmeans = KMeans(n_clusters=n_clusters, init='k-means++', random_state=0, n_init="auto") | |
kmeans.fit_predict(data) | |
lbs = kmeans.labels_ # cluster labels | |
clusters = dict() | |
for lb in set(lbs): | |
idx = np.where(lbs == lb)[0] | |
clusters[lb] = list(zip(idx, data[idx])) | |
return clusters | |
def spectral_cluster(data, n_clusters): | |
n_neighbors = min(n_clusters, 10) | |
spectral = SpectralClustering(n_clusters=n_clusters, affinity='nearest_neighbors', n_neighbors=n_neighbors, | |
gamma=1.0, eigen_solver="arpack", random_state=0) | |
# catch warnings related to kneighbors_graph | |
with warnings.catch_warnings(): | |
warnings.filterwarnings( | |
"ignore", | |
message="the number of connected components of the " | |
+ "connectivity matrix is [0-9]{1,2}" | |
+ " > 1. Completing it to avoid stopping the tree early.", | |
category=UserWarning, | |
) | |
warnings.filterwarnings( | |
"ignore", | |
message="Graph is not fully connected, spectral embedding" | |
+ " may not work as expected.", | |
category=UserWarning, | |
) | |
spectral = spectral.fit(data) | |
lbs = spectral.labels_ # cluster labels | |
clusters = dict() | |
for lb in set(lbs): | |
idx = np.where(lbs == lb)[0] | |
clusters[lb] = list(zip(idx, data[idx])) | |
return clusters | |
def dbscan_cluster(data, eps, min_samples): | |
db = DBSCAN(eps=eps, min_samples=min_samples).fit(data) | |
lbs = db.labels_ # cluster labels | |
n_cls = len(set(lbs)) - (1 if -1 in lbs else 0) # number of clusters | |
n_noise = list(lbs).count(-1) | |
clusters = dict() | |
for lb in set(lbs): | |
idx = np.where(lbs == lb)[0] | |
clusters[lb] = list(zip(idx, data[idx])) | |
return clusters | |