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:
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
Qualquer outra dúvida é só me chamar, ok?
Bons estudos ^^