1
resposta

Estamos considerando o ruído como cluster?

Eu apliquei o código indicado nos dados e obtive parâmetros que resultaram numa clusterização com um único cluster e ruído. Se foi atribuído um coeficiente de silhueta para ele, então a função que o calcula deve ter considerado o ruído como cluster, o que ao meu ver não faria sentido. Não deveríamos adaptar o código para que no caso de identificar apenas um cluster e ruído ele não chegasse a calcular o coeficiente de silhueta?

1 resposta

Oii Diogo, tudo certinho??

Desculpa pela demora em te responder, mas não consideramos os ruídos como cluster, por algum motivo os resultados apresentados no curso estão ficando diferentes dos resultados dos alunos. Para resolver esse problema, você pode adaptar seu código para chegar à resultados parecidos ao do professor, vale levar em conta alguns pontos sobre os parâmetros:

• O eps siginifica distância mínima entre os pontos para que sejam considerados vizinhos. Se for usado um valor muito pequeno, o DBSCAN considera tudo como ruído (-1) e quando usamos um valor muito alto para o eps, o DBSCAN considera tudo como apenas uma cluster (0).

• O parâmetro min_samples significa a quantidade mínima de amostras que cada cluster precisa ter, ou seja, se for colocado o valor 1, cada ponto por si só vai ser considerado um cluster, o que não é inteligente, e se for um número muito grande eles vão ser considerados ruídos também, já que o valor mínimo para que seja uma cluster excede o número de dados que temos.

• Por fim, o metric é a métrica usada para definir como serão feitas as distâncias, por exemplo se é cosseno, linha reta, etc. No scikit-learn nós temos as métricas: ‘cityblock’, ‘cosine’, ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’.

No meu caso, para chegar em resultado semelhantes aos da aula, eu usei os seguintes parâmetros:

from sklearn.cluster import DBSCAN
agrupador = DBSCAN(eps=100, min_samples = 15, metric = 'manhattan')
agrupador.fit(df)
agrupador.labels_

E obtive os seguintes resultados:

Resultados usando o DBSCAN com o parâmetro eps=100

Na aula onde vemos sobre a Silhueta, usei os mesmos valores dos parâmetros que passei ali em cima, vou deixar o código aqui também

agrupador_kmeans = KMeans(n_clusters=3)
agrupador_DBSCAN = DBSCAN(eps=100, min_samples = 15, metric = 'manhattan')
BW = estimate_bandwidth(df, quantile=0.28)
agrupador_meanshift = MeanShift(bandwidth=BW)

labels_kmeans = agrupador_kmeans.fit_predict(df)
labels_DBSCAN = agrupador_DBSCAN.fit_predict(df)
labels_meanshift = agrupador_meanshift.fit_predict(df)

print("Labels K-Means:", labels_kmeans)
print("Labels DBSCAN:", labels_DBSCAN)
print("Labels MeanShift:", labels_meanshift)

E aqui os resultados obtidos

Resultados com os mesmos parâmetros já situados no texto, mas na aula 5 sobre silhuetas

Qualquer outra dúvida é só me chamar, ok?

Bons estudos ^^

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software