3
respostas

Solução: DBSCAN considera tudo como ruído (-1)

Vi uma outra solução dada para esse problema aqui setando o "eps" para um valor maior. Uma outra solução, seria utilizar a base normalizada para treinar o algortimo (isso, na verdade, é o que gera discrepância entre os labels obtidos pelo instrutor e para quem segue a aula).

from sklearn.cluster import DBSCAN
agrupador = DBSCAN(eps = 1.31, min_samples = 15, metric = 'manhattan')
agrupador.fit(df_normalizado)
array([ 0,  0,  0,  0, -1,  0,  0,  0,  0,  0,  0,  0,  0, -1,  0,  0,  0,
        0,  0,  0,  0,  0,  0,  0,  0, -1,  0,  0,  0,  0,  0,  0,  0,  0,
        0,  0,  0,  0,  0, -1,  0, -1,  0, -1,  0, -1,  0,  0,  0,  0, -1,
        0,  0,  0,  0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -1, -1, -1,  1,
       -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1,
        1, -1, -1, -1, -1,  1,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1,
       -1,  1,  1, -1,  1,  1,  1, -1, -1, -1, -1, -1, -1, -1,  1,  1, -1,
        1, -1, -1, -1, -1, -1,  1, -1, -1, -1, -1, -1,  2, -1,  2, -1,  2,
       -1, -1,  2, -1, -1,  2, -1, -1,  2,  2, -1,  2,  2,  2, -1, -1, -1,
        2, -1,  2,  2, -1, -1, -1,  2,  2,  2,  2,  2, -1,  2,  2,  2, -1,
        2,  2,  2,  2,  2,  2,  2,  2], dtype=int64)
3 respostas

Olá Thalles, tudo bem? Espero que sim!

É sempre bom utilizar a base de dados normalizada para algoritmos de agrupamento, para que as distâncias a serem calculadas não sejam muito influenciadas por variáveis com a escala maior.

Além disso, é uma boa ideia ajustar o épsilon para outros valores até conseguir um resultado satisfatório. Um épsilon muito baixo vai fazer com que os dados não sejam agrupados e um épsilon muito alto vai fazer com que todos os dados façam parte de um mesmo grupo. É interessante achar um valor de equilíbrio.

Bons estudos!

Funcionou normalizar novamente os dados. Didática ruim ... vídeos com cortes e acaba cortando pontos importantes para passar para os alunos e ficamos perdidos sem entender. Complicado assim.

Exatamente, Joao Vitor. Eu disse que vi algumas solucoes de pessoas alterando o epsilon para chegar na resposta do instrutor. Mas que o resultado correto seria obtido ao normalizar novamente os dados (os quais foram desnormalizados pelo instrutor em um passo anterior e gerava discrepancia no resultado de alguns colegas que recorreram ao forum). Assim como consta o codigo postado em seguida.

Grato.