Aprendizado Supervisionado
Vimos no texto anterior um dos tipos mais comuns de Aprendizado de Máquina: o Aprendizado Supervisionado. Nele, o objetivo é obter um conceito geral a partir de uma quantidade limitada de exemplos deste conceito. Ao observarmos exemplos de Pokémon do tipo Luta e Água, generalizamos os poucos exemplos dados e construímos uma versão do conceito de tipos que nos permitiu classificar novos Pokémons.
De forma mais precisa, desejamos aproximar um conceito c(x) por meio de uma hipótese h(x) de tal forma que a saída de ambas coincida para todo valor de x, onde este é um vetor de atributos advindo dos exemplos. Os atributos são características dos dados que usamos para inferência — no caso dos Pokémons, as características foram dadas por pixels coloridos dispostos de certa forma (a imagem). A tarefa de aprendizado é, então, utilizar os exemplos disponíveis para encontrar uma hipótese que coincida com o conceito. Naturalmente, não temos acesso ao conceito em si, o que torna a avaliação da hipótese não-trivial e lidaremos com isso mais para frente.
Aqui já é importante distinguir entre dois tipos de tarefas de aprendizado supervisionado. Quando o rótulo é categórico, isto é, pode assumir uma quantidade discreta de valores, temos uma tarefa de classificação. Por outro lado, quando o rótulo é numérico e contínuo, dizemos que temos uma tarefa de regressão. Assim, predizer se amanhã irá chover é uma tarefa de classificação, pois só há dois valores possíveis; predizer quantos milímetros de chuva irá cair, por outro lado, é uma tarefa de regressão.
Considere o problema fictício de identificar se um dado animal é um cachorro ou um gato usando apenas dois atributos: seu peso corporal e seu comprimento do corpo. Isto é, sabendo apenas o peso e o comprimento temos que dizer se é um gato ou cachorro (este é um problema de classificação ou regressão?). Para tanto, alguém nos forneceu medidas para uma quantidade de animais bem como o rótulo de cada um — este rótulo pode ter se originado de um especialista, ou talvez de uma análise de DNA de cada animal. Estes dados talvez se pareçam com isso:
Este tipo de dado é chamado tabular ou estruturado. Outros tipos de dados incluem dados não-estruturados como textos ou vídeos. Por ser de baixa dimensão, podemos plotar uma versão com mais linhas desta tabela, usando cores para indicar a classe.
Desejamos assim encontrar uma função h(peso,comprimento) que coincida com o conceito de gatos e cachorros — isto é, que forneça uma classe para qualquer ponto (x,y) neste gráfico. Como só sabemos a classe dos pontos dados, precisamos de algo para generalizar estes pontos para qualquer outro ponto. Esta é a tarefa da hipótese.
Precisamos tornar estas hipóteses mais concretas, escolhendo uma representação para elas, algo que permita a computação de uma saída (classe) a partir de suas entradas (atributos). Esta representação define um modelo e outra forma conceitual de abordar a tarefa de aprendizagem é como sendo a de ajustar o modelo aos dados.
Vamos usar um modelo bastante simples: uma reta horizontal. Podemos construir um modelo baseado em uma reta horizontal da seguinte forma: se peso≥peso_limiar então é cachorro, senão é gato. O “peso_limiar” é um valor que desejamos definir a partir dos dados. É o parâmetro do modelo. Uma vez definido o modelo, a tarefa é encontrar seus parâmetros que melhor se ajustam aos dados; neste caso, encontrar seu único parâmetro. Mas como ajustá-lo? Fazemos aqui uma suposição: se o modelo funcionar bem para os dados conhecidos, ele funcionará para outros dados também. Chamamos isso de Hipótese do Aprendizado Indutivo (Inductive Learning Hypothesis) e há muitos motivos para essa suposição não ser verdadeira, talvez o maior deles o fato dos dados nem sempre serem representativos do problema (talvez cachorros pinscher não estejam ali, por exemplo), mas deixamos esta discussão para outro momento.
Com esta suposição, nossa tarefa é encontrar a reta que classifica corretamente a maior parte dos dados conhecidos. Abaixo dois ajustes possíveis para o modelo.
Com peso_limiar = 12, vemos que alguns cachorros são classificados como gatos. A acurácia, ou número de pontos classificados corretamente dividido pelo número total de pontos, é de 35/40 = 87,5%. Já com peso_limiar = 6, temos uma acurácia de 100%. É evidente qual o melhor ajuste.
O treinamento do modelo (i.e. o processo para encontrar seus parâmetros que melhor se ajustam aos dados) é uma tarefa de otimização e podemos utilizar virtualmente qualquer algoritmo de otimização. Naturalmente, alguns serão mais eficientes que outros.
Se você não está familiarizado com algoritmos de otimização, este é um bom momento para ler este texto sobre busca e otimização.
O modelo escolhido traz consigo a suposição de que o problema pode ser representado pela representação especificada — isto é, que o espaço de hipóteses definido pelo modelo inclui uma hipótese que coincide suficientemente bem com o conceito desejado. No exemplo acima, o modelo é a reta horizontal e o espaço de hipóteses é composto de todas retas horizontais possíveis.
Toda escolha de modelo inclui suposições sobre como o problema pode ser solucionado. Porém, imagine que os dados fossem diferente, como abaixo:
Claramente não há uma reta horizontal capaz de separar corretamente os exemplos. Neste caso, o conceito encontra-se fora do espaço de hipóteses — ele não pode ser representado. Diz-se que o modelo escolhido não é expressivo o suficiente.
Podemos aumentar a expressividade do modelo ao permitir a representação de uma reta arbitrária no espaço bidimensional, o que permitiria a separação correta dos exemplos. Nosso modelo agora possui dois parâmetros: os coeficientes angular m e linear b, o que leva a equação generalizada da reta: y+m*x + b=0.
Para classificar um ponto (x,y), podemos definir que, quando estes valores são colocados na equação, se o resultado for positivo ou zero então o ponto pertence a uma classe e se for negativo pertence a outra classe — esta regra de decisão particiona o espaço bidimensional em duas classes.
Novamente, podemos usar algum algoritmo de otimização para encontrar os dois parâmetros, procurando por uma combinação que classifique corretamente o maior número de exemplos, talvez encontrando algo como a representação abaixo.
Este é o chamado classificador linear, e é um dos métodos mais simples de aprendizado de máquina. A suposição por trás da adoção de um classificador linear como modelo é que o problema é linearmente separável — isto é, que ele pode ser separado por um classificador linear (sim, a definição pode ser circular). Um classificador linear não precisa ser definido apenas por uma reta: se tivéssemos três atributos (três dimensões), poderíamos definir um plano como elemento separador, mantendo a característica linear; para mais dimensões, chamamos o separador de hiperplano.
Naturalmente, mesmo um classificador linear pode não ser expressivo o suficiente.
Claramente a reta generalizada não é expressiva o suficiente para estes dados. Precisamos considerar modelos mais expressivos. De fato, poderíamos pensar em pular algumas etapas e considerar a existência de um modelo maximamente expressivo, um modelo que pudesse representar qualquer hipótese possível. Neste nosso cenário, isto significaria um modelo capaz de subdividir o espaço arbitrariamente. No limite, isso significaria que cada exemplo poderia ser enclausurado em seu próprio subespaço, garantindo uma acurácia de 100% nos dados de treinamento. Ainda que em princípio isso pareça ser algo bom, o resultado é um banco de dados — um modelo que classifica perfeitamente todos exemplos usados no treinamento mas é incapaz de classificar novos exemplos que sejam diferentes destes; isto é, é incapaz de generalizar.
Tom Mitchell sintetiza bem esta característica em seu clássico livro Machine Learning. Em tradução livre: "um modelo de aprendizado que não faz suposições a priori sobre a identidade do conceito alvo não tem base racional para classificar qualquer instância não observada previamente".
Assim, deve-se procurar pelo modelo que seja expressivo o suficiente para englobar o conceito desejado, mas não mais do que isso. Infelizmente, para problemas multidimensionais não há uma maneira simples de decidir o que é expressivo o suficiente e frequentemente se experimenta com diferentes modelos, selecionando-se o mais adequado (veremos mais adiante técnicas que nos ajudam a fazer esta seleção).
Outro ponto a observar quando se deseja aprender um conceito é que dados reais frequentemente são ruidosos, o que é um eufemismo para incorretos. O ruído pode ter diversas origens mas se manifesta por alterações indevidas nos valores dos atributos e/ou rótulos. Isto torna o ajuste do modelo mais difícil. Considere o caso abaixo:
Observando a distribuição, é razoável supor que os dois gatos (laranjas) entre os cachorros (azuis) são ruído: alguém classificou incorretamente dois cachorros como gatos. Aqui poderíamos remover estes exemplos, mas em dados mais complexos não há indicativos claros de quais instâncias são ruído. Este é um caso onde a reta horizontal seria a escolha correta, mas ela não obteria 100% de acurácia nos dados de treinamento. O problema é linearmente separável, mas os dados não são. Adotar um modelo mais expressivo, na tentativa de classificar corretamente o ruído, levaria a um resultado pior para novos dados (desde que o ruído não seja sistêmico).