Aprendizado de máquina: clustering de K-Means | Lazy Programmer Inc | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Aprendizado de máquina: clustering de K-Means

teacher avatar Lazy Programmer Inc

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Vídeo de introdução ao clustering de K-Means

      3:03

    • 2.

      Uma introdução fácil ao clustering de K-Means

      6:55

    • 3.

      Exercício: encontrando centros de agrupamento

      9:03

    • 4.

      Solução: encontrando centros de cluster

      10:59

    • 5.

      Exercício: encontrando atribuições de cluster

      4:54

    • 6.

      Solução: encontrando atribuições de cluster

      6:59

    • 7.

      Exercício: K-Means na íntegra

      6:45

    • 8.

      Solução: K-Means na íntegra

      16:13

    • 9.

      Objetivo de K-Means (teoria)

      12:52

    • 10.

      Objetivo de K-Means (código)

      5:04

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

81

Estudantes

--

Projetos

Sobre este curso

A análise de cluster é um elemento básico do aprendizado de máquina não supervisionado e da ciência de dados.

É muito útil para mineração de dados e big data porque encontra automaticamente padrões nos dados, sem a necessidade de rótulos, ao contrário do aprendizado de máquina supervisionado.

Em um ambiente do mundo real, você pode imaginar que um robô ou uma inteligência artificial nem sempre terá acesso à resposta ideal, ou talvez não haja uma resposta correta ideal. Você quer que esse robô seja capaz de explorar o mundo por conta própria e aprender coisas apenas procurando padrões.

Você já se perguntou como obtemos os dados que usamos em nossos algoritmos de aprendizado de máquina supervisionados?

Parece que sempre temos um belo CSV ou uma tabela, completa com Xs e Ys correspondentes.

Se você não esteve envolvido na aquisição de dados, pode não ter pensado nisso, mas alguém tem que fazer esses dados!

Esses “Y” têm que vir de algum lugar e, na maioria das vezes, isso envolve trabalho manual.

Às vezes, você não tem acesso a esse tipo de informação ou é inviável ou caro de adquirir.

Mas você ainda quer ter alguma ideia da estrutura dos dados. Se você estiver fazendo análise de dados, a automação do reconhecimento de padrões em seus dados seria inestimável.

É aqui que entra em cena o aprendizado de máquina não supervisionado.

Neste curso, vamos falar primeiro sobre clustering. É aqui que, em vez de treinar em etiquetas, tentamos criar nossas próprias etiquetas! Vamos fazer isso agrupando dados que se parecem semelhantes.

Neste curso, você vai aprender como construir o algoritmo de agrupamento de k-means.

Pré-requisitos:

  • Matemática básica
  • Codificação Python básica

Conheça seu professor

Level: Beginner

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. K-Means Clustering Introdução Vídeo: Todos e bem-vindos aos meus núcleos mais recentes de aprendizado de máquina com agrupamento k-means em Python. Então, quem sou eu e por que você deveria me ouvir? Bem, meu nome é o programador preguiçoso e sou autor de mais de 30 cursos on-line em ciência de dados, aprendizado de máquina em análise financeira. Tenho dois mestrados em engenharia e estatística. Minha carreira neste campo se estende por mais de 15 anos. Trabalhei em várias empresas que agora chamamos Big Tech e em várias startups. Usando a ciência de dados, aumentei as receitas milhões de dólares com as equipes que liderei. Mas o mais importante é que eu sou muito apaixonado por trazer essa tecnologia fundamental para você. Então, sobre o que é esse curso? Este curso tem como objetivo ensinar a você um dos algoritmos fundamentais e o aprendizado de máquina, conhecido como agrupamento k-means. Este é um exemplo de um algoritmo de aprendizado de máquina não supervisionado. Isso significa que ele deve ser usado em conjuntos de dados que não têm rótulos. Este curso se concentra em ensinar como o algoritmo funciona e ajudá-lo a obter um entendimento sólido implementando você mesmo em k-means. Essas habilidades são essenciais se você quiser fazer ciência de dados e aprendizado de máquina no mundo real. Então, quem deve fazer esse curso e como você deve se preparar? Este curso foi desenvolvido para estudantes interessados em ciência de dados e aprendizado de máquina e já têm alguma experiência com bibliotecas de computação numérica, como NumPy e Matplotlib. Observe que isso também implica que você tenha alguma experiência com matemática vetorial e matricial, que será usada neste curso. A segunda habilidade que você precisará é de uma programação básica. Qualquer linguagem é boa, mas como esse curso usa Python, isso seria o ideal. Felizmente, o Python é uma linguagem muito fácil de aprender. Portanto, se você já conhece outro idioma, não deve ter problemas em se atualizar. E para esses dois tópicos, a compreensão do ensino médio deve ser suficiente e uma compreensão de graduação seria ainda melhor. Então, em termos de recursos, o que você precisará para fazer este curso? Felizmente, não muito. Você precisará de um computador, um navegador da web e a conexão com a Internet. E se você está assistindo a este vídeo, então você já atende a essas condições. Agora, vamos falar sobre por que você deve fazer este curso e o que você deve esperar obter dele. Bem, simplificando, o agrupamento K-means é um dos principais algoritmos abordados em qualquer currículo de aprendizado de máquina. É fundamental, se você trabalha em finanças, biologia ou qualquer outro campo que envolva a análise de dados. agrupamento K-means será uma ferramenta útil. Ao final deste curso, você terá aprendido o suficiente para usar o que aprendeu em conjuntos de dados do mundo real. Então, espero que você esteja tão empolgado quanto eu para aprender sobre esse algoritmo incrível. Obrigado por ouvir, e nos vemos na próxima palestra. 2. Uma introdução fácil para o clusters de K-Means: Nesta palestra, vou apresentar a você a intuição por trás do agrupamento de K-means e como ele funciona. Então, em primeiro lugar, sabemos que , como esse é um algoritmo de aprendizado de máquina, vamos trabalhar com dados. Então, vamos tentar visualizar alguns dados que podemos obter. A primeira coisa que você notará sobre esses dados é que todos esses pontos são da mesma cor. Isso ocorre porque estamos fazendo um aprendizado sem supervisão. Portanto, não há classes dadas a esses pontos. Cada ponto é apenas o vetor, e isso é tudo o que sabemos sobre cada ponto. Não sabemos se deveria ser vermelho, azul ou não. Mas há uma característica importante desse conjunto de dados. O que você nota sobre isso? Bem, nossas habilidades de reconhecimento de padrões humanos nos permitem ver imediatamente que parecem haver três grupos de dados aqui. Em outras palavras, não precisamos que o conjunto nos diga que esses três grupos são distintos. Nossas próprias habilidades de reconhecimento de padrões nos permitem ver isso com muita clareza. Isso é o que queremos dizer com aprendizado não supervisionado. Não é supervisionado porque ninguém precisa nos dizer a resposta. Esse também é um conceito-chave por trás da inteligência artificial geral. Se vamos construir uma IA que possa navegar no mundo real. Praticamente falando, provavelmente deve ter alguma intuição geral e capacidade de reconhecimento de padrões, pois seria inviável fornecer dados de treinamento para todas as situações possíveis. encontro. Então, esse é um ponto muito importante. Estamos usando nossas próprias habilidades de reconhecimento de padrões para diferenciar esses clusters. Não está nos dados em si. Mas agora você deve ter notado que o que acabamos de ver foi uma situação muito única e muito específica. A primeira limitação desses dados é que eles eram bidimensionais. Obviamente, isso é necessário porque se tivéssemos, digamos, um conjunto de dados de 100 dimensões, você não conseguiria vê-lo. O universo em si tem apenas três dimensões de espaço. Então isso é tudo que você pode ver. Às vezes, recebo estudantes que não estão convencidos desse fato. Então, se você está convencido de que pode ver além das três dimensões, tente desenhar um cubo de dez dimensões e veja o que acontece. Agora. Por que eu menciono isso? Bem, a maioria dos conjuntos de dados do mundo real não é bidimensional. Portanto, você não pode ver a maioria dos dados do mundo real. E, portanto, suas próprias habilidades de reconhecimento de padrões não são úteis nesse cenário. Seria bom se tivéssemos algum algoritmo para descobrir que clusters são grupos de dados que poderiam funcionar independentemente da dimensionalidade dos dados. Claro, é disso que trata todo esse curso. Portanto, você pode ter certeza de que saberá a resposta para essa pergunta até o final deste curso. Aqui está outro problema. Nos dados originais que mostrei a você. Eu o gerei para que mostrasse três clusters distintos com muita clareza. Mas e se nossos dados tiverem essa aparência? Ou se nossos dados tiverem essa aparência? Agora você pode ver que os clusters não estão tão bem definidos. Em geral, gostaríamos de saber se o cluster que achei bom ou não? Neste curso, também responderemos a essa pergunta. Então, como primeiro passo para entender o agrupamento k-means, vamos considerar dois tipos de verdades fundamentais sobre os clusters no conjunto de dados. Suponha que me digam que esses pontos amarelos, roxos e verdes são os centros de alguns aglomerados. E eu gostaria de saber a qual centro esse novo ponto azul pertence? E acho que faz sentido intuitivo que esse ponto, é claro, pertença ao centro mais próximo. Então, para decidir a qual cluster um ponto de dados pertence, eu escolho o centro de agrupamento mais próximo. Muito intuitivo. Vamos agora considerar o segundo fato fundamental sobre clusters. Suponha que me digam que esses pontos de dados que você vê aqui pertencem ao mesmo cluster. Vamos chamá-los de X1 a X C. Gostaríamos de saber qual é o centro desse cluster. Obviamente, essa é apenas a média de todos esses pontos de dados. Isso também é chamado de centróide, se você estiver pensando geometricamente. E, como você sabe, a maneira de encontrar a média de um conjunto de vetores é somá-los e dividi-los pelo número de vetores. É assim que você encontra o centro do cluster. A grande questão é que temos esses dois fatos fundamentais sobre clusters. Existe alguma maneira de combinarmos essas duas ideias para nos dar um algoritmo de agrupamento. Agora, acredite ou não, esses dois fatos fundamentais são tudo o que você precisa para implementar o agrupamento K-Means. Acontece que, se eu inicializar os centros de agrupamento aleatoriamente , se eu repetir essas duas etapas repetidamente, convergirei para uma resposta. Então, só para recapitular, começamos escolhendo alguns pontos aleatórios à medida que nosso cluster se centra. Em seguida, posso usar o fato de que cada ponto no meu conjunto de dados pertence apenas ao cluster cujo centro está mais próximo. Então, atribuo todos os meus pontos de dados ao centro de agrupamento mais próximo. Então, agora que sei que cada ponto de dados pertence a um cluster, posso calcular novos centros de agrupamento com base em todos os pontos que pertencem a ele. Em seguida, volto à primeira etapa, que é atribuir pontos de dados aos novos centros de agrupamento. Novamente. Mais adiante nesta seção, veremos demonstrações visuais de como as atribuições e os centros de agrupamento evoluem em cada iteração. Vamos recapitular essa palestra. Já que era certo que algumas ideias muito importantes foram introduzidas. Primeiro, falamos sobre o fato de que às vezes é muito fácil ver clusters. Não precisamos que o conjunto nos informe o rótulo de cada ponto de dados. Podemos ver facilmente qual ponto de dados pertence a qual cluster. Isso significa que aprendemos a entender os dados de forma não supervisionada. Em segundo lugar, é importante entender como esse exemplo foi limitado. Às vezes, os limites entre os dados podem não estar tão claramente definidos. E, na maioria das vezes, não poderemos analisar nossos dados porque eles não serão bidimensionais. Então, o que gostaríamos de ter é um algoritmo automático que possa encontrar clusters para nós, considerando qualquer conjunto de dados arbitrário. Finalmente, analisamos dois fatos fundamentais sobre clusters. O fato de que cada ponto deve ser atribuído ao agrupamento ao qual está mais próximo. E o fato de que cada centro de agrupamento deve ser apenas o centro de cada ponto que pertence a ele. Vimos que, quando combinamos esses dois fatos, obtemos o algoritmo de agrupamento k-means. 3. K-Means alerta de exercícios 1: Nesta palestra, vamos começar a exercitar suas habilidades de codificação. Este curso foi desenvolvido para ser um curso prático. Então, para cada tópico sobre o qual você aprenderá, você o implementará em código. Como diz meu ditado, se você pode implementá-lo, então você não o entende. Na verdade, descobri recentemente que o famoso físico Richard Feynman disse algo muito parecido. Ele disse: O que eu não posso criar, eu não entendo. Então, se você não concorda comigo, também discorda de um dos físicos mais famosos de todos os tempos. Ok, então como você pode praticar o que acabou de aprender? Bem, nesta palestra, seu exercício será implementar uma parte do agrupamento K-means. Então, aqui está o exercício. Primeiro, você vai gerar um conjunto de dados sintéticos aleatório chamado x. Como você lembra, para o aprendizado de máquina, x deve ser bidimensional, n por d como o número de amostras e d é o número de recursos. Você também criará uma matriz unidimensional de identidades de cluster chamada “por quê”. Por que também deve ser do tamanho n, o número de amostras. Isso ocorre porque, para cada uma das amostras, você atribuirá a ela uma identidade de cluster. Lembre-se de que eles devem ser números inteiros de zero a k menos um, inclusive, indicando que você tem K clusters no total. Então, por exemplo o primeiro X pode pertencer ao cluster zero, o segundo X pode pertencer ao Cluster um e assim por diante. Agora, a forma de criar esses dados depende totalmente de você. Você pode criar os dados aleatoriamente ou pode tentar gerar dados apropriados para agrupamento. Pessoalmente, eu optaria pelo último, pois o resultado fará mais sentido e, no final, será visualmente mais agradável. Digamos, para nosso exemplo, que n seja igual a 300, d seja igual a dois e k seja igual a três. Isso significa que suas identidades de cluster assumirão os valores 01.2. Eu sugeriria que seus dados fossem divididos uniformemente entre os três clusters. Portanto, você terá 100 pontos de dados pertencentes ao cluster 1100 pontos de dados pertencentes ao cluster 2.100 pontos de dados pertencentes ao cluster três. Ok? Então, depois de gerar os dados, o que você faz com eles? Então, recapitulando, o que temos até agora é x, que é do tamanho n por d, e y, que é do tamanho n. A próxima etapa, que é a peça central deste exercício, é calcular a média de cada agrupamento. Então, o que isso implica? Bem, vamos supor que eu tenha três agrupamentos, então k é igual a três. Então, o que você precisa fazer é percorrer cada um dos valores do cluster. Isso é 0.1.2. Para cada um desses clusters, encontre cada ponto de dados que pertence a esse cluster. Então, neste exemplo, suponha que você escolha o cluster zero. Então, você quer encontrar todos os pontos de dados em x que pertencem ao cluster zero. Como você se lembra, essas informações são armazenadas em y, então você deseja encontrar a média de todos esses pontos de dados. Como exercício, pense no tamanho do resultado. Vou te dar um minuto para pensar sobre isso ou você pode pausar este vídeo até ter a resposta. Ok, então qual é o tamanho do vetor médio de todos os pontos de dados que pertencem a um cluster específico? Bem, lembre-se de que todos os nossos pontos de dados são vetores de características que vivem em um espaço d-dimensional. Em nosso exemplo, d é igual a simplificar, a média de um grupo de vetores d-dimensionais ainda é d-dimensional. Em outras palavras, isso significa simplesmente que você tem vários pontos de dados e deseja encontrar o ponto de dados que está no centróide ou no centro de massa. E, claro, fazer isso é apenas uma questão de somar todos os vetores e dividir pelo número total de vetores. Ok? Então, agora vamos supor que, para cada um dos clusters k, você calcule os vetores médios da dimensão d. Isso significa que você tem k vetores, cada um com tamanho d. Obviamente, você pode armazená-los em uma matriz bidimensional de tamanho k por d. Portanto, esse deve ser o resultado deste exercício. Uma matriz k por d que contém os vetores médios da dimensão d para cada um dos clusters k é nossa saída desejada. Vamos pensar nesse problema de uma maneira diferente, caso você não tenha entendido da primeira vez. Ok, então suponha que temos n pontos de dados, X1, X2, até x n. Cada um desses eixos é um vetor d-dimensional. Além disso, temos n, as identidades de cluster correspondentes Y1 e Y2, até YN. Cada um desses y's é um número inteiro que pode ser zero até k exclusivo. Lembre-se de que se combinarmos todos esses x em uma única matriz, um grande X, essa era a matriz n por d à qual eu estava me referindo anteriormente. Podemos fazer a mesma coisa com todos os y's para obter um grande vetor y de comprimento n. Vamos tornar este exemplo um pouco mais concreto. Suponha que Y assuma os valores que você vê aqui. Então Y1 é igual a zero, Y2 é igual a um, Y3 é igual a y quatro é igual a um, y é igual a dois, y é igual a zero, Y sete é igual a zero, y é igual a um e y nove é igual a dois. Deve ficar claro que n é igual a nove. Agora, seu trabalho é encontrar a média de todos os x que pertencem a cada um dos agrupamentos. Para o cluster zero, você precisa encontrar a média de X1, X6, X7. Isso porque E1, E6 e E7 são zero. Para o cluster um, você precisa encontrar a média de x2, x4 anexo oito. Isso porque Y2, y quatro e y são iguais a um. Para o cluster dois, você precisa encontrar a média de X3, x5, X9. Isso porque Y3, Y cinco e Y nove ou igual a dois. Vamos chamar esses meios de m1, m2 e m3. Logicamente, todos esses devem ser vetores de comprimento d, já que eles são apenas a média dos vetores de comprimento D. Finalmente, você deve combinar esses três vetores médios em uma única matriz de tamanho k por d, onde neste exemplo, k é igual a três. E lembre-se de que os dados que usaremos para este exercício serão gerados aleatoriamente por você. Conforme mencionado anteriormente, você pode torná-lo completamente aleatório ou fazer com que pareça com dados, o que é apropriado para agrupamento. Agora você pode perguntar: por que não podemos usar dados reais para este exercício? Essa é uma pergunta importante para iniciantes. Lembre-se de que todos os dados são iguais. Portanto, esse exercício seria o mesmo, independentemente do tipo de dados que usamos. Gerar os dados você mesmo garante que você entenda a forma e a natureza dos dados, vez de simplesmente carregá-los em algum CSV. Portanto, isso requer maior compreensão, o que é bom. Além disso, já que temos muitos conjuntos de dados práticos do mundo real usados em outras partes do curso. Agora não é a hora para isso. Agora, quero deixar claro que ainda não estamos fazendo nenhum aprendizado de máquina. Este é apenas um exercício de programação muito simples para você se aquecer. Tudo o que estamos fazendo é um pouco de geometria, e espero que você concorde comigo sobre isso. Estamos dizendo: Aqui está um monte de pontos de dados, e cada um deles pertence a um grupo diferente. Agora encontre a média de cada ponto de dados em cada grupo. Ok, então espero que você concorde comigo que este é apenas um simples exercício de programação geométrica. E não há nada a temer neste momento. Como bônus, como nossos dados são bidimensionais, também podemos traçá-los em uma grade bidimensional. Então, seu segundo emprego é esse. Primeiro gráfico, todos os dados em uma grade bidimensional usando o gráfico de dispersão. Neste gráfico de dispersão, você também deve codificar por cores cada ponto de dados acordo com as identidades de agrupamento armazenadas na matriz y. Não importa quais sejam as cores reais, só isso cada ponto de dados no mesmo cluster deve ter a mesma cor. Finalmente, agora que você tem as médias de cada agrupamento, você também deve traçar os centros de cada agrupamento no mesmo gráfico de dispersão. Você deve usar um estilo diferente para poder diferenciar os centros de agrupamento dos pontos de dados reais. Como você pode ver neste gráfico, eu usei estrelas. Ok, então esse é o exercício número um para agrupamento de k-means. Boa sorte, e nos vemos na próxima palestra. 4. Solução de exercícios K-Means 1 (encontrando centros de cluster): Nesta palestra, veremos a solução para o exercício anterior, k-means, o exercício número um. Observe que atualmente não fornecerei o código para este exercício, pois ele é muito curto. E como seu trabalho neste curso é aprender a programar sozinho, isso inclui digitar, criar e obter a sintaxe correta. No mínimo, você deve poder copiar o que eu faço, embora eu não recomende fazer isso. Se você estiver fazendo os exercícios conforme as instruções, não precisará de um arquivo de código contendo as soluções para esses exercícios. Digitar no teclado aumenta a memória muscular, que é uma habilidade inestimável ao codificar. Se você tiver um motivo legítimo para não poder digitar o código sozinho, informe-me e farei possível para acomodá-lo. Ok, então vamos começar. Primeiro, vamos importar o numpy e matplotlib para bibliotecas padrão para computação numérica em Python. Em seguida, vamos definir nossos parâmetros de configuração. Conforme mencionado anteriormente. Isso significa que a dimensionalidade dos dados é igual ao número de clusters é três e o número de pontos de dados é 300. Em seguida, criaremos os dados. Essa talvez seja a parte mais desafiadora do roteiro. Então, vamos falar sobre o que queremos fazer em alto nível. Primeiro, a ideia básica é que eu quero ter três nuvens de pontos de dados para que cada nuvem possa ser considerada um cluster diferente. Essa é a imagem que você deve ter em mente quando pensa em agrupamento. Então, como podemos gerar essas nuvens? Bem, uma ideia possível é extrair amostras de três distribuições gaussianas diferentes, cada uma com uma média diferente. Como você lembra, uma distribuição gaussiana é caracterizada por sua média e covariância. A média nos dirá onde o gaussiano está localizado. E a covariância nos dirá como os pontos de dados do Gaussiano seriam distribuídos. Então, vamos começar definindo três médias correspondentes aos três gaussianos. Vou dizer que mu um é 00, que está na origem, dirá que mu dois é 55. E diremos que meu três é 05. Em seguida, vou criar uma matriz N por D chamada x. É aqui que armazenaremos os dados para preencher x, começaremos com os primeiros 100 pontos, como você lembra, os dois pontos. E então o 100 significa selecionar os índices de zero a 100. Então, no lado direito, eu digo gerar uma matriz de tamanho 100 por d a partir do normal padrão, e então eu adiciono um mu1. Isso resulta em 100 pontos de dados com a dimensão dois centrada em mu um com covariância de identidade. Em seguida, vou fazer a mesma coisa. Mas para os próximos 100 pontos de dados, desta vez os índices serão de 100 a 200. E no lado direito, os pontos de dados serão centrados em mu dois. Finalmente, faremos a mesma coisa para os últimos 100 pontos de dados, para os índices, 200, 300. Esses pontos de dados serão centrados em mu três. Em seguida, criarei a matriz y, que nos informa a identidade do cluster correspondente a cada um dos eixos. Como acabamos de criar o eixo e eles estão todos em ordem, a estrutura de Y é muito simples. São apenas 100 zeros seguidos por 100 1's seguidos por 100 dois. Como você se lembra, se você criar uma lista e multiplicá-la por um número inteiro, ela simplesmente repetirá esse elemento da lista várias vezes. Então, quando usamos a operação plus nessas listas, o resultado é a concatenação das listas. E, por fim, convertemos o resultado em uma matriz NumPy. Como é mais fácil trabalhar com matrizes NumPy, compare duas listas. Observe que, embora nossos dados tenham uma estrutura especial com todos os clusters em ordem, o código subsequente não assume isso. Em outras palavras, o código que estamos prestes a escrever funcionará com dados de qualquer estrutura. Ok, então a próxima etapa é visualizar os dados que acabamos de criar. Para fazer isso, criaremos um gráfico de dispersão chamando a função de dispersão. O primeiro argumento que passamos na primeira coluna de x. No segundo argumento, passamos na segunda coluna de x. No terceiro argumento nomeado, especificamos a cor correspondente ao nosso pontos de dados e passamos y. Note que y é apenas um monte de zeros, uns e dois. Usando esse esquema, o matplotlib decidirá quais cores reais atribuir aos nossos pontos de dados. Obviamente, você pode ter mais controle de granulação fina se quiser escolher as cores sozinho. Mas isso é bom o suficiente para nós. Ok, então espero que isso seja o que você esperava ver. Podemos ver que temos três nuvens de pontos de dados, e cada uma delas é colorida de acordo com y. Em seguida, vamos considerar a questão, dada uma matriz bidimensional de tamanho n por d, por convenção, como faço para obter o tamanho D, esse vetor médio dessa matriz? Ou seja, eu queria obter a média de cada uma das n amostras. Agora você tem que ter cuidado aqui, porque se você chamar apenas a média de pontos por si só, você obterá um único escalar, que é a média de cada elemento de X. Não queremos isso, já que o que deve acabar com é um vetor médio, não um escalar. Para conseguir o que queremos, temos que passar o eixo do argumento igual a zero, que diz obter a média ao longo da dimensão n. Se você passar um eixo igual a um, obterá a média ao longo da dimensão d. Como sempre, você é incentivado a experimentar essas coisas por si mesmo para ter uma ideia melhor de como elas funcionam. Não acredite apenas na minha palavra. Ok, então quando executamos isso e verificamos a forma do resultado, obtemos dois conforme o esperado. Em seguida, usaremos o que acabamos de descobrir para calcular a média de cada cluster usando as identidades de cluster fornecidas na matriz y. Para começar, criaremos uma matriz de tamanho K por D chamou meios. Em seguida, calcularemos a média de cada agrupamento, um por um, começando com o agrupamento zero. Ok, então esse código é bastante compacto, mas na verdade, há muitas coisas acontecendo ao mesmo tempo. Se você não entender isso à primeira vista, espero que tenha feito o exercício de uma forma que não fez sentido para você. Portanto, você nunca precisará encontrar a mesma solução que eu fiz. Você só precisa encontrar a mesma resposta. Seu código pode ser completamente diferente do meu. Então, como você sabe, o código pode ser lido de dentro para fora. Então, vamos começar com a coisa mais interna, que é y igual a zero. Se você não sabe o que isso faz, eu recomendaria isolar isso e imprimi-lo sozinho para que você tenha um melhor entendimento. Essencialmente, o que isso retorna é uma matriz booleana. Como você sabe, iguais, iguais devem retornar verdadeiro ou falso. Mas como o estamos usando em uma matriz, é por isso que o resultado também será uma matriz. Como dizemos igual a zero, matriz resultante será verdadeira em todos os locais em que y é igual a zero e falsa caso contrário. Ok, então o que acontece quando indexamos x com essa matriz booleana? Bem, como você deve ter adivinhado, dado o exercício que estamos fazendo, isso seleciona todos os elementos de X onde o índice é verdadeiro. Ok, então espero que isso faça sentido. Como você lembra, X é uma matriz com n linhas. Por que também há uma matriz com n elementos? Quando dizemos que y é igual a zero, isso retorna uma matriz booleana com n elementos. Então, ao indexar x com essa matriz booleana, recuperamos apenas as partes de X onde o índice era verdadeiro. Ou seja, obtemos apenas as linhas de x correspondentes a quando y é igual a zero. Equivalentemente, obtemos apenas as linhas de X que pertencem ao cluster zero. Finalmente, tomamos a média usando a função média, passando um eixo igual a zero. Em seguida, atribuímos o vetor médio resultante à nossa matriz de médias no lado esquerdo no índice zero. Em seguida, fazemos a mesma coisa para calcular as médias do agrupamento um e do agrupamento dois. Ok, então, tecnicamente, esse é o fim do exercício. Embora fosse bom se pudéssemos visualizar o que acabamos de encontrar. Então, o próximo passo é redesenhar nosso gráfico de dispersão. Mas com o cluster significa que calculamos anteriormente. Primeiro, começaremos desenhando o mesmo gráfico de dispersão que tínhamos antes. Em seguida, chamamos de dispersão novamente, mas desta vez usando a matriz de médias que acabamos de criar. Como antes. O primeiro argumento é a primeira coluna de médias, que se refere à primeira dimensão. E o segundo argumento é a segunda coluna de médias, que se refere à segunda dimensão. Em seguida, vou passar alguns argumentos adicionais para facilitar a visualização do enredo. Primeiro, passarei S igual a 500, que controla o tamanho dos pontos de dados. Isso fará com que a média seja muito maior do que os dados. Em segundo lugar, passarei e C é igual a vermelho para tornar cada um dos centros do agrupamento vermelho. Isso diferenciará ainda mais esses pontos dos meus dados. Como nota lateral, este é um exemplo de como podemos definir a cor dos pontos de dados no gráfico de dispersão manualmente, enquanto não escolhemos as cores no gráfico de dispersão anterior. Finalmente, definiremos um marcador igual a estrela, para que, em vez de aparecer apenas como um círculo, as médias pareçam estrelas, o que facilitará ainda mais a visualização. Ok, então vamos executar isso. Ok, então espero que seja isso que você espera que ele veja. Cada vetor médio aparece aproximadamente no centro de cada agrupamento. Conforme mencionado, eles representam os centros de massa ou os centróides de cada agrupamento. Além disso, podemos ver que eles estão aproximadamente nos centros gaussianos originais. Uma das estrelas está em 00, outra está em 05, outra está em 55. 5. K-Means alerta de exercícios 2: Nesta palestra, vamos direto para o segundo exercício desta seção. Anteriormente, seu exercício era pegar um conjunto de pontos de dados e um conjunto de identidades de cluster. Em seguida, você tinha que encontrar a média dos pontos de dados para cada cluster. Desta vez, você vai na direção oposta. Agora, você receberá um conjunto de médias junto com um conjunto de pontos de dados. Seu trabalho será pegar esses meios e esses pontos de dados e descobrir a qual cluster cada ponto de dados pertence. Portanto, lembre-se de que isso é feito acordo com a distância euclidiana, ou equivalentemente a distância euclidiana quadrada. Observe que, como os quadrados da função de aumento monotônico, independentemente de você pegar o quadrado ou não, não alteram a resposta. Ou seja, se você estiver comparando distâncias, digamos 2,4, se você as quadrar, obterá 4,16. Portanto, a relação de que dois é menor que quatro é preservada porque quatro também é menor que 16. E são apenas as distâncias relativas que importam, porque tudo o que você está tentando fazer é encontrar a média mais próxima. A distância real em si não aparece na resposta. Ok, então, como antes, vamos pensar em um exemplo muito simples de como isso funcionará. Suponha que tenhamos três médias, m , zero, M1 e M2. Também temos nove pontos de dados, x1, x2, x3, até X9. Então, o que podemos ver? O que podemos ver é que X1, X2 e X3 estão todos mais próximos de zero do que de M1 e M2. Portanto, X1, X2 e X3 pertencem ao cluster zero. De forma semelhante, podemos ver que X4, X5 e X6 estão mais próximos de M1 do que de zero ou M2. Portanto, X4, X5 e X6 pertenciam ao cluster um. Finalmente, X7, X8 e X9 estão mais próximos de M2 do que de m zero ou m1. Portanto, X7, X8, X9 pertencem ao cluster dois. Então, espero que isso faça sentido. O desafio é colocar essa intuição visual no código. Veja como seu código deve funcionar em alto nível. Primeiro, você vai gerar um conjunto de médias em uma matriz de tamanho k por d, assim como no exercício anterior. Além disso, você pode usar os mesmos valores para n, d e k como fizemos anteriormente. Então n é igual a 300, d é igual a dois e k é igual a três. Lembre-se de que d é igual a dois é útil porque podemos vê-lo visualmente. Segundo, você também gerará uma matriz de dados de tamanho n por d. Como antes, você pode criar essas matrizes aleatoriamente, mas pode ser útil gerá-las de uma forma que faça sentido a partir de um agrupamento perspectiva. De qualquer forma , você decide fazer isso. Pessoalmente. Acho que é mais útil gerar os dados forma estruturada para que, depois de encontrar a resposta, você possa traçar os resultados como uma verificação de sanidade. Falando nisso como um bônus, eu encorajaria você a traçar os resultados com o resultado do exercício. Como saída, você deve ter um vetor de comprimento n, que nos informa a identidade do cluster de cada ponto de dados. Então, por exemplo se o primeiro x pertence ao cluster zero, então o primeiro valor de sua matriz de saída deve ser zero. Finalmente, quero observar que existem muitas maneiras de fazer esse exercício. Você já deve ter ouvido falar que quando você está usando o NumPy, não é bom usá-lo para loops porque é lento ou para loops. Em vez disso, você pode ter sido informado de que é melhor usar operações vetorizadas. Ou seja, normalmente você gostaria de encontrar uma função numpy que possa fazer o que quiser ao mesmo tempo. Pessoalmente, acho que, para este exercício, é mais instrutivo fazê-lo com for-loops porque ele faz você pensar sobre o que está acontecendo algorítmicamente. Em última análise, se você decidir usar para loops ou não, depende de você. Por fim, quero reiterar que, assim como o exercício número um, isso ainda não é exatamente o aprendizado de máquina. Na verdade, é apenas mais um simples aquecimento de programação em geometria. O que estamos fazendo é pegar vários pontos de dados e vários centros. E estamos apenas tentando descobrir para cada ponto de dados qual centro está mais próximo. Então, espero que você concorde comigo que este exercício é apenas mais um exercício simples de programação geométrica. Ok, então boa sorte no exercício número dois, e nos vemos na próxima palestra. 6. Solução de exercício K-Means 2 (encontrando tarefas de cluster): Nesta palestra, veremos a solução para o exercício número dois de k-means. Como antes, certifique-se de ter concluído o exercício antes de assistir a esta palestra. Observe que atualmente não fornecerei o código para este exercício, pois ele é muito curto. E porque seu trabalho neste curso é aprender a programar sozinho. Isso inclui digitar, criar e obter a sintaxe correta. No mínimo, você deve poder copiar o que eu faço, embora eu não recomende fazer isso. Se você estiver fazendo os exercícios conforme as instruções, não precisará de um arquivo de código contendo as soluções para esses exercícios. Digitar no teclado aumenta a memória muscular, que é uma habilidade inestimável ao codificar. Se você tiver um motivo legítimo para não poder digitar o código sozinho, informe-me e farei o possível para acomodá-lo. Ok, então vamos começar. Então, primeiro vamos começar importando numpy e o matplotlib , como antes. Em seguida, inicializamos nossos parâmetros de configuração. Isso é n, o número de amostras igual a 300, d, o número do recurso é igual a dois e k, o número de agrupamentos igual a três. Em seguida, inicializamos três meios pelos quais definiremos nossos centros de agrupamento. Por conveniência, usei os mesmos meios que usávamos anteriormente. Em seguida, vamos gerar os dados. Começamos inicializando uma matriz de todos os zeros chamada X da forma N por D. Em seguida, definimos os primeiros 100 pontos a serem normalmente distribuídos centrados na média com covariância de identidade. Então, eles irão nos índices de zero até 100. Em seguida, definimos os próximos 100 pontos de dados para serem normalmente distribuídos centrados na segunda média, também com covariância de identidade. Eles irão para os índices de 100 a 200. Finalmente, definimos os últimos 100 pontos de dados para serem normalmente distribuídos centrados na terceira média, também com covariância de identidade. Eles irão nos índices de 200 a 300. Em seguida, temos nosso circuito principal, que é o cerne desse exercício. Esse é o loop em que atribuiremos as identidades do cluster. Começaremos criando uma matriz chamada Y preenchida com todos os zeros de tamanho n. É claro que ela deve ter tamanho n porque precisamos de uma identidade de cluster para cada um dos nossos N pontos de dados em x. Então y é a matriz que armazenará nossa identidade de cluster. Em seguida, percorremos todos os n pontos de dados. Conforme mencionado no prompt de exercício anterior, há muitas maneiras de fazer isso, mesmo sem que você mesmo precise escrever nenhum for-loops. No entanto, isso não é realmente útil neste exercício, pois escrever as coisas dessa maneira ajuda você a pensar sobre o algoritmo com mais clareza. Ok, então deve ficar claro que, como estamos examinando todos os n pontos de dados, vamos encontrar a melhor identidade de cluster uma por uma, para cada ponto de dados. A ideia básica é essa. Para cada ponto de dados, x abaixo do pequeno n, vamos percorrer cada uma das médias do cluster. Para cada um desses meios, vamos verificar a distância de x do pequeno n dois. Isso significa. Vamos acompanhar todas essas distâncias para que possamos encontrar a que é mínima. Então, se significa que zero é o mais próximo, isso significa que a identidade do cluster é zero. Se a média for a mais próxima, isso significa que a identidade do cluster é uma e assim por diante. Ok, então vamos começar inicializando uma variável chamada k mais próxima de menos um. Usamos menos um como valor sentinela. Isso será sobrescrito à medida que iteramos no loop interno. Da mesma forma, inicializamos uma variável chamada min dist para o infinito. Claramente, essa variável armazenará a distância mínima de x de n a todas as médias. Ao inicializá-lo até o infinito, qualquer distância que encontrarmos dentro do loop será menor. Ok, então, em seguida, percorremos pequeno k é igual a zero até o grande K. Ou seja, vamos percorrer cada centro do agrupamento. Dentro do loop, encontramos a distância quadrada entre x do pequeno n e as médias de k, a média k eth. Se você não reconhece por que essa é a fórmula da distância quadrada, eu recomendaria revisar a definição de distância euclidiana quadrada. Chamaremos essa variável D. Em seguida, verificaremos se d é menor ou não que min dist. Obviamente, na primeira vez que iteramos nesse loop, é garantido que isso seja verdade, pois Mendez começa como infinito e qualquer número finito é menor que infinito. Se essa condição for verdadeira, fazemos duas coisas. Primeiro, atualizamos min dist para ser a distância atual d. Ou seja, min dist é a menor distância que encontramos até agora. Em seguida, atribuímos o k mais próximo ao k atual. E, novamente, isso significa que k mais próximo é o índice do centro de agrupamento mais próximo que encontramos até agora. Você deve estar convencido de que, ao final desse loop, K mais próximo armazenará o índice do centro do agrupamento mais próximo e Min dist armazenará a distância correspondente. Assim, nesse ponto, podemos atribuir o k mais próximo a y, indexar esse pequeno n. Em outras palavras, k mais próximo é a identidade do cluster para o ponto de dados x de uma pequena terra. Quando o loop externo estiver concluído, teremos encontrado as identidades do cluster para todos os grandes pontos de dados N. Então, como uma verificação de sanidade, gostaríamos de traçar nossos resultados. Felizmente, você já sabe como fazer isso porque fizemos isso na palestra anterior. Vamos executar isso. Ok, então espero que seja isso que você espera que ele veja. Podemos ver que todos os pontos de dados são atribuídos na cor correta, acordo com qual dos meios eles estão mais próximos. Esses são todos os pontos mais próximos de 00 ou uma cor, que parece ser roxa. Todos os pontos mais próximos de 05, ou uma cor diferente, que parece ser verde. Finalmente, todos os pontos de dados mais próximos de 55, ou outra cor, que parece ser amarela. 7. K-Means alerta de exercícios 3: Nesta palestra, continuaremos nossa discussão sobre o agrupamento de K-means. Um fato surpreendente que você aprenderá é que, ao fazer os dois exercícios anteriores, você realizou essencialmente 90% do trabalho. Você deve se lembrar de mim dizendo que os dois exercícios anteriores eram apenas aquecimentos muito simples. Eles não passavam de simples exercícios de programação para fazer alguma geometria. E, ao mesmo tempo, o que você verá é que o agrupamento k-significa nada além desses dois exercícios geométricos simples repetidos repetidamente. Mais cedo. No início desta seção, declaramos duas intuições fundamentais sobre clusters. Vamos relembrar o que são. fato número um é que a identidade do cluster de cada ponto de dados deve ser do centro do cluster mais próximo. Quero dizer, isso simplesmente faz sentido. Por exemplo, suponha que tenhamos dois grupos de estudantes, aqueles que são muito altos, digamos, 6 pés em média, aqueles que são muito baixos, digamos 5 pés em média. Se sua altura é de cinco pés e 10 “, então deve ser óbvio que você pertence ao grupo alto e não ao aglomerado curto. Por quê? Porque você está mais perto de 6 pés, então você está a 5 pés. Então, espero que isso seja intuitivo. Então, aqui está o fato número dois. O centro do cluster é simplesmente a média ou média de todos os pontos de dados pertencentes a esse cluster. Isso também faz sentido se tivermos cinco pessoas em nosso grupo o chamado centro seria a altura média de todos em nosso grupo. Espero que isso seja tão intuitivo quanto o fator número um. Além disso, você deve reconhecer que esses dois fatos nada mais são do que os dois exercícios anteriores. Anteriormente, eu disse que agrupamento k-means simplesmente é um loop que simplesmente repete essas duas operações repetidamente. Então, qual é a implicação disso? Bem, isso significa que, ao fazer os dois exercícios anteriores, você já implementou essencialmente o agrupamento k-means. A única coisa que resta é colocá-los juntos. Por outro lado, parece haver um pequeno problema. O que se pode considerar um problema de galinha e ovo. Você vê que cada uma das duas etapas parece depender dos resultados da outra. Para encontrar os meios, você precisa das identidades do cluster. Mas para encontrar as identidades do cluster, você precisa dos meios que vieram primeiro, a galinha ou o ovo. A resposta para isso é chamada de etapa de inicialização. Nesse caso, k-means fornece uma resposta para saber se a galinha ou o ovo vem primeiro. Basicamente, o que fazemos é atribuir os centros de agrupamento a pontos de dados escolhidos aleatoriamente em x. Portanto, essa é uma etapa que executamos antes repetirmos as duas etapas que discutimos anteriormente. Então, o resultado final é esse. Para inicializar K-means, começamos escolhendo k pontos aleatórios em x e atribuindo-os a centros de agrupamento. Em seguida, entramos em um loop. Dentro do circuito, empregamos o fax número um. Atribuímos cada ponto de dados em x aos nossos centros de agrupamento atuais. Na primeira vez em que isso for executado, esses centros de agrupamento serão simplesmente um subconjunto dos pontos em x. A saída dessa etapa é um novo conjunto de identidades de agrupamento. Em seguida, empregamos os fatos e, número dois, recalculamos cada um dos centros de agrupamento de acordo com as identidades mais recentes do cluster. Portanto, o resultado dessa etapa é um novo conjunto de centros de agrupamento. Em seguida, repetimos esse processo várias vezes até que o algoritmo converja. Então, como sabemos quando o algoritmo converge? Bem, é quando as identidades do cluster param de mudar. Quando as identidades do cluster pararem de mudar , obviamente os centros do cluster também pararão de mudar. E não adianta continuar executando o loop, pois a resposta não mudará mais. Um detalhe crucial que você precisa saber sobre o agrupamento K-means é esse. Embora o processo que acabei descrever pareça bastante simples, ele não resulta na mesma resposta toda vez que você o executa. Ou seja, k-means nunca encontra uma solução globalmente ideal. Em vez disso, só é possível encontrar uma ótima local. Uma solução simples para isso é simplesmente executar k-means várias vezes e , em seguida, escolher a melhor resposta. Definiremos o que melhor significa mais adiante nesta seção. Praticamente falando, isso é praticamente tudo que você pode fazer. E no mundo real, isso é ótimo. Então, espero que o próximo exercício não seja uma surpresa. Seu trabalho, antes de passar para a próxima palestra, será implementar k-means no código. Lembre-se de que você já fez a maior parte do trabalho nos exercícios 1.2 desta seção. Tudo o que você realmente precisa fazer é colocar essas duas coisas em um loop. O esboço básico do seu código deve ser o seguinte. Primeiro, você vai gerar um conjunto de dados chamado X da forma n por d. Desta vez, você realmente deseja gerar um conjunto que seja apropriado para o agrupamento k-means. Ou seja, não gere um conjunto de dados a partir de apenas um único gaussiano sem clusters claramente discerníveis. Mais adiante nesta seção, veremos os conjuntos de dados do mundo real. Mas, por enquanto, só queremos garantir que sua versão do k-means faça o que deveria fazer. Em seguida, você inicializará os centros do agrupamento selecionando k pontos selecionados aleatoriamente de x. Como você mesmo criou os dados, você pode escolher os valores de N, D, E, e K. Eu ainda recomendaria usar d igual a dois para que você possa visualizar os resultados. Em seguida, você inserirá um loop que executa as duas etapas que discutimos anteriormente. Dentro do loop, você deve verificar a convergência. Ou seja, quando as identidades do cluster pararem de mudar nesse ponto, você deverá sair do loop. Finalmente, se você escolher D igual a dois, você deve visualizar os resultados. Você pode fazer isso desenhando um gráfico de dispersão dos dados junto com as identidades de agrupamento que você encontrou. Além disso, você também deve desenhar os centros de agrupamento correspondentes. Como você já aprendeu como fazer isso, não deve ser muito difícil fazê-lo novamente. Ok, então boa sorte neste exercício, e nos vemos na próxima palestra. 8. Solução de exercício 3 K-Means na totalidade): Nesta palestra, vamos implementar o agrupamento e o código k-means. Como sempre, espero que você tenha tido a chance de concluir esse exercício antes de assistir a esta palestra. Caso contrário, eu recomendaria interromper este vídeo agora até que você conclua o exercício. Lembre-se de que isso é um benefício para você estar aprendendo. Então, espero que você tenha passado algum tempo de qualidade implementando esse código. Na verdade, o terceiro exercício deveria ter sido muito mais fácil do que os dois primeiros. Já que o terceiro exercício é, na verdade, apenas juntar os dois primeiros exercícios. Então, espero que você tenha descoberto que esse é o caso. Ok, então vamos começar. Primeiro. Vamos importar novamente o numpy e o matplotlib. Agora, você já está familiarizado com a forma como usamos essas bibliotecas. Em seguida, definimos novamente os parâmetros de configuração R. Isso é d igual a k é igual a três e n é igual a 300. Portanto, a dimensionalidade dos dados é dois, o número de agrupamentos é três e o número de amostras é 300. Em seguida, criamos os dados. Começamos criando primeiro os verdadeiros meios mu um, mu dois e mu 31. Um fator importante a ser lembrado é que essas verdadeiras médias são desconhecidas pelo algoritmo K-means. Eles são conhecidos por nós porque os estamos usando para criar os dados. Mas k-means não faz uso deles de jeito nenhum. Talvez você queira revisar o código sozinho para verificar esse fato. Então, como antes, vamos usar as médias 0,055,05. Em seguida, criamos nossa matriz X de tamanho n por d. Definimos os primeiros 100 pontos para serem gaussianos centrados na covariância de identidade mu um. Definimos os próximos 100 pontos um gaussiano centrado em mu dois, novamente com covariância de identidade. Finalmente, definimos os últimos 100 pontos um gaussiano centrado em mu três, novamente com covariância de identidade. Então, espero que você se lembre de tudo isso dos exercícios anteriores. Agora, você pode perguntar: agora que estamos fazendo o código de agrupamento real do K-means, por que ainda não estamos usando dados reais? Portanto, essa é uma boa pergunta para iniciantes e todos os iniciantes devem ser capazes de responder a essa pergunta até o final deste curso, se ainda não estiverem. Ok, então, número um, lembre-se de que fizemos um bom número de exemplos sobre dados do mundo real fora desta palestra. O foco desta palestra é implementar o K-Means. O tipo de dados que usamos é irrelevante. Por que isso é irrelevante? Bem, lembre-se de que não importa quais sejam os dados, esse código para o agrupamento k-means não mudaria. Portanto, não há nenhuma vantagem real usar dados reais neste momento. Na verdade, há apenas uma desvantagem. Então, por que isso? Bem, isso nos leva ao ponto número dois, que é que o uso de dados sintéticos nos permite testar se nosso código funciona ou não conforme o esperado. Isso é importante e o aprendizado de máquina, quando você escreve código, precisa testar se ele funciona ou não. Mas você não pode fazer isso se usar seu código em algum conjunto de dados de alta dimensão desconhecido. Por outro lado, esse é um conjunto de dados que nós mesmos criamos e é bidimensional, então podemos vê-lo. Mais importante ainda, sabemos qual deve ser a resposta. Portanto, é uma boa maneira de testar se nosso código está funcionando ou não. Então, espero que agora você tenha um bom entendimento sobre por que dados sintéticos são importantes. Além disso, você entende que ainda analisaremos dados reais em outras partes do curso. Portanto, você não perdeu nenhuma oportunidade de analisar dados reais. Ok, então, neste momento, vamos traçar nossos dados para que possamos nos lembrar de como eles se parecem. Desta vez, traçaremos apenas x porque essa é a única coisa dada ao nosso algoritmo k-means, como você verá em breve. Anteriormente, em nossas duas primeiras tarefas de aquecimento, presumimos que recebemos os centros do cluster ou que recebemos as identidades do cluster. Agora, estamos em um cenário mais realista que não sabemos nenhum dos dois, só conhecemos x. No entanto, mesmo apenas traçando x por si só, podemos ver intuitivamente onde os agrupamentos deveriam estar. Ok, então vamos desenhar nosso enredo. Então, espero que você concorde que os agrupamentos de clusters são muito intuitivos. Posteriormente, ao aprender técnicas mais avançadas, você entenderá por que gerar nossos dados a partir de nuvens gaussianas é, na verdade, o caso de uso ideal. Em seguida, começamos o código para o agrupamento k-means. Começaremos fazendo a inicialização. Como você se lembra, isso envolve atribuir aleatoriamente os centros do agrupamento usando pontos escolhidos aleatoriamente de x. Então, primeiro, começamos criando uma matriz de centros de agrupamento de forma K por D. Isso porque são k centros de agrupamento, cada dimensão de largura B. Em seguida, fazemos um loop, k vezes. Dentro do loop, escolhemos um índice aleatório de zero até n menos um. Se você estiver interessado, você pode verificar se eles são escolhidos a partir de uma distribuição uniforme. Chamamos os resultados disso de I e I é um número inteiro de zero até n menos um. Em seguida, atribuímos x sub I como o centro do cluster KF. Então pegamos nossa matriz de centros de agrupamento e a indexamos em k. Em seguida, fazemos nosso loop k-means. Como você se lembra, isso envolve duas etapas repetidas repetidamente. E essas duas etapas são simplesmente os dois exercícios anteriores que você já fez. Então, primeiro vamos começar definindo uma variável chamada max iterates como 20. Isso definirá um limite máximo de quantas vezes nosso loop itera. Normalmente, k-means converge bem rápido. Então, você descobrirá que nem todas as iterações são necessárias. Em seguida, criamos uma matriz vazia para armazenar as identidades do cluster. Como antes, essa será uma matriz de comprimento n, que armazena números inteiros de zero a k menos um inclusive. Em seguida, para fins de depuração, iniciarei uma lista vazia chamada identidades de cluster salvas para nos ajudar a visualizar o que k-means está fazendo em cada etapa, vamos salvar as identidades do cluster em cada iteração do loop. Em seguida, entramos em nosso loop. Então eu vou do zero ao máximo, o litro é exclusivo. Dentro do loop, primeiro fazemos uma cópia da matriz de identidades do cluster chamando a função copy. Vamos atribuir isso a uma variável chamada identidades antigas do cluster. Lembre-se de que é assim que verificaremos se o K-means convergiu ou não. Se as identidades do cluster não mudado de uma iteração para a próxima , não adianta continuar porque se as identidades do cluster forem as mesmas, as médias também serão mesmo. Portanto, as duas etapas resultariam em nenhuma alteração. Em seguida, também salvamos as identidades antigas do cluster em nossa lista de identidades para salvar o cluster. Em seguida, executamos a primeira etapa. Como você lembra, isso é para determinar se as identidades do cluster, dadas as centrais atuais do cluster. Observe que na primeira vez que você executa esse loop, os centros do agrupamento são apenas pontos aleatórios em X. Isso é Y. Nos exercícios anteriores, não era necessário fazer os dados tivessem uma boa aparência do jeito que eu fiz. K-significa que em algum momento, calcularemos identidades de agrupamento para as quais as médias do agrupamento estão no lugar errado. É por isso que eu dei a instrução de que você poderia criar qualquer x e qualquer conjunto de médias de agrupamento. O objetivo era apenas escrever um código funcional. Ok, então, basicamente, você deve reconhecer que todo esse ciclo é exatamente o mesmo que tínhamos antes. Vou passar por isso mais rápido desta vez, já que você já viu. Primeiro, examinamos todos os n pontos de dados. Dentro desse loop, inicializamos o mais próximo k de menos um, um valor sentinela. Em seguida, inicializamos min dist até o infinito. Isso é para que qualquer distância finita calculamos seja menor. Em seguida, analisamos todas as médias do cluster k. Isso ocorre porque queremos descobrir qual deles está mais próximo do enésimo ponto de dados. Dentro do loop, calculamos a distância euclidiana quadrada entre x sub n e o centro do agrupamento KF. Chamaremos isso de D. Em seguida, verificaremos se d é menor que o destino mínimo atual. Se for, salvamos o B atual como nosso novo men dist e salvamos k como nosso k mais próximo. Quando estamos fora do loop, atribuímos o k mais próximo como a enésima identidade do cluster. Em seguida, temos a segunda etapa, que foi o outro exercício que fizemos. Isso é para calcular as novas médias de agrupamento com base nas identidades de cluster que acabamos de encontrar. Então, novamente, você deve reconhecer esse código anterior com alguns ajustes de nomenclatura. Como você se lembra, trabalhamos de dentro para fora. Primeiro, usamos igual a igual para obter uma matriz booleana nos dizendo quais dos pontos de dados pertencem ao cluster 01 ou dois. Em seguida, usamos essa matriz booleana como um índice em x. Em seguida, chamamos a função média para obter a média de todos esses pontos de dados. E passamos um eixo igual a zero, modo que tomamos a média ao longo das linhas. Em seguida, atribuímos isso à nossa matriz, que contém os centros do agrupamento. Quando terminarmos, as etapas um e dois, podemos verificar a convergência. Novamente, você pode ver que usamos iguais a iguais. Queremos saber se nossas identidades de cluster antigas ou iguais às novas identidades de cluster que acabamos de encontrar como antes, já que os operandos para iguais são iguais nossas matrizes NumPy, isso retornará uma matriz NumPy de booleanos contendo somente verdadeiros e falsos, verdadeiros quando os dois lados são iguais e falsos caso contrário. Observe que nosso algoritmo só convergiu se todos os valores forem verdadeiros. Basicamente, estamos fazendo uma grande declaração. Então, estamos dizendo se a primeira posição é verdadeira, e se a segunda posição é verdadeira, e se a terceira posição é verdadeira e assim por diante. Um atalho para fazer isso é chamar a função np dot all. Isso retornará verdadeiro se a matriz que você passar contiver todas as verdadeiras dentro da instrução if, que só ocorre se a condição for verdadeira. Imprimimos em qual iteração convergimos e, em seguida, chamamos break para finalizar o loop externo. Ok, então vamos executar isso. Tudo bem, como você pode ver, K-means convergiu em muito menos de 20 etapas. Em seguida, assim como em nosso exercício anterior, faremos um gráfico do resultado do nosso algoritmo. Então, vamos pensar nisso em alto nível. Começando, tudo o que tínhamos era a matriz x. Sim, tínhamos as verdadeiras médias de agrupamento, mas estamos fingindo que não as conhecemos. E, de fato, quando você pensa sobre o que você teria com um conjunto de dados real, você não os conheceria. Portanto, nosso gráfico original era um gráfico apenas dos dados, sem cores e sem centros de agrupamento. Agora, depois de executar o K-means, temos mais informações. Agora temos identidades de agrupamento, o que nos permitirá dar a cada ponto em cada agrupamento uma cor diferente. Além disso, também temos os centros de agrupamento, para que também possamos desenhá-los em nosso gráfico. Como você se lembra, nós as desenhamos anteriormente como grandes estrelas vermelhas. Ok, então espero que você possa reconhecer esse código anterior. A primeira linha faz um gráfico de dispersão dos dados, colorindo cada ponto de dados pelas identidades do agrupamento. Então, todos os pontos pertencentes ao agrupamento zero, teremos uma cor, todos os pontos pertencentes ao agrupamento um, teremos outra cor e assim por diante. Em seguida, chamamos a função de dispersão. Mas desta vez nas médias, como antes, passamos em S igual a 500, aumentamos esses pontos de dados e passamos em Z igual a vermelho para torná-los vermelhos. E definimos um marcador igual a estrela, então eles aparecem como estrelas. Ok, então vamos executar isso. Tudo bem, então espero que seja isso que você espera que ele veja. Esses são os mesmos dados de antes, mas agora eles têm cores de acordo com as identidades de cluster encontradas por K-means. Além disso, marcamos centros dos aglomerados com estrelas vermelhas. Essas são todas as informações que não tínhamos antes de executar o K-means, onde só temos os dados em si. Em seguida, temos um pequeno loop para visualizar o processo de treinamento. Como você se lembra, salvamos as identidades do cluster em cada etapa do k-means. Então, ao traçar os dados de acordo com as identidades do cluster em cada etapa, podemos ver como os clusters evoluem à medida que o algoritmo aprende. Ok, então, se você quiser entender esse código, eu o examinarei muito rapidamente. Primeiro, pegamos o número de identidades de cluster que armazenamos. Observe que isso é variável, já que não sabemos quantas vezes o ciclo de treinamento durará, atribuiremos isso a uma variável chamada m. Em seguida, chamaremos a função em plt.plot subplots para definir o tamanho da parcela. O primeiro argumento define a largura e o segundo argumento diz a altura. Eu escolhi o número de cinco arbitrariamente, o que é grande o suficiente para mim. Mas o importante é definir a altura, que é m, vezes o tamanho da largura. Isso ocorre porque vamos transformá-los em subtramas e queremos que todos se encaixem. Cada uma das subparcelas individuais será de cinco por cinco. Ok, então, em seguida, fazemos um loop m vezes. Dentro do loop, chamamos plt.show subplot. Há três argumentos para essa função. primeiro é o número de linhas em nosso gráfico e o segundo é o número de colunas em nosso gráfico. Então, vamos ter m linhas e uma coluna. Ou seja, vamos fazer tramas e elas estarão todas em cima umas das outras. O terceiro argumento especifica qual está fora do m por um gráfico. Basicamente, isso é apenas eu mais um, já que o primeiro valor de i será zero. Em seguida, obtemos y, que será atribuído às identidades do cluster na iteração i. Em seguida, chamamos plt.show scatter transmitindo nossos dados e por que as configurações de cores atuais. Ok, então vamos executar isso. Tudo bem, então espero que esse gráfico seja útil para você ver a progressão de k-means. Você pode ver que começamos com tudo da mesma cor porque inicializamos as identidades do cluster para serem uma matriz de todos os zeros. Então, podemos ver que gradualmente a separação de agrupamentos melhora. Eventualmente, acabamos com as identidades finais do cluster, momento em que paramos de treinar. O importante é observar como as identidades do cluster melhoram lentamente em cada etapa. Ao definir as identidades do cluster de forma inteligente, as identidades do cluster não pioram, apenas melhoram. Em palestras posteriores, quantificaremos essa ideia. 9. K-Means Objective (teoria): Nesta palestra, falaremos sobre a função objetiva k-means. Para introduzir essa ideia, é útil primeiro ter alguma experiência com outros modelos de aprendizado de máquina, como regressão linear e regressão logística. Então, se você fizer isso, isso será muito útil. Mas se você não fizer isso, tente o seu melhor para acompanhar. Então, essencialmente, regressão linear, regressão logística e agrupamento de K-means são todos exemplos de aprendizado de máquina. A palavra-chave dessa frase é aprender. Portanto, a pergunta importante a ser feita é o que queremos dizer com aprender? De um modo geral, nosso modelo geralmente tem algum objetivo. Sim, você pode dizer que nosso objetivo é aprender, mas queremos ser mais específicos e específicos. O objetivo é um número. No aprendizado supervisionado, como regressão linear e regressão logística, esse número é o erro. Você pode pensar no objetivo, como em quantos erros eu cometo. Assim, aprender é configurar seu cérebro de forma que você cometa cada vez menos erros. Então, espero que a analogia com o aprendizado humano seja clara. Aprender é equivalente a configurar seu cérebro ou seu modelo de mundo para cometer menos erros. Na regressão linear, nosso objetivo é a soma dos erros quadrados. Há vários motivos pelos quais isso faz sentido, mas aqui está um motivo simples. regressão linear tem tudo a ver com encontrar a linha de melhor ajuste. Em outras palavras, gostaríamos que a linha estivesse o mais próxima possível dos pontos. Neste gráfico, você pode ver que às vezes nossa linha de melhor ajuste superestima quando faz uma previsão e outras vezes subestima. Assim, o erro pode realmente ser positivo ou negativo. Obviamente, você não quer simplesmente somar as áreas porque se você adicionar um número positivo e um número negativo que sejam iguais, obterá zero. Por exemplo, se um dos erros for mais cinco e o outro erro for menos cinco, mais cinco mais menos cinco é zero. E, obviamente, você não quer que o erro total seja zero quando seu modelo realmente cometeu um erro diferente de zero. Portanto, ajustamos os erros para que todos sejam positivos. Para transformá-los em um único número, nós os somamos, daí a soma dos erros quadrados. Chamamos isso de soma de erros quadrados ou função de custo. Observe que existem outros tipos de funções de custo, como a entropia cruzada, que é usada para regressão logística. No entanto, neste curso, estamos interessados principalmente no erro quadrado. A próxima etapa ao treinar um modelo de regressão linear ou regressão logística é descobrir como atualizar os parâmetros do modelo para que você possa diminuir o erro. Exatamente como você faz isso está fora do escopo deste curso, mas você é incentivado a aprender sobre regressão linear e regressão logística se estiver curioso. O importante é observar que, assim como o agrupamento k-significa, isso é feito iterativamente. Isso quer dizer que temos algum loop. Dentro do loop, atualizamos os parâmetros do modelo. Em cada iteração do loop, esperamos atualizar os parâmetros do modelo de forma que o erro sempre melhore. Novamente, a forma como fazemos isso está fora do escopo deste curso, mas reconhecemos que isso pode ser feito. Observe que a analogia com a aprendizagem humana também faz sentido nesse contexto. Você pode pensar em cada iteração do loop como uma passagem pelos dados de treinamento. Ou seja, cada vez que você vê os dados de treinamento, sua compreensão deles melhora, de forma que você diminuirá as áreas que você cria. Isso vale tanto para humanos quanto para máquinas. Quanto mais eu pratico, mais inteligente eu me torno. Ok, então acontece que muitos algoritmos de aprendizado de máquina são treinados dessa maneira. O método é, pensamos em alguma função de custo útil. Em seguida, derivamos uma regra de atualização forma que, se continuarmos aplicando essa regra de atualização, o modelo melhorará seu erro. Eventualmente, o erro converge para algum valor mínimo, momento em que você pode ver que concluiu esse aprendizado. Nessas situações, é útil traçar seu custo por iteração quando o treinamento for concluído para que você possa verificar se o processo de treinamento foi bem-sucedido. E, novamente, muitos algoritmos usam esse método de aprendizado. Conforme mencionado anteriormente, isso se aplica ao agrupamento de k-means, regressão linear e regressão logística. Também se aplica a redes neurais profundas, aprendizado por reforço e fatoração de matrizes, só para citar mais alguns exemplos. Ok, então essa é a ideia de funções de aprendizado e custo em geral. Mas qual é a função de custo ou a função objetiva para k-means? Como nota lateral, lembre-se de que custo e objetivo e perda e erro são todos sinônimos. Se eu usar um desses termos no lugar do outro, não se assuste. Todos eles significam a mesma coisa. De qualquer forma, se você se sentir confortável com a soma dos erros quadrados para regressão linear , também se sentirá confortável com a função de custo para k-means, que parece muito semelhante. Ok, então vamos passar por isso lentamente para que você entenda cada componente do objetivo. Primeiro, você pode ver que está na forma de uma soma dos erros quadrados. Somamos todos os n pontos de dados e colocamos a coisa dentro do quadrado. Observe que, como x sub n e m sub k são vetores, denotamos a distância euclidiana com barras duplas. Essa é a nossa notação para a norma. A parte que é confusa para algumas pessoas é a estranha notação. Isso é chamado de função indicadora. Ele tem um valor de um quando o argumento é verdadeiro e zero caso contrário. Como você lembra, y sub n armazena a identidade do cluster do enésimo ponto de dados. Portanto, podemos interpretar isso da seguinte maneira. Embora somemos todos os valores de k, apenas um deles contribui para o custo. É aquele que é igual a y de n. E isso ocorre porque y de n atribui X de n a um por agrupamento. Portanto, o custo é a distância quadrada entre x sub n e a média de qualquer agrupamento ao qual ele pertence. Então, espero que isso faça sentido. Somamos todos os n pontos de dados. Para cada um dos n pontos de dados, adicionamos uma única distância quadrada. A distância quadrada que adicionamos é a distância quadrada entre x sub n e a média do agrupamento ao qual ele pertence. Então, se x sub n pertence ao agrupamento k, então adicionamos a distância quadrada entre x de n e m sub k. Como nota lateral, você pode ver que o pequeno k soma de um até o grande K. No código. caso pequeno soma de zero até k menos um. Isso se deve apenas à forma como a programação em Python funciona. Portanto, esteja atento a essa diferença. Quando estamos escrevendo equações, normalmente é mais fácil contar a partir de um em vez de zero. Também vale a pena falar sobre por que esse objetivo faz sentido. Para entender isso, podemos considerar alguns cenários diferentes. Primeiro, vamos considerar o cenário em que os clusters estão claramente definidos. Todos os pontos de dados pertencentes a um cluster estão muito próximos do centro do cluster. Como esse é o caso, todas as distâncias quadradas serão muito pequenas. E, portanto, a soma total das distâncias quadradas também será muito pequena. Ok, agora vamos considerar um segundo cenário. Desta vez, os clusters estão menos bem definidos. Agora, os pontos de dados podem estar muito distantes do centro do cluster. Por causa disso, as distâncias quadradas são maiores e, portanto, a soma total das distâncias quadradas será maior. A função de custo não favorece esse cenário porque os clusters estão menos bem definidos do que antes. Agora, vamos considerar um terceiro cenário em que as atribuições reais do cluster estão erradas nesse caso, porque os pontos de dados não estão atribuídos ao centro de cluster mais próximo. A distância quadrada entre cada ponto de dados e o centro do agrupamento ao qual ele está realmente atribuído será muito grande. Como essas distâncias são muito grandes, a soma total das distâncias quadradas também será muito grande. Então, claramente, para reduzir o custo, devemos atribuir cada ponto de dados ao centro de agrupamento mais próximo, minimizando assim a distância. Observe que, por causa do algoritmo k-means, podemos escrever a função objetiva de uma forma alternativa e talvez essa seja mais fácil de entender. Portanto, neste fórum, não precisamos mais somar k. Sabemos que x de n será atribuído a dois, seja qual for o cluster mais próximo. Portanto, a parte interna do custo é apenas a distância quadrada entre x de n e qualquer meio que esteja mais próximo usar a raiz quadrada da distância euclidiana. Neste formulário, tomamos a distância mínima diretamente usando a notação Min. Outra forma de escrever o objetivo k-means é essa. Podemos definir uma quantidade chamada matriz de responsabilidade, indicada pela letra R. Basicamente, é a mesma coisa que a função indicadora que vimos anteriormente. Mas agora é uma matriz em vez de uma função, essencialmente r de n k, ou seja, o valor na linha n, coluna k é igual a um. Se x de n pertence ao agrupamento k, caso contrário, é zero. Você deve ser capaz de verificar se cada linha do nosso correspondente a um único ponto de dados em X contém apenas um único e o restante dos valores deve ser zero. Isso porque x só pode pertencer a um único cluster. Em outras palavras, x só pode ter uma única identidade de cluster. E, novamente, temos essa situação em que, embora somemos todos os valores de k, tecnicamente na realidade, apenas um desses termos é zero e o resto é zero porque o valor da responsabilidade é zero quando x não pertence a esses agrupamentos. Um fato interessante é que, para k-means, não derivamos o algoritmo de aprendizado da função de custo. Tudo o que fizemos foi partir de dois fatos simples sobre agrupamento que pareciam fazer sentido. Então descobrimos que, se repetirmos esses dois fatos simples em um loop, acabaríamos com k-means. Para recapitular, esses dois fatos são os seguintes. Primeiro, as identidades do cluster devem ser atribuídas para que X de n pertença ao centro do cluster mais próximo. E número dois, os centros do agrupamento são apenas a média de todos os x que pertencem a ele. No entanto, usando o que sabemos sobre funções de custo, isso não parece muito rigoroso. Você pode perguntar se a regressão linear e redes neurais podem derivar suas regras de aprendizado da função objetiva, por que podemos fazer isso com K-mean? Neste momento, ainda não estamos prontos para entender como esse algoritmo pode ser derivado. Mas se você quiser saber mais, é recomendável aprender sobre os modelos de mistura gaussiana, também conhecidos como GMM. Gmm é ou um modelo probabilístico, que pode ser visto como uma generalização do agrupamento de K-means através da lente do GMM, você pode derivar o algoritmo de atualização para K-means em termos de probabilística quantidades. Então, se você está procurando uma derivação mais rigorosa, essa seria a próxima etapa a ser explorada. O ponto principal desta palestra é entender a ideia de que k-means tem uma função objetiva em primeiro lugar. Você não saberia disso apenas pelo próprio algoritmo. É por isso que não discutimos isso até agora. O segundo ponto é que isso nos prepara para escrever mais código. Em particular, seu próximo exercício é esse. Pegue o código k-means que tínhamos anteriormente e adicione mais código para que, após o treinamento, possamos traçar a função objetivo em cada iteração. Esperamos que a cada iteração do agrupamento k-means, o objetivo fique vez menor até convergir para algum valor mínimo. Então, por favor, escreva esse código e confirme se isso é verdade. Tudo bem, então esse é o exercício. Boa sorte, e nos vemos na próxima palestra. 10. Objetivo (código): Nesta palestra, concluiremos o próximo exercício de implementação de k-means, que é traçar a função de custo durante o processo de treinamento. Depois de fazer isso, podemos considerar nossa implementação k-means concluída. Como você verá, isso é apenas uma simples modificação do código que já escrevemos. Como concluímos a maior parte do trabalho na palestra anterior. Como sempre, certifique-se de concluir este exercício antes de assistir a esta palestra, pois essa é sua lição de casa para este curso. Em outras palavras, não procure as soluções para a lição de casa antes de concluir a lição de casa. Ok, então vamos começar. Primeiro, você pode ver que todas as partes iniciais do código são iguais. As entradas são as mesmas, os dados são os mesmos. O que nos interessa é o ciclo de treinamento k-means. Então, vamos rolar até aquela parte do caderno. Agora, você pode ter assumido que teríamos uma função separada para calcular o custo, mas acontece que é mais simples computá-la em nosso ciclo de treinamento. Observe que usaremos a versão do custo que contém o operador Min. Nesse caso, não há necessidade de fazer uma soma dupla sobre as n amostras e os clusters k. A verdadeira razão pela qual você precisa somar os k clusters é porque você precisa descobrir a qual cluster cada ponto de dados x de n pertence. Em K-means, isso é definido pela distância mínima entre x de n e cada uma delas significa. No entanto, você se lembrará de que já encontramos isso no código. Assim, se fizéssemos uma função para fazer isso, estaríamos repetindo o trabalho que já fizemos, o que seria ineficiente. Ok, então vamos dar uma olhada no código para que possamos analisar onde já fizemos esse cálculo. Primeiro, antes mesmo de entrarmos no ciclo de treinamento, criaremos duas novas variáveis. Temos discos Min, que é plural, que é uma matriz que armazenará distâncias mínimas para todas as n amostras. A seguir, temos uma lista para armazenar os custos. Esta é uma lista e não uma matriz pois o número de iterações é variável. Então, isso armazenará o custo em cada iteração. Ok, então, dentro do circuito, vamos examinar cuidadosamente a etapa número um. Você notará que fazemos dois loops, um sobre os n pontos de dados e outro sobre os kclusters. Para cada um dos grupos k, calculamos a distância euclidiana da raiz quadrada entre a média do agrupamento, o enésimo ponto de dados. Além disso, você lembrará que armazenamos isso em uma variável chamada min dist. Isso é exatamente o que precisamos para o custo. Portanto, tudo o que precisamos fazer é que nosso circuito interno esteja completo. Basta salvar o disco principal nos discos principais da matriz. Depois de concluirmos a etapa um, agora temos todos os discos N Min, que são as distâncias euclidianas quadradas entre cada ponto de dados e o centro de agrupamento mais próximo. Como você sabe, o custo total é apenas a soma deles. Portanto, chamamos a função Sum em homens assim para obter o custo, e a armazenamos em nossa lista de carros. Depois disso, o resto do código é o mesmo. Então, depois de terminarmos o treinamento, podemos chamar plt.plot para traçar o custo por iteração. Então, como você pode ver, o custo por iteração diminui a cada iteração e, eventualmente, converge para algum valor mínimo, conforme prometido. E, novamente, vamos nos lembrar por que isso é importante. É importante fazer isso sempre que você estiver treinando um modelo usando um algoritmo iterativo. Normalmente, isso envolve minimizar ou maximizar algum objetivo. Portanto, você gostaria de traçar esse objetivo em cada iteração para verificar se seu código está funcionando conforme o esperado. Na verdade, às vezes, como no aprendizado profundo, mesmo que seu código esteja correto, as coisas ainda podem falhar devido à seleção abaixo do ideal de hiperparâmetros. Então esse é outro motivo pelo qual você precisa traçar o custo por iteração. Caso contrário, você não tem ideia se seu modelo aprendeu o que deveria aprender só porque seu código está correto. Isso não significa que os hiperparâmetros que você escolheu também estejam corretos. Portanto, a lição é que, sempre que você tem um algoritmo iterativo, é sempre importante traçar o custo por iteração.