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
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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
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.