TensorFlow™ no Databricks
Clustering e k-means
Agora, vamos nos aventurar em nossa primeira aplicação, que é o clustering com o algoritmo k-means. Clustering é um exercício de mineração de dados em que tentamos encontrar grupos de pontos semelhantes entre um conjunto de dados. K-means é um algoritmo excelente para encontrar clusterings em muitos tipos de conjuntos de dados.
Para saber mais sobre cluster e k-means, consulte a documentação de scikit-learn sobre o algoritmo k-means ou assista a este vídeo:
Gerando amostras
Primeiro, precisamos gerar algumas amostras. Poderíamos gerar as amostras aleatoriamente, mas é provável que o resultado sejam pontos muito esparsos ou apenas um grande grupo, o que não é muito interessante para o clustering.
Em vez disso, vamos começar gerando três centroides e, em seguida, escolher aleatoriamente (com uma distribuição normal) em torno desse ponto. Veja um método para fazer isso:
Coloque esse código em functions.py
A forma como isso funciona é criar centroides diferentes n_clusters aleatoriamente (usando np.random.random((1, n_features))) e usar os pontos centrais para tf.random_normal. A função tf.random_normal gera valores aleatórios distribuídos normalmente, que adicionamos ao ponto central atual. Isso cria um blob de pontos ao redor desse centro. Em seguida, registramos os centroides (centroids.append) e as amostras geradas (slices.append(samples)). Por fim, criamos "Uma grande lista de amostras" usando tf.concat e convertemos os centroides em uma variável do TensorFlow, também usando tf.concat.
Salve esse método create_samples em um arquivo chamado functions.py para importar esses métodos em nossos scripts para esta lição (e para a próxima!). Crie um novo arquivo chamado generate_samples.py, com o seguinte código:
Isso apenas configura o número de clusters e recursos (recomendo manter o número de recursos em 2, permitindo-nos visualizá-los mais tarde) e o número de amostras a serem geradas. Aumentar o embiggen_factor aumentará o "spread" ou o tamanho dos clusters. Escolhi um valor aqui que oferece uma boa oportunidade de aprendizagem, pois gera clusters visualmente identificáveis.
Para visualizar os resultados, vamos criar uma função de plotagem usando matplotlib. Adicione este código a functions.py:
Coloque esse código em functions.py
Esse código traça as amostras de cada cluster usando uma cor diferente e cria um grande X magenta onde está o centroide. O centroide é fornecido como argumento, o que será útil mais tarde.
Atualize o generate_samples.py para importar essa função adicionando da importação de funções plot_clusters à parte superior do arquivo. Em seguida, adicione esta linha de código à parte inferior:
A execução de generate_samples.py agora deve gerar o seguinte gráfico:
Inicialização
O algoritmo k-means começa com a escolha dos centroides iniciais, que são apenas suposições aleatórias dos centroides reais nos dados. A seguinte função escolherá aleatoriamente uma série de amostras do conjunto de dados para agir com base nessa suposição inicial:
Coloque esse código em functions.py
Primeiro, esse código cria um índice para cada amostra (usando tf.range(0, n_samples) e depois o embaralha aleatoriamente. A partir daí, escolhemos um número fixo (n_clusters) de índices usando tf.slice. Esses índices estão correlacionados aos nossos centroides iniciais, que são então agrupados usando tf.gather para formar nossa matriz de centroides iniciais.
Adicione essa nova função choose_random_centorids