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
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.