1
resposta

Tem como plotar os centros em outro formato?

Tem como plotar os centros em outro formato para não se confundirem com ruído? Pirâmide, cubo etc.

1 resposta

Olá Franco, tudo bem? Espero que sim!

Desculpe pela demora em retornar.

Você pode modificar os formatos através do parâmetro symbol do parâmetro marker. Você pode checar as opções através da documentação.

Primeiramente, você precisa criar uma lista com o tipo de marcação que deseja atribuir para cada um dos objetos do cluster. No exemplo de código a seguir, criei uma lista de marcadores, com os tipos circle, cross e diamond.

marcadores = list(pd.DataFrame(agrupador.labels_).replace({0:'circle', 1:'cross', 2:'diamond'})[0])

Feito isso, você pode passar essa lista de marcadores para o dicionário do parâmetro marker da função go.Scatter3d:

fig = go.Figure()
fig.add_trace(go.Scatter3d(x=df['Intensidade_de_cor'],
                         y=df['Alcool'], z=df['Proline'],
                         mode = 'markers',                      
                          marker = dict(color = agrupador.labels_.astype(np.float), symbol = marcadores),
                        text = [0, 1, 2]))
fig.show()

Verifique a documentação para verificar as outras opções possíveis.

Essa opção do exemplo são para os pontos de dados, caso queira modificar os centros, basta modificar o parâmetro symbol para uma string, e os centros serão marcados como aquele tipo, como exemplo pode utilizar a string 'cross' para marcar os centros como uma cruz. O código ficaria da seguinte forma, adicionando somente na parte dos centros dos clusters:

BW = estimate_bandwidth(df, quantile = 0.1)
agrupador = MeanShift(bandwidth = BW)
agrupador.fit(df)

fig = go.Figure()
fig.add_trace(go.Scatter3d(x=df['Intensidade_de_cor'],
                         y=df['Alcool'], z=df['Proline'],
                         mode = 'markers',                      
                          marker = dict(color = agrupador.labels_.astype(np.float)),
                        text = [0, 1, 2]))

centros = pd.DataFrame(agrupador.cluster_centers_)
centros.columns = atributos

fig.add_trace(go.Scatter3d(x=centros['Intensidade_de_cor'],
                         y=centros['Alcool'], z=centros['Proline'],
                         mode = 'markers',                  
                          marker = dict(color = 'red', symbol = 'cross'),
                        text = [0, 1, 2]))

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!