Source code for aitlas.clustering.kmeans
import logging
import time
from PIL import ImageFile
from .utils import preprocess_features, run_kmeans
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
ImageFile.LOAD_TRUNCATED_IMAGES = True
[docs]class Kmeans:
def __init__(self, k):
self.k = k
[docs] def cluster(self, data, verbose=False):
"""Performs k-means clustering.
:param x_data: data to cluster
:type x_data: np.array (N * dim)
"""
start = time.time()
# PCA-reducing, whitening and L2-normalization
xb = preprocess_features(data)
# cluster the data
I, loss = run_kmeans(xb, self.k, verbose)
self.images_lists = [[] for i in range(self.k)]
for i in range(len(data)):
self.images_lists[I[i]].append(i)
if verbose:
logging.info("k-means time: {0:.0f} s".format(time.time() - start))
return loss