<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lhayana Vieira</title>
    <description>The latest articles on DEV Community by Lhayana Vieira (@lhayana).</description>
    <link>https://dev.to/lhayana</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F416994%2Fe1d68489-4280-4994-9731-d82e76bce042.png</url>
      <title>DEV Community: Lhayana Vieira</title>
      <link>https://dev.to/lhayana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lhayana"/>
    <language>en</language>
    <item>
      <title>Você já ouviu falar do meme do monstro Shoggoth?</title>
      <dc:creator>Lhayana Vieira</dc:creator>
      <pubDate>Sat, 17 Jan 2026 10:11:37 +0000</pubDate>
      <link>https://dev.to/lhayana/voce-ja-ouviu-falar-do-meme-do-monstro-shoggoth-467n</link>
      <guid>https://dev.to/lhayana/voce-ja-ouviu-falar-do-meme-do-monstro-shoggoth-467n</guid>
      <description>&lt;p&gt;Ele é usado na comunidade de IA para representar o que acontece durante o pré-treino dos grandes modelos de linguagem. O Shoggoth é um monstro cheio de tentáculos e diversos olhos (quem curte literatura de terror vai identificar de onde ele vem). Ele é usado como metáfora para o modelo "cru", treinado com uma quantidade absurda de dados da internet, sem nenhum filtro nem curadoria.&lt;/p&gt;

&lt;p&gt;Um fato bem conhecido sobre LLMs é que eles são feito para completar texto, não para ter diálogos. Ou seja, ele não entende o que faz uma resposta parecer humana. Além disso, como o conjunto de dados vem de todos os cantos da internet, o modelo acaba herdando também os piores comportamentos que encontra por lá.&lt;/p&gt;

&lt;p&gt;Visto que ninguém quer criar um modelo incel (eu espero), o pós-treino visa corrigir isso. No Supervised Finetuning (SFT), o modelo começa a aprender a conversar, passando por um processo supervisionado em que humanos altamente qualificados criam exemplos de conversas que servem como demonstração.&lt;/p&gt;

&lt;p&gt;Após o SFT, é aplicado o Reinforcement Learning from Human Feedback (RLHF), visando alinhar o comportamento da IA com as preferências humanas, que é basicamente o processo que coloca o rostinho sorridente no monstro.&lt;/p&gt;

&lt;p&gt;Porém, esse alinhamento às preferências humanas pode gerar alguns problemas. O primeiro é que não existe uma moral universal. O que é o correto quando o assunto é desarmamento, por exemplo? Outro problema é quando há um descompasso entre o conhecimento interno do modelo e o conhecimento dado pelo feedback humano. Nesse caso, o modelo pode acabar confirmando as visões do usuário mesmo que não sejam verdade ou inventando fatos para parecer prestativo.&lt;/p&gt;

&lt;p&gt;No fim, a jornada de transformar esse monstrinho em um produto confiável é um desafio. Tenho estudado essas questões de arquitetura e segurança no livro AI Engineering, da Chip Huyen, estou gostando bastante!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Para além do versionamento de código: modelos também devem ser versionados.</title>
      <dc:creator>Lhayana Vieira</dc:creator>
      <pubDate>Sat, 17 Jan 2026 10:06:58 +0000</pubDate>
      <link>https://dev.to/lhayana/para-alem-do-versionamento-de-codigo-modelos-tambem-devem-ser-versionados-4d3k</link>
      <guid>https://dev.to/lhayana/para-alem-do-versionamento-de-codigo-modelos-tambem-devem-ser-versionados-4d3k</guid>
      <description>&lt;p&gt;Se você já trabalhou com modelos de machine learning, sabe que devem ser testados vários modelos e parâmetros diferentes. Isso pode virar um caos.&lt;br&gt;
Uma das principais ferramentas que veio para resolver esse problema foi o MLFlow. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq68h22rlkdo10vvwmqos.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq68h22rlkdo10vvwmqos.png" alt=" " width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com ele, é possível gravar as principais métricas que você está usando no seu projeto e, com elas, comparar os modelos que você está testando. Essa comparação pode ser feita inclusive com gráficos, como o teste que fiz na imagem acima. Inclusive, nesse teste, não registrei apenas números, o MLflow salvou automaticamente minha matriz de confusão e a curva ROC junto com cada versão do modelo. Assim, consigo analisar visualmente onde cada algoritmo acertou ou errou, sem precisar rodar o código tudo de novo nem ficar anotando as métricas em uma planilha (já fiz muito isso).&lt;/p&gt;

&lt;p&gt;Futuramente pretendo explorar como a ferramenta se comporta versionando LLMs, já que a versão mais recente traz um suporte específico pra GenAI.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>datascience</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>O que você faz quando está fazendo uma prova e não sabe a resposta?</title>
      <dc:creator>Lhayana Vieira</dc:creator>
      <pubDate>Sat, 17 Jan 2026 10:06:21 +0000</pubDate>
      <link>https://dev.to/lhayana/o-que-voce-faz-quando-esta-fazendo-uma-prova-e-nao-sabe-a-resposta-1ad9</link>
      <guid>https://dev.to/lhayana/o-que-voce-faz-quando-esta-fazendo-uma-prova-e-nao-sabe-a-resposta-1ad9</guid>
      <description>&lt;p&gt;O que você faz quando está fazendo uma prova e não sabe a resposta?&lt;/p&gt;

&lt;p&gt;Você chuta uma alternativa, certo? As LLMs também!&lt;/p&gt;

&lt;p&gt;Foi essa analogia que esse paper recente da OpenAI fez para explicar as alucinações e eu achei genial.&lt;/p&gt;

&lt;p&gt;As avaliações de uma resposta nas LLMs são binárias, dando 1 ponto para a resposta correta e 0 para a incorreta ou em branco (no caso, seria afirmar que não sabe). Isso acaba incentivando o "chute", visto que afirmar que não sabe é uma certeza de que o resultado da avaliação vai ser 0. O artigo chama isso de epidemia de penalização da incerteza.&lt;/p&gt;

&lt;p&gt;Recomendo a leitura pra quem se interessa no tema: &lt;a href="https://lnkd.in/dJbTcKmx" rel="noopener noreferrer"&gt;https://lnkd.in/dJbTcKmx&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>llm</category>
      <category>openai</category>
    </item>
    <item>
      <title>Otimizando o uso da GPU no Google Colab</title>
      <dc:creator>Lhayana Vieira</dc:creator>
      <pubDate>Sat, 10 May 2025 14:24:55 +0000</pubDate>
      <link>https://dev.to/lhayana/otimizando-o-uso-da-gpu-no-google-colab-4d2j</link>
      <guid>https://dev.to/lhayana/otimizando-o-uso-da-gpu-no-google-colab-4d2j</guid>
      <description>&lt;p&gt;Estava fazendo o projeto de visão computacional do mestrado e, assim como todo treinamento de transformers, estava demorando muito. Comecei a cogitar pagar o google colab pro, pra poder usar a GPU A100, mas um colega me falou que não viu muita diferença comparado à GPU gratuita, a T4. Achei estranho, então fui pesquisar um pouco e descobri que, com alguns ajustes no modelo, é possível otimizar o uso da GPU. Então resolvi escrever sobre algumas dessas otimizações que &lt;strong&gt;me ajudaram a acelerar MUITO o fine-tuning&lt;/strong&gt;, para caso alguém esteja com o mesmo problema. Vou explicar no contexto do meu projeto, que era a detecção de violência em vídeos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkga0tf4zh9nfmpp2exf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkga0tf4zh9nfmpp2exf.png" alt="A imagem mostra uma conversa em português em um aplicativo de mensagens. O usuário pergunta sobre a diferença de uma GPU em comparação com a T4. A resposta é que a mudança não é significativa, e a compra foi feita por indisponibilidade e falta de tempo, custando 58 reais, o preço de uma pizza." width="456" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mixed Precision Training
&lt;/h2&gt;

&lt;p&gt;Imagine que o seu modelo precisa "assistir" a sequência de frames do vídeo e "entender" o que está acontecendo em cada frame e como eles se relacionam no tempo para decidir se há violência. Para fazer isso, o modelo realiza milhões, talvez até bilhões, de operações matemáticas complexas em cada frame e entre os frames (que é algo que os modelos tansformers fazem muito bem, devido ao mecanismo de atenção). &lt;/p&gt;

&lt;p&gt;Cada frame é uma imagem, que são são representadas por muitos números. Uma sequência de frames de um vídeo de alta resolução é uma quantidade ENORME de dados numéricos. O modelo transformer também tem muitos parâmetros (pesos), que também são números. &lt;strong&gt;Armazenar e processar todos esses números com a "precisão total" (FP32) exige uma quantidade gigantesca da memória da GPU.&lt;/strong&gt; Isso limita o tamanho dos vídeos que você pode analisar de uma vez (batch size) ou a resolução dos frames que você pode usar. E fazer todas essas bilhões de contas com "precisão total" leva tempo. Mesmo com uma GPU poderosa, o treinamento (o processo de ensinar o modelo a detectar violência) pode ser muito lento.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhr3uxaf9fo0webrz136n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhr3uxaf9fo0webrz136n.png" alt="A imagem é um diagrama que ilustra um otimizador de precisão mista. À esquerda, um retângulo verde rotulado " width="542" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Com mixed precision, o sistema decide que essas operações podem ser feitas usando a "meia precisão" (FP16)&lt;/strong&gt;, então a maior parte das operações dentro do seu transformer, como as que processam a informação de cada frame, calculam a atenção entre frames, ou transformam os dados através das camadas internas, não precisa de toda a precisão do FP32 o tempo todo. É como se, para a maior parte da análise visual e temporal dos frames, o modelo usasse uma representação numérica mais resumida. Isso usa metade da memória por número e, além disso, as GPUs do google colab têm unidades especiais (os chamados tensor cores da NVIDIA) que &lt;strong&gt;fazem contas em FP16 muito mais rápido do que em FP32&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O "conhecimento" do seu modelo, que são os pesos que ele aprende para identificar padrões de violência, continua sendo guardado com "precisão total" (FP32). Se eles continuassem sendo guardados em FP16,  eles poderiam simplesmente virar zero devido à menor precisão do formato. É aí que entra o GradScaler: ele "amplifica" esses pequenos ajustes temporariamente para que eles não sumam durante os cálculos feitos em FP16. Depois que os cálculos são feitos, ele retorna os ajustes de volta ao tamanho original antes de usá-los para atualizar os pesos principais (que estão em FP32). &lt;strong&gt;Isso garante que o modelo possa aprender até os detalhes mais sutis que são necessários, mesmo usando FP16 para a maior parte do processamento.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ajuste de &lt;em&gt;batch_size&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;O batch_size representa quantos blocos de imagens (sequências de frames) são mostrados ao modelo de uma vez durante o treinamento. Quando você envia um batch maior, você dá mais trabalho para a GPU fazer em paralelo em vez de esperar por vários batches pequenos. Isso mantém as unidades de processamento da GPU mais ocupadas, levando a uma utilização melhor e maior velocidade no processamento de dados. O objetivo é usar o máximo de recursos da GPU sem estourar a memória, então &lt;strong&gt;processar mais exemplos de uma vez resulta em melhor aproveitamento da GPU&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Além disso, durante o treinamento, o modelo calcula o erro (loss) para cada batch e usa esse erro para calcular os gradientes (as direções de ajuste) para aquele batch específico. O gradiente é um vetor que aponta para a direção de maior aumento da função de perda (erro) em relação aos pesos do modelo naquele momento. Em termos simples, ele mostra como cada peso do modelo deve ser ajustado (para mais ou para menos, e quanto) para diminuir o erro de forma mais eficiente. Os pesos do modelo são então atualizados com base nesses gradientes calculados a partir do batch.&lt;/p&gt;

&lt;p&gt;O gradiente calculado a partir de um batch é uma estimativa do gradiente "verdadeiro" que seria calculado se usássemos todo o conjunto de dados de treinamento (o que é impraticável). &lt;strong&gt;Um batch maior geralmente fornece uma estimativa de gradiente mais precisa e menos ruidosa do gradiente global, já que estamos calculando a média do "direcionamento" de erro sobre mais exemplos&lt;/strong&gt;. Isso leva a um caminho de otimização mais estável e direto em direção ao mínimo da função de loss.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;em&gt;torch.backends.cudnn.benchmark&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Essa configuração, quando configurada como &lt;em&gt;True&lt;/em&gt;, instrui a biblioteca cuDNN (uma biblioteca da NVIDIA otimizada para operações de redes neurais que o PyTorch utiliza em GPUs) a &lt;strong&gt;encontrar e usar os algoritmos mais rápidos para as operações que ela executa&lt;/strong&gt; para uma dada configuração específica de input e operação.&lt;/p&gt;

&lt;p&gt;O que acontece é que, para cada tipo de operação matemática que o cuDNN otimiza (como as multiplicações de matrizes usadas intensivamente no seu modelo Transformer, ou possíveis convoluções iniciais) e para cada tamanho específico de dados de entrada que essa operação recebe pela primeira vez durante o treinamento, o cuDNN realiza internamente um pequeno teste. Ele executa essa mesma operação usando diferentes algoritmos que tem disponíveis e mede qual deles termina mais rápido na sua GPU atual com aqueles dados daquele tamanho. Uma vez encontrado o algoritmo mais veloz para essa configuração específica de operação e dados, o cuDNN armazena essa informação.&lt;/p&gt;

&lt;p&gt;A mágica acontece nas centenas de milhares ou milhões de vezes seguintes que o seu modelo precisa executar exatamente essa mesma operação com os mesmos tamanhos de dados (o que ocorre repetidamente em cada passo de treinamento, batch após batch). &lt;strong&gt;Em vez de gastar tempo escolhendo um algoritmo ou usando um padrão que pode não ser o ideal, o cuDNN vai direto e usa o algoritmo mais rápido que ele descobriu no teste inicial.&lt;/strong&gt; Isso resulta em uma aceleração significativa no tempo total de treinamento, pois as partes mais pesadas e repetitivas dos cálculos do seu modelo são executadas da maneira mais eficiente que a sua GPU permite para aquelas dimensões exatas, o que funciona muito bem quando os tamanhos de input do modelo (como frames de vídeo redimensionados) são consistentes.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>O que são zero-shot, one-shot e few-shot learning em LLMs?</title>
      <dc:creator>Lhayana Vieira</dc:creator>
      <pubDate>Wed, 26 Mar 2025 20:51:47 +0000</pubDate>
      <link>https://dev.to/lhayana/sera-que-preciso-mesmo-fazer-um-fine-tuning-37ip</link>
      <guid>https://dev.to/lhayana/sera-que-preciso-mesmo-fazer-um-fine-tuning-37ip</guid>
      <description>&lt;p&gt;Hoje em dia todo mundo utiliza modelos de LLM gigantes gratuitamente via chat, o que é ótimo. Mas caso você queira desenvolver alguma aplicação específica, irá usar algum modelo pré-treinado menor, provavelmente algum gratuito do hugging face.&lt;/p&gt;

&lt;p&gt;Caso você esteja utilizando um modelo menor (como o T5, por exemplo, que foi o que utilizei aqui para fazer os testes), existem alguma estratégias de criação de prompt que irão afetar o desempenho. Vamos supor que você quer envie esse prompt "Classifique esse review: Esse filme é muito bom! Sentimento:" esperando que ele diga se o sentimento será positivo ou negativo. Ele terá um desempenho ruim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6a07y2ac1enk9iikgko0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6a07y2ac1enk9iikgko0.png" alt="Texto alternativo" width="428" height="126"&gt;&lt;/a&gt;&lt;br&gt;eu diria que “it’s amazing” não é bem um sentimento. minha psicóloga também.
  &lt;/p&gt;

&lt;p&gt;Já o GPT-4o faz essa análise perfeitamente. Essa ténica de prompt de não dar nenhum exemplo se chama zero-shot inference.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl9imd052cxcd9xiual9u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl9imd052cxcd9xiual9u.png" alt="Image description" width="691" height="152"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Porém, se você adicionar um exemplo, o modelo menor irá funcionar melhor. Essa técnica é chamada de one-shot inference. Caso não funcione, você pode utilizar a few-shot inference, que imagino que já deu pra entender o que é (dar mais de um exemplo).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftar19y6o55p5977a1ibz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftar19y6o55p5977a1ibz.png" alt="Image description" width="800" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caso dar vários exemplos ainda não funcione, as técnicas de prompt não irão te salvar, &lt;strong&gt;você irá precisar de um fine-tuning&lt;/strong&gt;, que é o processo de ajustar o modelo ao seu conjunto de dados para melhorar o desempenho dele em alguma tarefa específica.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>K-means não é o suficiente</title>
      <dc:creator>Lhayana Vieira</dc:creator>
      <pubDate>Fri, 10 Jan 2025 14:53:49 +0000</pubDate>
      <link>https://dev.to/lhayana/k-means-nao-e-o-suficiente-212</link>
      <guid>https://dev.to/lhayana/k-means-nao-e-o-suficiente-212</guid>
      <description>&lt;p&gt;Muito se fala sobre k-means quando o assunto é clusterização. E o objetivo desse post não é falar mal do algoritmo que minimiza a soma das distâncias quadradas entre os pontos de dados e seus centróides, afinal ele é genial. Mas é importante lembrar que, &lt;strong&gt;para usar o k-means, todo os seus dados precisam ser numéricos&lt;/strong&gt;. E não, não vale usar one hot encoding nos categóricos, pois isso irá distorcer as distâncias euclidianas. Então, na vida real, &lt;strong&gt;nem sempre iremos conseguir usar o k-means&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O que usar, então? Como uma boa chata vou responder: depende!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhp9djbkziomrp0qzvdb0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhp9djbkziomrp0qzvdb0.png" alt="Piada de uma 'Notícia' com o título 'Papagaio aprende a dizer 'Depende' e se torna economista" width="800" height="815"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Se seus dados são todos categóricos&lt;/strong&gt; (como, por exemplo, dados populacionais de gênero, etnia, profissão, etc), &lt;strong&gt;você deve utilizar o k-modes&lt;/strong&gt;, que ao invés de utilizar a média, utiliza a moda como medida central dos clusters.&lt;/p&gt;

&lt;p&gt;Mas &lt;strong&gt;nem sempre todos os nossos dados são categóricos&lt;/strong&gt;, muitas vezes há algumas &lt;em&gt;features&lt;/em&gt; categóricas e outras numéricas. Se for o seu caso, &lt;strong&gt;use o k-prototypes&lt;/strong&gt;. Esse algoritmo calcula a dissimilaridade de maneira separada para atributos numéricos e categóricos, e depois combina essas dissimilaridades usando uma soma ponderada.&lt;/p&gt;

&lt;p&gt;Deixo abaixo alguns artigos para caso queiram se aprofundar um pouco sobre esses algoritmos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@shailja.nitp2013/k-modesclustering-ef6d9ef06449" rel="noopener noreferrer"&gt;K-modes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@anwarhermuche/tutorial-de-clusteriza%C3%A7%C3%A3o-de-dados-categ%C3%B3ricos-e-mistos-com-k-prototypes-98a2115a6b9f" rel="noopener noreferrer"&gt;K-prototypes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E se você quiser se aprofundar BASTANTE, recomendo &lt;a href="https://www.youtube.com/watch?v=iMP8k1fpq1s" rel="noopener noreferrer"&gt;essa aula aqui&lt;/a&gt;, é excelente e bem completa.&lt;/p&gt;

&lt;p&gt;Eu aprendi isso muito tempo depois de ter estudado sobre clusterização  pela primeira vez, então resolvi fazer esse artigo, acredito que isso é algo que devia ser muito mais abordado do que é atualmente. Espero ter te ajudado!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
