3
respostas

Plot do DBSCAN

Como faço para plotar os dados obtidos treinando o DBSCAN ? ele me retornou apenas uma array do numpy de uma dimensão , assim , não consigo usar o "plot.bar".

modelo = DBSCAN()
grupos = modelo.fit_predict(generos_escalados)
grupos
3 respostas

Olá Luís.

Você deve utilizar a variável dados e não a generos_escalados.

grupos = modelo.fit_predict(dados)

O código completo para plotar ficaria assim:

from sklearn.cluster import DBSCAN
modelo = DBSCAN()
grupos = modelo.fit_predict(dados)
plt.scatter(x=dados.coluna1,y=dados.coluna2,
            c=grupos,
            cmap='viridis')

Semelhante ao que fizemos com o KMeans::

modelo = KMeans(n_clusters=3)
grupos = modelo.fit_predict(dados)
plt.scatter(x=dados.coluna1,y=dados.coluna2,
            c=grupos,
            cmap='viridis')

Espero ter ajudado, mas qualquer duvida não hesite em perguntar.

Bons Estudos.

mas essa variável dados seria o que? essa parte que não entendi, tem que conter o que nela? os gêneros sem estarem escalados?

Olá Luís.

Eu sugeri utilizar o dados porque é esse o exemplo que o instrutor sugere na atividade que são dados que geramos e depois vemos o comportamento dos modelo.

from sklearn.datasets import make_blobs
dados, _ = make_blobs(n_samples=1000, n_features=2, random_state=7)
dados = pd.DataFrame(dados, columns=['coluna1','coluna2'])

Depois de rodar o modelo e plotar o gráfico temos um resultado semelhante ao visto na atividade.

from sklearn.cluster import DBSCAN
modelo = DBSCAN()
grupos = modelo.fit_predict(dados)
plt.scatter(x=dados.coluna1,y=dados.coluna2,
            c=grupos,
            cmap='viridis')

Podemos utilizar os generos_escalados como você sugeriu: Utilizamos o StandardScaler no nossos dados.

import pandas as pd
uri_filmes = 'https://raw.githubusercontent.com/alura-cursos/machine-learning-algoritmos-nao-supervisionados/master/movies.csv'
filmes = pd.read_csv(uri_filmes)
filmes.columns = ['filme_id', 'titulo', 'generos']
generos = filmes.generos.str.get_dummies()
dados_dos_filmes = pd.concat([filmes, generos], axis=1)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
generos_escalados = scaler.fit_transform(generos)

Depois utilizamos o TSNE nos generos_escalados para conseguirmos representar eles em um gráfico.

from sklearn.manifold import TSNE
tsne = TSNE()
visualizacao = tsne.fit_transform(generos_escalados)

Rodamos o modelo DBSCAN e prevemos os nossos grupos>

from sklearn.cluster import DBSCAN
modeloDBSCAN = DBSCAN()
grupos = modeloDBSCAN.fit_predict(generos_escalados)

E finalmente poderemos plotar em um gráfico de dispersão utilizando os grupos previstos para colorir nosso gráfico.

import seaborn as sns
sns.set(rc={'figure.figsize': (16, 16)})
sns.scatterplot(x=visualizacao[:, 0],
               y=visualizacao[:, 1],
               hue=grupos)

Lembrando que por conta da 'redução' que fizemos utilizando o TSNE perdemos algumas informações, então pontos próximos podem estar distantes em outra dimensão.

Qualquer duvida não hesite em perguntar.

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