[Música] Olá bem-vindos a quinta aula do curso de redes neurais nessa aula a gente vai aprender a preparar os dados para treinamento dos modelos e também realizar alguns tratamentos algumas alguns pré-processamentos importantes para fazer para realizar esse treinamento dos modelos de redesionais Então a gente vai aprender primeiro dividir o conjunto de dados para fazer a configuração desenvolvimento de um modelo de rede neural aprender a valer o que que é a validação cruzada como que ela pode ser utilizada nesse processo e aprender algumas formas de pré-processamento de dados em particular a transformação dos dados categóricos em
dados numéricos E também o processo de normalização dos dados para treinamento das redes bom divisão do conjunto A gente sabe que o nosso modelo de modelo Regional seja ele qual for ele ele é treinado a partir da experiência que ele recebe do Meio isso é composto a partir dos dados então com base nesse acesso aos dados o modelo vai aprender a fazer o mapeamento entrada e saída tentar extrair padrões esse conjunto de dados e assim por diante então nós temos uma base de dados que vai ser utilizada para treinar esse modelo utilizando algoritmo de aprendizagem
e a gente precisa treinar duas coisas que nós precisamos primeiro configurar o zíper parâmetros do modelo como eu já comentei antes a gente pode pensar nos preparandos como sendo número de neurônios número de camadas a estrutura macro da rede tipo de neurônio que eu tô utilizando e os parâmetros os pesos Associados naquela configuração já definida então se eu tenho uma rede com uma camada apenas e um neurônio eu vou até apenas os pesos Associados aqueles neurônios que são os parâmetros do nosso modelo Então como que a gente faz isso primeiro ponto a gente vai pegar
o nosso nossa base de dados aqueles dados que a gente tem disponíveis e dividir em dois grandes conjuntos primeiro chamado conjunto de desenvolvimento que ele vai ser utilizado para configurar para treinar para desenvolvimento do modelo treinar desde os parâmetros e por parâmetros e um conjunto de teste que ele é um conjunto que eu preciso separá-lo esquecer desse conjunto E eu só vou utilizar novamente quando o modelo já tiver treinado Qual que é o objetivo desse conjunto ele vai ser utilizado para avaliar Qual que é a real acurácia qual que é a real performance do modelo
em um subconjunto de dados que não foi visto durante o processo de desenvolvimento tá inclusive não ele pode ser um conjunto que sequer estava na nossa base de dados originário pode ser um conjunto por exemplo se eu tô fazendo classificação de imagens um conjunto de imagens coletadas posterior a geração dessa base de dados tá bom importante a gente não pode momento algum utilizar o conjunto de teste no processo de desenvolvimento dos modelos se o conjunto de teste ele for utilizar a formação desse modelo utilizando o conjunto de teste então aquele resultado de performance já não
vai ser mais um resultado isento a gente pode ter um resultado enviesado pelo próprio processo de desenvolvimento uma vez que nós temos o conjunto de desenvolvimento separado a gente vai quebrar esse conjunto em dois outros conjuntos um conjunto de treino e um conjunto de validação o conjunto de treino e validação eles devem ser oriundos da mesma distribuição de dados eu tenho que os dados representados no conjunto de validação não são iguais ao dos conjuntos de conjunto de treino mas eles têm que ser proveniente da mesma distribuição Ou seja você tem que ser compatíveis vamos supor
um caso extremo onde eu tenho um conjunto de validação que existe a presença de um exemplo da classe 3 e no conjunto de treino tem apenas exemplos da classe 1 e 2 Então são conjuntos que não são compatíveis porque as classes representadas em cada um deles são distintas né classes distintas Tá bom então o conjunto de treino ele vai ser basicamente utilizado para ajustar os parâmetros do modelo e o conjunto de validação ele vai ser utilizado para avaliar esse modelo ajustado com o conjunto de treino e qual que é a capacidade generalização desse modelo então
se essa capacidade tiver comprometida por exemplo o modelo não tiver conseguindo generalizar ou seja ir além dos dados do conjunto de treino a gente pode verificar esse erro como sendo alto e fazer realizar notificações nos hiper parâmetros modelo e repetiu o processo de Treinamento então aqui a gente mostra passo a passo como que é feito isso primeiro a gente começa o modelo definindo a primeira seleção dos hiper parâmetros não posso definir Então vou começar com uma rede bem simples uma rede com apenas uma camada e tantos neurônios Então esse é minha configuração de preparamos com
base nessa rede nesse modelo criado eu vou treinar esse modelo utilizando o meu conjunto de treino ou seja vou configurar os parâmetros da rede uma vez que o modelo tiver treinado ou ao longo do processo também que a gente utiliza o conjunto de validação para avaliar como que esse modelo está se comportando em dados que ele não viu durante o treinamento então se a validação for ruim ou seja o resultado a observado no conjunto de validação ele não for é um resultado aceitável a gente volta ao passo 1 reconfigura os hiper parâmetros desse modelo tentando
buscar o modelo melhor adaptado ao problema que a gente está avaliando então aqui um pequeno exemplo onde nós temos um conjunto de dados bidimensional seja só tem duas dimensões X1 e X2 e nós temos pontos da classe Azul representado pelas bolinhas e pontos da classe vermelha representados aqui pelo X então no primeiro cenário que é cenário aqui da esquerda nós Assumimos que eu vou desenvolver um modelo linear ou seja um modelo para fazer a separação dessas duas classes utilizando uma superfície uma estrutura linear no caso uma reta Então o que que a gente observa que
a gente consegue mais ou menos separar o conjunto só que existem diversos erros Em vários pontos em azul classificados como sendo vermelho e pontos em vermelhos classificados na região superior a reta que representa a região que deveria pertence aos pontos em azul Então nesse modelo Aquele modelo que ele tem auto viés eu tô forçando o modelo a modelo linear então era o modelo que ele não consegue se ajustar bem os dados porque ele não tem flexibilidade suficiente para acertar os dados a gente fala que aqui tá acontecendo o under Fit ou um sub ajuste dos
dados no segundo cenário aqui no centro nós temos o caso oposto onde a superfície de separação minha ela é customizada para interpolar exatamente a fronteira de separação entre todos os exemplos como consequência a gente tem um modelo com alta variância e o modelo que consegue é interpolar bem os dados do conjunto treinamento ele dificilmente vai ter condições para generalizar para um conjunto de validação em função dessa alta variância Então a gente tem um típico cenário de over Fit ou chamado sobre ajuste e aqui no final do lado direito a gente tem um modelo intermediário no
caso o modelo aproximadamente quadrático onde nós temos uma boa separação é uma superfície que apresenta uma baixa variância ou seja se eu fizer pequenas modificações no x e no Y eu não vou ficar variando tanto a resposta à classe e eu tenho alguns erros mais inferior a quantidade de erros que eu tenho no modelo linear então o que que a gente busca ao longo do processo muito modelo um cenário semelhante esse daqui então sempre vou treinar o dado com o conjunto de treino só que se eu só utilizar o conjunto treino pode acontecer de chegar
num cenário de over Fit então por isso a importância do conjunto de validação para verificar se a gente está conseguindo generalizar ou não algumas questões Primeiro qual deve ser o tamanho de cada conjunto aqui depende é comum a gente encontrar na literatura regra 80/20 7030 1090 80/20 é mais comum qual que é a ideia se eu tinha uma base pequena eu vou separar 80% do meu conjunto de desenvolvimento para o conjunto de treino e 20% para o conjunto de validação Qual que é o problema da abordagem 80/20 vamos supor que eu tenho um milhão de
exemplos não faz sentido separar 200 mil exemplos para validar o modelo Lembrando que quanto mais dados eu tenho no processo de Treinamento maior a capacidade de ajuste que eu tenho do modelo então se eu tenho uma base com milhão de dados eu poderia separar 99% do conjunto de desenvolvimento para o nosso treino e deixar apenas um dois por cento desse conjunto ou mesmo valor inferior a isso de acordo com o tamanho da base de dados para fazer a validação segunda questão é como deve ser feita essa divisão resposta direta é a seguinte eu vou embaralhar
o meu conjunto de desenvolvimento e fazer uma amostragem aleatória desse desse conjunto para formar o meu conjunto de treino e formar o meu conjunto de validação por que que eu faço essa atualização para tentar garantir que eu tô mostrando exemplos da mesma distribuição se os dados tiverem separados de forma ordenada por exemplo exemplos da classe 1 Classe 2 classe 3 e eu separar o final como validação eu vou cair naquele exemplo que eu comentei antes todos os exemplos da validação são daquelas três e os exemplos do treinamento são da classe 1 e 2 ou seja
não são exemplos compatíveis terceira questão conjunto de teste necessário a resposta curta que assim se eu quisesse seguir uma abordagem tradicional uma abordagem Ortodoxa de aprendizado de máquina eu preciso utilizar o conjunto de teste que ele é um conjunto isento que não participou do processo de desenvolvimento do modelo seja na configuração dos parâmetros ou dos hiper parâmetros na prática não é incomum encontrarmos na literatura autores reportando o erro de validação é para medir a performance do modelo por quê Porque o revivalidação ele é uma espécie de estimativa do erro de teste o problema é que
ele não é um conjunto de erro é um valor isento ou seja como eu tô configurando os e preparando os modelos utilizando o conjunto de validação eu tô utilizando esse conjunto para configurar o modelo então pode ser que eu configurar o modelo muito bom para o conjunto de validação então por isso ele é um resultado não necessariamente isento então na prática se eu quiser seguir abordagem tradicional de aprendizado de máquina eu preciso utilizar o conjunto de teste quarta questão existe problemas com abordagem que nós acabamos de explicar a divisão do conjunto de desenvolvimento em treino
e validação a resposta é sim vamos supor que o embaralhei os dados e mesmo embaralhando os dados a divisão que eu fiz um adequada cai naquele cenário classe 3 no conjunto de validação e as demais classes do conjunto de treino ou seja uma divisão que não é adequada então uma forma que a gente tem para melhorar reduzir a chance de acontecer uma divisão inadequada é utilizando a técnica de validação cruzada Qual que é a ideia aqui a gente vai separar o nosso conjunto de desenvolvimento em diversas partes chamadas aqui de foldes a gente pode separar
em cinco Fontes em 10 fotos e qual que é a ideia a gente vai treinar o modelo com quatro fotos nesse caso no exemplo com cinco volts nós vamos treinar o modelo com quatro fotos e validar o modelo com fold que ficou de fora com forro de amarelo que seria o forro de um aqui e a gente vai repetir esse processo variando o fold Amarelo então primeiro no primeiro treinamento o forro de amarelo vai ser o fold 1 no segundo treinamento for de amarelo forro de validação vai ser o 2 e o treinamento vai ser
um o três o quatro cinco e a gente vai fazer todas as combinações possíveis ou seja cinco treinamentos ao invés de um então o que que a gente ganha com isso se acontecer de uma divisão sem inadequada a chance que eu tenho de ter cinco divisões inadequadas é bastante reduzida então com isso uma vez que eu fiz esse cinco treinamentos o erro de validação reportado vai ser o erro médio das cinco das 10 execuções de acordo com o número de folders selecionados essa técnica chamada de cross validation algumas variações dessa técnica a gente pode utilizar
a validação cruzada estratificada qualquer ideia ao invés de simplesmente dividir em subconjuntos eu vou dividir em volts mas eu vou garantir que a proporção de classe existente em cada fold segue a mesma proporção existente na no conjunto como todo então se eu tenho 60% da classe 1 40% da Classe 2 cada fold dessa divisão vai ter que manter a proporção 60 40 uma segunda é uma segunda abordagem seria o livro out que é uma caso extremo da validação cruzada onde cada exemplo é o seu próprio folde bastante utilizada quando a gente tem um conjunto muito
restritivo de dados sei lá 10 20 exemplos então a gente pode treinar com n menos um exemplo e deixar o Anéis um exemplo de Fora variando validação é cruzada estratificada por agrupamento ao invés de fazer estratificação por classe manter a proporção de classe eu faço primeiro abordagem não supervisionado um agrupamento desses exemplos e extraio a forma fácil a formação dos foldes a partir de exemplos traídos igualmente de todos os clusters existentes dentro do meu problema e o Bootstrap no qual consiste na seleção na amostragem diversas amostragens do meu conjunto de desenvolvimento com reposição então eu
tento evitar essa questão de uma divisão inadequada bom conjunto de dados nós sabemos que ele é a base dos momentos modelos então tem que ter um conjunto bom para gerar um modelo bom se meu conjunto de dados ele não é representativo é um conjunto que tem problemas dificilmente eu vou conseguir gerar o modelo adequado e a gente sabe que dados reais podem conter problemas tem um sensor por exemplo coletando informação de um motor elétrico é sensor ele pode receber ruídos ele pode ter erros de medidas pode ter medidas faltantes e assim por diante então a
gente pode ter por exemplo atributos faltantes como eu já comentei dados duplicados ruídos presentes nos dados escalas incompatíveis pode ser que eu tenha diversas medidas só que uma medida tá uma escala muito pequena na ordem de 10 a 1 10 a 2 e a outra tá na hora de 10 a 10 então com essas medidas incompatíveis é mais difícil a gente avaliar comparar exemplos e verificar qualquer real diferença Desse exemplo então para processamento ele surge como uma etapa Fundamental e muito importante no processo de desenvolvimento e ele tem por objetivo basicamente melhorar a qualidade dos
dados e com isso facilitar a aplicação de uma da técnica de aprendizado de máquina e também acelerar o processo de Treinamento desenvolvimento do modelo nós temos diversos tipos de pré-processamento que podem ser executados por exemplo seleção eliminação de atributos vamos supor que eu tenho um conjunto de dados com n atributos ao especialista fala meu atributo número 5 ele tem pouca importância para esse problema especialista sabe disso então poderia simplesmente eliminar reduzir essa atributos simplificando o problema reduzindo dimensionalidade desse problema eu posso por exemplo ignorar atributos que tem a variancia iguais ou muito próximas a zero
porque são atributos que basicamente ele é constante para todos os exemplos meu conjunto também então não vai fazer tanta diferença em permanecer ele pode até atrapalhar a própria redução dimensionalidade eu posso pegar um conjunto de dados que tá no espaço RN e projetar esses dados no espaço RK Onde cai menor que n então tô reduzindo dimensionalidade facilitando Possivelmente treinamento desse modelo a gente pode fazer amostragem de dados tentando fazer a redução do conjunto se eu tenho um conjunto muito redundante por exemplo eu posso tentar fazer uma redução desse conjunto de dados acelerando o treinamento eliminar
duplicações eu posso fazer um balanceamento dos dados Pode ser que eu tenho um cenário já tem muitos exemplos da classe positiva e pouquíssimos exemplos da classe negativa esse desbalanceamento ele pode prejudicar também o nosso processo de Treinamento então é importante a gente Balancear rebalancear os dados e a limpeza nos dados como todo né eu posso ter atributos dados incompletos Então posso tentar fazer imputação desses dados incompletos ou eliminação desses dados incompletos é eliminar dados inconsistentes reduzir dados redundantes Como já comentei e também a gente pode fazer transformação desses dados em particular no caso das redes
neurais a gente precisa de dados numéricos então se eu tenho no meu conjunto de dados atributos categóricos por exemplo profissão Professor médico Engenheiro Pedreiro essa profissão atributo categórico eu preciso transformar esse atributo categórico um atributo numérico antes de apresentar esses dados numa região oral e também a normalização dos dados que ela vai basicamente é fazer uma reescalonamento desses dados visando equalizar as escalas dos diferentes atributos então quando eu tenho dados a categóricos por exemplo Vamos pensar que eu tenho dados categóricos com dois dígitos um atributo indicando se a pessoa tem febre ou não tem febre
como que a gente pode transformar esses dados em atributos numéricos basicamente a gente pode colocar um valor zero para ausência daquela daquele atributo não tem febre e um para o atributo presente tem febre então tô transformando atributo categórico tem febre não tem febre atributos zero e um numérico se eu tenho uma atributo categórico original Onde existe uma relação de ordem por exemplo pequeno ou grande então posso atribuir o valor zero para o menor valor e 1 para o seguinte pro segundo valor então atributo é categórico pequeno seria zero atributo grande seria um quando tem múltiplos
atributos múltiplas categorias dentro de um dado atributo por exemplo no atributo nominal eu posso ter um atributo falando a profissão é professor médico Engenheiro músico e assim por diante uma forma da gente codificar isso utilizando uma codificação numérica seria o código um de ser ou também chamada de One rotten code Qual que é a ideia se eu tenho quatro categorias eu vou codificar isso em 4 bits onde cada bit Vai representar se ele pertence ou não aquela profissão então como eu tenho quatro profissões aqui a posição a configuração 001 Vai representar professor é que por
no final a um 000 representa músico quer dizer que esse primeiro bit aqui mais à esquerda representa pra gente se ele é ou não músico por outro lado você tem atributos ordinais categóricos ordinais Onde existe essa relação de ordem por exemplo ruim regular bom ótimo como eu sei que ótimo melhor que bom que é melhor que regular que é melhor que é ruim eu posso utilizar simplesmente um escalar para fazer essa transformação numérica então ruim vai ser associado zero regular associado a 1 e assim sucessivamente transformação dos dados Qual que é o objetivo nosso Principalmente
quando a gente tem atributos incompatíveis como mostrados nessa tabela o atributo um ele tem valores aqui na ordem de 10 a menos 2 o atributo 2 ele já tem valores na hora de 10 a 10 mais ou menos Então qual que é o problema se eu fizer uma comparação de exemplos distintos dessa mesma data 7 utilizando esse mesmo conjunto de dados utilizando esses atributos com escalas distintas eu posso basicamente preponderá o cálculo da semelhança ou da diferença Desse exemplo pelo atributo de uma magnitude então basicamente o atributo um ele vai ter pouco peso nesse processo
então uma maneira de resolver isso é fazendo a normalização dos dados a normalização ela deve ser aplicada para todos os atributos e por atributo Então vou pegar um atributo específico e vou normalizar ele e ela tem por objetivo equilibrar amplitude de valores ou equalizar a escala dos atributos distintos e a gente tem duas formas principais a por amplitude onde a gente vai transformar os dados de qualquer intervalo fixo entre mini Max por exemplo ou por distribuição onde a gente vai pegar esses dados se entrar a média em 0 e dividir todo mundo pelo desvio padrão
de tal forma que o desvio padrão desse dessa distribuição desse atributo seja igual a um exemplo de normalização por amplitude a fórmula para utilização essa daqui então a gente tem um valor menos 5 - 4 - 2 3 e 5 sente normalizar esses dados por amplitude no valor mimax sendo 0 e 1 a gente vai chegar no seguinte cenário zero até um onde o menor valor vai ser o zero o maior valor vai ser um e os demais distribuídos dentro dessa escala já na normalização por distribuição a gente vai fazer o seguinte a gente vai
pegar o valor atual que eu tenho do dado por exemplo o -5 eu vou subtrair desse dado a média desses valores e vou dividir pelo desvio padrão desses valores como consequência eu vou transformar esses dados no vetor de baixo Então nesse vetor aqui se eu calcular a média dele vai ser igual a zero e se eu calcular o desvio padrão dele eu vou traduzir igual a um é Cuidado a gente tem que usar a normalização com bastante parcimônia porque se eu tiver atributos que de fato eles precisam ser preponderantes é ter um valor mais escala
significativamente maior do que os demais atributos e eu fizer essa normalização eu posso estar reduzindo eliminando isso e prejudicando o aprendizado do problema tá bom a normalização para amplitude Então ela restringe os valores entre a bola fixo como já comentado nem Max e ela é bastante utilizada quando eu preciso estabelecer impor esse limite entre os valores já a distribuição a normalização por distribuição ela pode ser utilizada em qualquer cenário e ela tem bastante tolerância a Alt Liars porque como eu tô fazendo uma distribuição de idade você tinha um ponto que ele desvia muito ele não
vai influenciar tanto na na no cálculo da distribuição dos dados bom que que nós vimos na sala Nós aprendemos a separar os dados para fazer o treinamento dos modelos ajustes dos parâmetros preparamos e testes modelos e nós conhecemos algumas técnicas de pré-processamento especificamente a transformação atributo numérica categórico numérica e o processo de normalização na próxima aula a gente vai revisitar o neurônio MCP e introduzir os primeiros modelos de redes anurais escuros que é o percentual e o adaline agradeço novamente pela atenção e até a próxima aula [Música] [Música]