Hackeando o R: métodos de clustering

No Hackeando o R de hoje, vamos concluir os posts dessa série de machine learning introduzindo métodos de clustering no R. Essas ferramentas são muito utilizadas para a análise de dados não-supervisionados, ou seja, dados que não possuem uma variável de resposta para servir como validação da previsão. Quando tratamos informações dessa natureza, o objetivo da modelagem estatística passa a ser então identificar subgrupos dentro das observações disponíveis, através da possível formação de agrupamentos (os chamados clusters) delas em regiões distintas no espaço dos seus possíveis valores. Com isso, vamos focar em dois métodos de agrupamento:o K-means clustering e o hierarchical clustering.

Para ilustrar, pense que você possui uma coleção de dados sobre clientes de sua loja, e quer identificar possíveis segmentos de mercado para especializar seus anúncios. Não há uma mensuração específica que indique que o indivíduo i faz parte do segmento y, porém, de posse dos dados de n indivíduos, podemos construir grupos de indivíduos que são estatisticamente parecidos.

Nesse contexto, o método de K-means clustering busca gerar subgrupos que minimizam suas variâncias dentro de cada grupo. O ponto importante desse método é que ele exige que se escolha previamente o número de grupos que serão encontrados, e o algoritmo utilizado para gerar a divisão não necessariamente encontra o melhor resultado, então devemos rodá-lo múltiplas vezes. Abaixo, geramos dados que possuem dois grupos, e então testamos a função kmeans() do pacote base do R. Note que fornecemos ao R o número de grupos que queremos utilizar (k=2) e o número de vezes para rodar o modelo (nstart=20):

set.seed(2)
x=matrix(rnorm(50*2), ncol=2)
x[1:25, 1]=x[1:25, 1]+3
x[1:25, 2]=x[1:25, 2]-4

km.out=kmeans(x, 2, nstart=20)

plot(x, col=(km.out$cluster+1), main= "K-Means Clustering
com 2 grupos", xlab ="", ylab="", pch=20, cex=2)


Já no caso do hierarchial clustering, não nos preocupamos tanto com a escolha de número de grupos, que é feita antes da análise e é relativamente arbitrária, e sim com o método de aproximação a ser feito. A análise hierárquica constroi uma árvore chamada dendrograma, cujas folhas são observações e os galhos são grupos de tamanho crescente conforme você se aproxima do tronco. Para gerarmos os grupos, primeiramente identificamos a distância entre cada uma das observações (considerando elas grupos de 1 indivíduo), e formamos o primeiro grupo com as duas mais próximas. Então, calculamos a distância entre todos os grupos (com alguma métrica pré-definida) e geramos o novo grupo com os dois mais próximos, e seguimos recursivamente até gerarmos a árvore final. Abaixo, geramos a árvore com nossos dados, considerando a distância entre os grupos como a maior distância entre um ponto de um grupo e um ponto de outro:


hc.complete=hclust(dist(x), method="complete")
plot(hc.complete)

É importante notar que a distância horizontal entre as observações não reflete na sua distância real. No exemplo, a observação 42 parece mais próxima da 26 do que da 37 ou da 50, porém ela na verdade é próxima do cluster formado por essas 3. Com isso, o que importa para definirmos a proximidade é a distância vertical entre as observações no dendrograma. Com essa estrutura montada, podemos gerar os clusters escolhendo qual altura utilizar para seccionar a árvore. Abaixo, cortaremos a árvore em 2 clusters.


cutree(hc.complete, 2)

Como exemplo final, iremos aplicar os métodos sobre dados de células de câncer da base NCI60. Primeiramente, vamos padronizar os dados. Isso é importante pois variáveis de escala muito maior acabam dominando a variação de outras variáveis, tornando mais difícil encontrarmos relações entre elas.


library(ISLR)

nci.labs=NCI60$labs
nci.data=NCI60$data

sd.data=scale(nci.data)

data.dist=dist(sd.data)

Vamos agora cortar a árvore:


hc.out=hclust(dist(sd.data))
hc.clusters=cutree(hc.out, 4)

plot(hc.out, labels=nci.labs)
abline(h=139, col ="red")

Conteúdos como esse podem ser encontrados no nosso Curso de Machine Learning usando o R.

_____________________

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

O que é e como funcionam Sistemas Multi-Agentes

Sistemas multi-agentes (MAS) representam uma nova forma de estruturar aplicações de inteligência artificial, especialmente úteis para lidar com problemas complexos e distribuídos. Em vez de depender de um único agente generalista, esses sistemas são compostos por múltiplos agentes especializados que colaboram, competem ou se coordenam para executar tarefas específicas. Neste post, explicamos o que são os MAS, seus principais componentes (como LLMs, ferramentas e processos) e as arquiteturas mais comuns.

O que é um Vector Database e como criar um com LangChain

Nesta postagem, mostramos como construir um pipeline simples de RAG (Retrieval-Augmented Generation) usando o LangChain, o modelo Gemini 2.0 Flash e o Vector Database Chroma. Utilizamos como exemplo o Relatório de Inflação de junho de 2025 do Banco Central do Brasil. O fluxo envolve o download e leitura do PDF, divisão do texto com RecursiveCharacterTextSplitter, geração de embeddings com Gemini, armazenamento vetorial com Chroma e busca semântica para responder perguntas com base no conteúdo do relatório. É uma aplicação prática e didática para economistas que desejam integrar IA ao seu fluxo de análise.

Automatizando a Construção de Códigos em Python com LangGraph

Neste post, mostramos como construir um agente de código em Python utilizando LangGraph, LangChain e Gemini. A proposta é construir um protótipo para automatizar o ciclo completo de geração, execução e correção de código com o uso de LLMs, organizando o processo em um grafo de estados.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.