
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from itertools import product
# Hyperparameter candidate values list
n_clusters_list = (4, 6, 8, 10)
init_list = ('k-means++', 'random')
n_init_list = (10, 20, 30)
max_iter_list = (300, 500, 1000)
tol_list = (1e-4, 1e-5, 1e-6)
algorithm_list = ('auto', 'full')
random_state_list = (0, 42, 123)
hyperparameters = list(product(n_clusters_list,
init_list,
n_init_list,
max_iter_list,
tol_list,
algorithm_list,
random_state_list))
best_score = None
best_params = None
for params in hyperparameters:
model = KMeans(n_clusters=params(0),
init=params(1),
n_init=params(2),
max_iter=params(3),
tol=params(4),
algorithm=params(5),
random_state=params(6))
model.fit(X)
score = model.score(X)
if best_score is None or score > best_score:
best_score = score
best_params = params
print('Best score:', best_score)
print('Best parameters:', best_params)
#Best parameters: (10, 'k-means++', 20, 300, 0.0001, 'auto', 123)