Fui utilizar os conceitos de validação aprendidos no curso Clustering: extraindo padrões de dados e calculei os coeficientes de silhouette, Davies-Bouldin e Calinski e comparando esses valores a um cojunto de dados aleatorio criados a partir da amostra normalizada mostrou que os índices para o conjunto aleatorio é melhor que os indices do conjunto real. Neste caso como podemos recalcular o cluster para que um conjunto aleatorio de dados não tenha distribuições de clusters melhores que o dado real?
Código:
função para calcular os índices que validam o cluster
def cluster_algorithm(n_clusters, dataset): kmeans_pca = KMeans(n_clusters = 5, n_init = 10, max_iter = 300, random_state = 1224) # verbose - acompanhamento da machine learning labels = kmeans_pca.fit_predict(dataset)
Coeficiente de Silhouette
s = silhouette_score(dataset, labels, metric = 'euclidean')
Índice de Davies-Bouldin
dbs = davies_bouldin_score(dataset, labels)
Índice de Calinski
calinski = calinski_harabasz_score(dataset,labels) return s, dbs, calinski
Criando conjunto aleatório de dados
random_data = np.random.rand(2973, 2)
Chamando a função de clusterização criada para calcular os indices com base nos dados aleatórios criados
s1, dbs1, calinski1 = cluster_algorithm(5, random_data)
Conjunto aleatório
print("Silhouette Aleatório: ", s1 , "Davies-Bouldin Aleatório: ", dbs1, 'Calinski Aleatório: ', calinski1)
Conjunto normalizado real
print("Silhouette Real: ", s , "Davies-Bouldin Real: ", dbs, 'Calinski Real: ', calinski)