1
resposta

PLOT DBSCAN

Olá, segui os passos descritos na atividade e não consegui obter o gráfico, não encontrei a variável "dados" no curso.

Pesquisei no fórum e tentei uma solução proposta. No entanto, obtive um gráfico completamente diferente do exibido (um com 3 grupos) da atividade.

Vocês podem me ajudar?

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)

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

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

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

Oi Carol tudo bem??

Esse é um exercício extra em que você precisa declarar a variável '''dados'''

O note desse exercício é possível acessar AQUI

# K-Means utiliza o conceito de centroides para agrupar os dados
# A função make_blobs nos retorna os xn... e o valor de y, isto é, as variáveis independentes e a variável dependente.

from sklearn.datasets import make_blobs
import pandas as pd
from sklearn.cluster import KMeans

Como queremos os dados em duas dimensões, falamos que o número de features (n_features) deve ser igual a 2 com 1000 exemplos (n_samples) de testes e para termos os mesmos dados, vamos setar o parâmetro de aleatoriedade como 7 (random_state):

dados, _ = make_blobs(n_samples=1000, n_features=2, random_state=7)
# Como o make_blobs nos retorna um par de dados (x, y) e não queremos o y, usamos o underscore (_) para ignorar o retorno dessa variável.

Vamos transformar estes dados em um DataFrame do pandas e renomear as colunas para coluna1 e coluna2.

dados = pd.DataFrame(dados, columns=['coluna1', 'coluna2'])
dados.head()

Em seguida, cruzamos os dados das colunas e plotamos a distribuição.

import matplotlib.pyplot as plt

plt.scatter(x=dados.coluna1, y=dados.coluna2)

Pedimos ao KMeans para criar um modelo com 3 grupos e segmentar os nossos dados baseado no modelo criado.

modelo = KMeans(n_clusters=3)
grupos = modelo.fit_predict(dados)

Plotamos os dados segmentados identificando os grupos com cores distintas (c=grupos) e vívidas (cmap='viridis').

plt.scatter(x=dados.coluna1, y=dados.coluna2, 
            c=grupos,
           cmap='viridis')

Geramos pontos centrais para os grupos, chamados centroides, e plotamos novamente nossos grupos.

centroides = modelo.cluster_centers_
plt.scatter(dados.coluna1, dados.coluna2,
            c=grupos,
           cmap='viridis')

O pandas nos devolve os centroides em forma de matriz, então montamos a localização cartesiana pegando a posição 0 para o eixo x (centroides[:,0]) e a posição 1 para o eixo y (centroides[:,1]) . Também podemos estilizar a representação do nosso centroide, marcando como um X (marker='X'), setando o tamanho (s=169), a largura da linha (linewidths=5), cor (color=g) e a hierarquia de aparição (zorder=8).

plt.scatter(centroides[:, 0], centroides[:, 1],
           marker='X', s=169, linewidths=5,
           color='g', zorder=8)

Você chegou a ver essa indicação? "Vamos pegar os mesmos blobs que geramos no exercício de visualizar os centroides no K-Means:"

Espero ter ajudado e qlq dúvida é só retornar aqui! =)