Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Coeficiente de Silhueta Mean-Shift - Gráfico: Média Silhueta-y e Quantil-x

Pessoal, bom dia.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O gráfico aparece sempre em branco sem dados. Aconteceu com mais alguém? Sabem o que pode ser?

# uma lista para armazenar os pontos
valores_silhueta = []

# uma lista para armazenar os valores que consegue calcular o valor de silhueta
quantil_plot = []

# para cada valor dentro da faixa_quantil, calcule o banwidth (largura de banda)
for quantil in faixa_quantil:
    bandwidth = estimate_bandwidth(df, quantile = quantil)
    agrupador = MeanShift(bandwidth = bandwidth) 
    labels = agrupador.fit_predict(df)

if (len(np.unique(labels)) < len(df) and len(np.unique(labels)) > 1): # vai mostrar o número de labels, se é menor que o tamanho do dataset, não pode ser igual a 1 e tem que ser menor que 1
        media_silhueta = silhouette_score(df, labels)
        valores_silhueta.append(media_silhueta)
        quantil_plot.append(quantil)

Erro acontece ao Plotar:

fig = go.Figure()
fig.add_trace(go.Scatter(x = quantil_plot,
                         y = valores_silhueta))
fig.update_layout(dict(xaxis_title = 'Quantil',
                       yaxis_title='Média Silhueta')),
fig.show()
1 resposta
solução!

Olá, Warley! Tudo bem com você?

Esse comportamento inesperado está ocorrendo pois o seu if está fora do laço de repetição for, e dessa forma as listas valores_silhueta e quantil_plot não recebem valores. Como essas listas estão vazias, quando você tenta plotar o gráfico scatter não aparece curva alguma, justamente por esse motivo.

Para consertar isso basta colocar o if para dentro do for. O código completo é mostrado a seguir:

# uma lista para armazenar os pontos
valores_silhueta = []

# uma lista para armazenar os valores que consegue calcular o valor de silhueta
quantil_plot = []

# para cada valor dentro da faixa_quantil, calcule o banwidth (largura de banda)
for quantil in faixa_quantil:
    bandwidth = estimate_bandwidth(df, quantile = quantil)
    agrupador = MeanShift(bandwidth = bandwidth) 
    labels = agrupador.fit_predict(df)

    if (len(np.unique(labels)) < len(df) and len(np.unique(labels)) > 1): # vai mostrar o número de labels, se é menor que o tamanho do dataset, não pode ser igual a 1 e tem que ser menor que 1
        media_silhueta = silhouette_score(df, labels)
        valores_silhueta.append(media_silhueta)
        quantil_plot.append(quantil)

fig = go.Figure()
fig.add_trace(go.Scatter(x = quantil_plot,
                         y = valores_silhueta))
fig.update_layout(dict(xaxis_title = 'Quantil',
                       yaxis_title='Média Silhueta')),
fig.show()

Realize os testes na sua máquina e verifique se resolve o problema. Caso ainda não resolva, você pode nos retorne por aqui mesmo.

Espero ter ajudado, mas se ainda persistir alguma dúvida estou sempre à disposição.

:)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.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