91
Inteligência Artificial Aprendizagem Automática Alberto Simões [email protected]

Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

  • Upload
    vunga

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

InteligênciaArtificial

Aprendizagem Automática

Alberto Simõ[email protected]

Page 2: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

ii

Page 3: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Conteúdo

1 Introdução 1

1.1 Aprendizagem Automática . . . . . . . . . . . . . . . . . . . . . 3

I Aprendizagem Automática 5

2 Regressão Linear 7

2.1 Uma Variável . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.1.1 Gradiente Descendente . . . . . . . . . . . . . . . . . . 11

2.1.2 Vectorização . . . . . . . . . . . . . . . . . . . . . . . . 15

2.2 Várias Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.2.1 Redimensionamento de Propriedades . . . . . . . . . . . 19

2.2.2 Cálculo do Factor de Aprendizagem . . . . . . . . . . . 20

2.3 Escolha de Propriedades . . . . . . . . . . . . . . . . . . . . . . 21

2.3.1 Regressão Polinomial . . . . . . . . . . . . . . . . . . . . 22

2.3.2 Valores Discretos . . . . . . . . . . . . . . . . . . . . . . 24

2.4 Equação Normal . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.4.1 Equação Normal vs Gradiente Descendente . . . . . . . 25

2.4.2 Invertibilidade . . . . . . . . . . . . . . . . . . . . . . . 26

3 Regressão Logística 27

3.1 A Função Logística (sigmoid) . . . . . . . . . . . . . . . . . . . . 27

3.2 Decisão de Limite . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.3 Função Custo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.4 Minimização da Função Custo . . . . . . . . . . . . . . . . . . . 33

3.4.1 Gradiente Descendente . . . . . . . . . . . . . . . . . . 33

3.4.2 Optimização . . . . . . . . . . . . . . . . . . . . . . . . 34

3.5 Um contra todos . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

iii

Page 4: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

4 Sobre-ajustamento e Regularização 394.1 Regressão Linear Regularizada . . . . . . . . . . . . . . . . . . . 40

4.1.1 Função de Custo . . . . . . . . . . . . . . . . . . . . . . 40

4.1.2 Gradiente Descendente . . . . . . . . . . . . . . . . . . 41

4.1.3 Equação Normal . . . . . . . . . . . . . . . . . . . . . . 41

4.2 Regressão Logística Regularizada . . . . . . . . . . . . . . . . . 42

4.2.1 Função de Custo . . . . . . . . . . . . . . . . . . . . . . 42

4.2.2 Gradiente Descendente . . . . . . . . . . . . . . . . . . 43

4.2.3 Optimização . . . . . . . . . . . . . . . . . . . . . . . . 43

5 Redes Neuronais 475.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

5.2 História . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

5.3 Modelo de uma Rede Neuronal . . . . . . . . . . . . . . . . . . 48

5.3.1 Unidades Logísticas . . . . . . . . . . . . . . . . . . . . 49

5.3.2 Propagação para a Frente . . . . . . . . . . . . . . . . . 50

5.4 Arquitecturas de Redes Neuronais . . . . . . . . . . . . . . . . . 51

5.4.1 Múltiplas Unidades de Saída . . . . . . . . . . . . . . . 52

5.4.2 Escolha da Arquitectura de Rede Neuronal . . . . . . . 53

5.5 Aprendizagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5.5.1 Função Custo . . . . . . . . . . . . . . . . . . . . . . . . 54

5.5.2 Minimização da Função Custo . . . . . . . . . . . . . . 54

5.5.3 Propagação para Trás . . . . . . . . . . . . . . . . . . . 55

A Álgebra Linear em Octave 63A.1 Matrizes e Vectores . . . . . . . . . . . . . . . . . . . . . . . . . 63

A.2 Adição e Multiplicação Escalar . . . . . . . . . . . . . . . . . . . 64

A.3 Multiplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

A.4 Matriz Inversa e Transposta . . . . . . . . . . . . . . . . . . . . 67

B Introdução ao Octave 69B.1 Interacção, Aritmética e Lógica . . . . . . . . . . . . . . . . . . 69

B.2 Vectores e Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . 70

B.3 Ficheiros de Dados . . . . . . . . . . . . . . . . . . . . . . . . . 73

B.4 Funções Úteis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

iv

Page 5: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

B.5 Traçado de Gráficos . . . . . . . . . . . . . . . . . . . . . . . . . 76

B.6 Instruções de Controlo . . . . . . . . . . . . . . . . . . . . . . . 80

B.7 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

v

Page 6: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

vi

Page 7: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Capítulo 1IntroduçãoChamamo-nos seres inteligentes porque somos capazes de pensar, e por muitosanos que tentamos compreender como pensamos. A área de Inteligência Artifi-cial (IA) vai para além dessa compreensão, tentando criar ou desenvolver seresinteligentes.

A IA surgiu pouco depois da Segunda Guerra Mundial, o termo Inteligência Artifi-cial surgiu por volta de 1956. A IA é uma área demasiado vasta onde se incluemmuitas sub-áreas que, muitas vezes, também são vistas como áreas de investiga-ção independente.

Existem várias definições de IA. Uns autores defendem que a entidade inteligentedesenvolvida deve pensar como um humano, o que significa que o processo de raciocí-nio deve seguir os mesmos passos que o raciocínio operado pelo cérebro humano.Outros autores defendem que a entidade deve agir como um humano, o que nos levaa ignorar o processo pelo qual a entidade consegue raciocinar, e a considerarapenas o resultado, que deverá ser o mesmo que um humano produziria.

De outro lado, um conjunto de autores defende que a entidade inteligente devepensar racionalmente, usando regras lógicas. O resultado do raciocínio pode nãoser o mesmo que um Ser Humano obteria nas mesmas situações, mas os passosexecutados deverão ser lógicos (no sentido de seguirem as regras da lógica mate-mática). Do mesmo modo que anteriormente poderíamos olhar apenas para oresultado, também há quem defenda que a entidade deve agir racionalmente, ou seja,não precisa de simular um Ser Humano, nem precisa de seguir um conjunto depassos lógicos: basta que a sua acção seja racional, no sentido de tentar perseguirum conjunto de ideais.

Destes vários pontos de vista, o mais antigo corresponde à entidade inteligentecomo aquela que é capaz de agir como um Ser Humano. Em 1950, Alan Turingdefiniu o Teste de Turing: são colocadas algumas questões por escrito a umsistema computacional e se este conseguir responder (por escrito) de modo a quenão seja possível saber se essas respostas foram dadas por um sistema computa-cional ou um Ser Humano, o sistema poderá ser classificado como inteligente.

Note que para que um sistema computacional consiga ultrapassar com sucessoeste teste será necessário que tenha as seguintes capacidades:

• processamento de linguagem natural, para permitir que possa comu-nicar usando a linguagem humana, seja a língua inglesa ou outra;

1

Page 8: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

• representação de conhecimento, de modo a que o sistema possa guar-dar informação sobre o que lhe foi ensinado;

• raciocínio automático, para que seja capaz de raciocinar sobre o conhe-cimento armazenado, e obter novas conclusões;

• aprendizagem-máquina, para poder aprender com novas situações, de-tectar e extrapolar padrões;

O teste de Turing evita, de forma deliberada, o contacto físico. As questões sãocolocadas de forma escrita, e não há qualquer tipo de interacção física entreo sistema e quem o testa. Para colmatar este problema foi proposto o TesteCompleto de Turing, em que seja possível o sistema ver e manipular objectos.Para ultrapassar esta nova situação, o sistema teria de ganhar as capacidades de:

• visão por computador, para ver objectos, e reconhecê-los;• robótica, para manipular e sentir os objectos.

Estas seis áreas correspondem às principais áreas de investigação em InteligênciaArtificial, e mais de 60 anos após Turing, continuam a ser relevantes.

Curiosamente os investigadores não se têm esforçado por tentar ultrapassar oteste de Turing, defendendo que é mais importante perceber os princípios subja-centes à inteligência do que propriamente a sua duplicação.

As abordagens e técnicas usadas em Inteligência Artificial dependem muito dadefinição de IA que se considere. Quando se pretende que o sistema seja capazde raciocinar de forma lógica, tende-se a usar sistemas de programação lógica(como o Prolog), em que se possam definir regras lógicas válidas que o sistemapossa usar para raciocinar. Se por outro lado se pretende simular a forma comoo ser humano raciocina, então será necessário ter acesso a maquinaria médicaque permita observar como o cérebro funciona (ciências cognitivas).

Do ponto de vista temporal, a abordagem lógica, em que se descrevia o conhe-cimento e um conjunto de regras de raciocínio, surgiu primeiro. Nesta alturasurgiram algumas linguagens de programação simbólicas como o Lisp e o Pro-log.

Recentemente, com o aumento exponencial do poder computacional, do poderde armazenamento, e profusão de computadores, levou a um aumento da quan-tidade de informação vinda de todos os lados (dados) e ao desenvolvimento detécnicas (essencialmente estatísticas) que extrapolam essa informação obtendonovo conhecimento.

A investigação recente em IA tem mostrado que muitos sistemas híbridos, base-ados em processamento de grandes quantidades de dados para a aprendizagemde modelos, juntamente com regras criadas manualmente pelos investigadores,dão resultados relevantes que não seriam possíveis de serem obtidos usando astécnicas de forma independente.

2

Page 9: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

1.1 Aprendizagem AutomáticaAprendizagem Máquina é o termo original usado em Portugal para a tradução deMachine Learning, embora recentemente o termo Aprendizagem Automática tenha ga-nho mais uso. A Aprendizagem Automática é um ramo da Inteligência Artificial que seocupa da construção e estudo de sistemas computacionais que possam aprendercom base em dados.

Algumas definições célebres de Aprendizagem Automática são:

Field of study that gives computers the ability to learn without being explicitly pro-grammed. (Arthur Samuel, 1959)

Ou a definição mais formal:

A computer program is said to learn from experience E with respect to some class oftasks T and performance measure P, if its performance at tasks in T, as measured byP, improves with experience E. (Tom M. Mitchell, 1997)

Todos os dias usamos sistemas baseados em aprendizagem máquina. Por exem-plo, os sistemas de detecção de e-mails indesejados (detectores de spam) baseiam-se em e-mails anteriores para aprenderem a diferenciar os e-mails relevantes dosnão relevantes. As aplicações que detectam faces em fotografias aprenderam oaspecto de uma cara com base num conjunto de exemplos de fotografias come sem faces. Outro exemplo, ainda, é o reconhecimento óptico de caracteres,que com base num conjunto de imagens em que as várias letras do alfabeto sãomanualmente etiquetadas, aprende as formas habituais dos caracteres para osreconhecer em novas situações.

O cerne da aprendizagem máquina tem que ver com a representação dos dadosanalisados e das suas propriedades, e com a generalização, que permita com basenas propriedades observadas decidir em relação a novos dados.

Existem diferentes algoritmos que se inserem nos seguintes tipos:

• Aprendizagem Supervisionada: estes algoritmos baseiam-se no estudode dados etiquetados com categorias, extraindo propriedades desses dadose relacionando-os com as categorias em causa. A aprendizagem traduz-sena definição de uma correlação entre as propriedades dos dados e as cate-gorias atribuídas em cada situação, de modo a que, ao extrair propriedadesde novos dados o sistema seja capaz de lhe atribuir uma categoria.Considere-se o seguinte exemplo: pretende-se desenvolver uma aplicaçãopara estimar o preço um apartamento em determinada cidade de acordocom a sua área útil. Para isso recolheram-se dados sobre a área útil e orespectivo preço de venda para um conjunto de casas (obter preços paradiferentes áreas, desde casas mais pequenas até casas maiores). O algoritmode aprendizagem deverá generalizar estes dados e ser capaz de estimar opreço de determinado apartamento com base na sua área útil.

3

Page 10: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Outro exemplo: foram analisados vários casos de cancro da mama. Paracada caso foi registado o seu tamanho, a sua espessura, a uniformidade dotamanho e da forma das suas células e guardada informação sobre se otumor é, ou não, maligno. Pretende-se que o algoritmo de aprendizagemseja capaz de relacionar estes aspectos, de modo a ser capaz de classificar, deforma automática, se para um novo caso de tumor há mais probabilidadedeste ser benigno ou maligno.

• Aprendizagem não Supervisionada: estes algoritmos tendem a ana-lisar os dados e tentar modelar esses dados de algum modo, por exemplo,definindo grupos (clusters) de dados inter-relacionados.Um exemplo desta técnica será uma aplicação com o objectivo de agruparnotícias semelhantes. Supondo um portal que recolha notícias de diferen-tes agências noticiosas, não faz sentido apresentar várias vezes a mesmanotícia ao utilizador só porque foi publicada ou escrita em agências notici-osas diferentes. Um sistema de aprendizagem poderá analisar as notícias,detectar semelhanças e agrupar as notícias de forma temática.Na bio-informática, o agrupamento de indivíduos em diferentes grupos,de acordo com os seus genes, de modo a obter grupos de indivíduos comcaracterísticas semelhantes, também é um problema de aprendizagem nãosupervisionada.

• Aprendizagem Semi-Supervisionada: são algoritmos que por umlado analisam dados previamente etiquetados, mas que também tentaminferir modelos sobre os dados;

Existem outros tipos, como a aprendizagem por reforço, mas que estão bastante afas-tados dos métodos que se pretende aqui apresentar.

4

Page 11: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Parte I

Aprendizagem Automática

5

Page 12: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias
Page 13: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Capítulo 2Regressão LinearConsidere-se um exemplo concreto em que se pretende prever o preço de casasde determinada zona com base num conjunto de amostras previamente recolhi-das. Estamos perante um caso de aprendizagem supervisionada, já que iremosfornecer ao algoritmo de aprendizagem dados que incluem as respostas cor-rectas.

A figura 2.1 representa graficamente os dados recolhidos.

Figura 2.1: Preços de casas vs área em metros quadrados.

O que pretendemos é, dada a área de uma nova casa, tentar prever qual será oseu preço. Este tipo de problema é chamado de Regressão: prever um valorreal (contínuo).

Estes dados também podem ser representados, evidentemente, de forma tabular:

7

Page 14: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Área m2 (x) Preço ×1000 e (y)

74.322 142.592.903 135.0

101.264 187.5103.308 226.5103.122 165.0116.129 150.0

. . . . . .

O número de exemplos recolhidos para treino é denotado por m. A x ou X cor-responde ao vector ou matriz de entrada (input), também designados de proprie-dades (ou características, features). Ao vector y designamos de variável resultado,de saída (output). Ao par de elementos (x(i), y(i)) designamos uma amostra ouexemplo de treino1.

O processo para usar um algoritmo de regressão linear corresponde à definiçãode uma função hipótese, a que chamaremos h, que é capaz de estimar um valorresultado y com base no valor de uma propriedade x. Esta função h é construidadefinindo um modelo que tente representar o mais fielmente possível os dados detreino recolhidos.

O modelo construído não é mais que uma função matemática que tenta calcularvalores y o mais próximos possíveis dos recolhidos. A função matemática maissimples de calcular é uma recta (figure 2.2). Neste caso diz-se que se usa regressãolinear univariada, de uma única variável. Noutras situações os dados recolhidosassemelham-se a outras funções matemáticas, como por exemplo, uma funçãoquadrática. Nestas situações pode-se usar regressão linear de várias variáveis.

2.1 Uma VariávelComo referido na introdução deste capítulo, a Regressão Linear Univariada, oude uma única variável, tenta modelar um conjunto de dados por uma recta:2

hθ(x) = θ0 + θ1x

O algoritmo de aprendizagem terá de calcular o vector de parâmetros θ de modoa que a função hθ resultante calcule valores próximos (com uma margem de erropequena) para os exemplos de treino que foram usados.

Pretendemos que, para cada exemplo de treino (x(i), y(i)), a diferença entre y(i)

e hθ(x(i)) seja pequena. Interessa-nos que esta diferença seja a menor possívelpara todos os exemplos.

1Embora seja habitual indicar elementos de uma matriz usando um valor em índice esta notaçãoserá mais versátil como se verá.

2Repare-se que esta função não é mais que a habitual equação da recta: y = ax + b.

8

Page 15: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura 2.2: Preços de casas vs área em metros quadrados e função hipótese.

Para calcular a diferença entre estes dois valores e garantir um resultado não ne-gativo será utilizado o quadrado da diferença:

(hθ(x(i))− y(i))2. Para obter uma

medida do quadrado das diferenças média para todos os exemplos será realizadaa soma desta diferença para todos os exemplos de treino, que será dividido pelonúmero de exemplos: m. O nosso objectivo será minimizar este valor médio, aque chamamos função de custo.

Repare-se que minimizar uma função fθ ou fθ/c em relação a θ, com c constante,leva à obtenção do mesmo valor θ. Como mais tarde se verá, teremos de derivara função de custo, e essa derivada será mais fácil de calcular se, em vez de sedividir a soma dos quadrados das diferenças pelo valor m se dividir por 2m.

Então a função de custo da função modelo hθ é a seguinte:

J(θ0, θ1) = 12m

m∑i=1

(hθ(x(i))− y(i)

)2

Pretende-se calcular θ0 e θ1 de modo a minimizar a função J(θ0, θ1).

Apresentam-se os gráficos com a variação de J(θ0, θ1) para o exemplo específicodos preços de casas (figura 2.3 e figura 2.4). O primeiro gráfico apresenta a va-riação do custo de J variando θ0 e θ1. O segundo mostra o mesmo gráfico masnuma vista topográfica. Interessa encontrar os valores de θ0 e θ1 que minimizamo valor de J .

9

Page 16: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura 2.3: Variação da função custo J(θ0, θ1).

Figura 2.4: Mapa topográfico da variação da função custo J(θ0, θ1).

10

Page 17: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

2.1.1 Gradiente Descendente

Para encontrar o valor mínimo de J será usado um algoritmo iterativo, de nomegradiente descendente (gradient descent) que, com base em valores iniciais (possivelmentealeatórios) para θ0 e θ1, irá iterar obtendo, em cada iteração, valores mais próxi-mos do mínimo de J :

1. iniciar com valores θ0 e θ1, quaisquer;2. alterar repetidamente os valores de θ0 e θ1 para calcular J(θ0, θ1) enquanto

se obtiver valores para J menores.

Utilizando conhecimento de Cálculo, sabem-se que ao calcular a derivada par-cial em relação a determinada variável se obtém informação sobre o declive dacurva nesse ponto. Deste modo, pode-se derivar a função J em ordem a θ0 eposteriormente em ordem a θ1 para detectar em que sentido a curva desce emrelação a cada uma destas variáveis. Multiplicando o declive por um factor deaprendizagem constante (α), e subtraindo o valor resultante aos valores de θ0 eθ1 obterer-se-ão novos valores em que J resulta num menor valor.

Note-se no entanto que:

• este algoritmo encontra um mínimo que poderá ser local (e não total);• diferentes valores iniciais de θ0 e θ1 podem resultar em diferentes mínimos

locais;• o factor de aprendizagem não pode ser demasiado pequeno, levando a que

o algoritmo seja muito lento a encontrar o valor mínimo;• o factor de aprendizagem não pode ser demasiado grande, levando a que o

algoritmo possa saltar o valor mínimo de forma indefinida, resultando emciclos infinitos;

Isto leva a que o algoritmo seja repetido um número fixo de vezes de iterações(definido previamente), ou então enquanto o ganho em relação aos valores ante-riores seja relevante (ou seja, que o valor de custo para os valores actuais de θ0 e θ1for bastante menor que o valor de custo para os valores anteriores). Escolhendoa primeira solução obriga à definição do número i de iterações a executar, esco-lhendo a segunda solução obriga à definição da margem ϵ, do que se consideraum ganho relevante no cálculo do valor mínimo.

O algoritmo é, então:

repetir enquanto relevante {θj ← θj − α ∂

∂θjJ(θ0, θ1)

}

Neste algoritmo é importante realçar que as atribuições devem ser realizadas emparalelo e não de forma sequencial. Ao calcular um novo valor de θ1 deverá serusado o valor de θ0 da iteração anterior, e não o calculado nesta iteração. Pode-seredefinir o algoritmo para:

11

Page 18: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

repetir enquanto relevante {temp0 ← θ0 − α ∂

∂θ0J(θ0, θ1)

temp1 ← θ1 − α ∂∂θ1

J(θ0, θ1)θ0 = temp0θ1 = temp1

}

No entanto, e como veremos na secção seguinte sobre vectorização, esta operaçãopoderá ser realizada de uma única vez, resultando num algoritmo mais simplese eficiente.

As derivadas parciais em relação a θ0 e θ1 não são difíceis de calcular. Primeiro,recorde-se que:

∂∂θj

J(θ0, θ1) = ∂∂θj

12m

∑mi=1(hθ(x(i))− y(i))2

= ∂∂θj

12m

∑mi=1(θ0 + θ1x(i) − y(i))2

Ao derivar a expressão acima para j = 0 e j = 1 iremos obter3:

∂θ0J(θ0, θ1) = 1

m

m∑i=1

(hθ(x(i))− y(i)

)

∂θ1J(θ0, θ1) = 1

m

m∑i=1

(hθ(x(i))− y(i)

)x(i)

Figura 2.5: Regressão Linear com θ0 = θ1 = 0.

Obtendo os valores para θ0 e θ1 torna-se possível prever o preço de uma casabastando para isso calcular hθ(x) = θ0 + θ1x.

3É nesta altura que se torna útil ter-se definido a fórmula de custo inicial com 1/2m, já que aoderivar a exponenciação esta irá simplificar e permitir obter uma derivada mais simples.

12

Page 19: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura 2.6: Regressão Linear com θ0 = 0.011 e θ1 = 1.931 (iteração 1).

Figura 2.7: Regressão Linear com θ0 = 0.007 e θ1 = 1.120 (iteração 2).

Figura 2.8: Regressão Linear com θ0 = 0.009 e θ1 = 1.461 (iteração 3).

13

Page 20: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura 2.9: Regressão Linear com θ0 = 0.009 e θ1 = 1.318 (iteração 4).

Figura 2.10: Regressão Linear com θ0 = 0.010 e θ1 = 1.378 (iteração 5).

14

Page 21: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

2.1.2 Vectorização

Com um grande número de exemplos de treino, e com um algoritmo iterativo,como é o caso do gradiente descendente, a eficiência é um factor importante.Note-se que a cada iteração se calcula a hθ(x(i))− y(i) para cada exemplo i.

É possível usar-se a multiplicação de matrizes e de vectores para tornar este al-goritmo mais eficiente: existem bibliotecas para todas ou quase todas as lingua-gens de programação em que a multiplicação de matrizes está implementada deforma extremamente eficiente. Assim, ao usar-se estas funções há mais garantiasde eficiência do que em código escrito explicitamente para esta finalidade e semcuidados especiais.

Em primeiro lugar, repare-se nas diferenças entre o cálculo da derivada em ordema θ0 e em ordem a θ1. A única diferença é que no segundo caso existe umamultiplicação extra.

Transforme-se o vector x numa matriz, em que a primeira coluna é compostaapenas por valores 1, e a segunda coluna corresponde aos valores de x:

X =

1 x(1)

1 x(2)

......

1 x(m)

Torna-se possível escrever as expressões de derivada parcial como4:

∂θjJ(θ0, θ1) = 1

m

m∑i=1

(hθ(X(i))− y(i)

)X

(i)j

Do mesmo modo é necessário redefinir a função hθ que deixa de ter como parâ-metro um valor real e passa a ter um vector (neste caso, de dois elementos, emque o primeiro elemento é sempre 1, e o segundo é o valor original do vector x(i)).Como o primeiro elemento do vector é sempre a unidade, hθ pode ser definidacomo:

hθ (x) = x0θ0 + x1θ1 = xθ

Repare-se que esta definição não é mais que a multiplicação do vector x pelovector θ. Apenas será necessário garantir que um vector é horizontal (tipicamentex) e o outro vector é vertical (tipicamente θ):

xθ =[

x0 x1] [ θ0

θ1

]= x0θ0 + x1θ1

4Repare-se que se usou o índice j a iniciar no valor zero, e não em um como tem sido hábito.A razão de isto ser feito é que a coluna 0 da matriz X foi definida de forma artificial como sendocomposta apenas por valores 1. Embora esta possível inconsistência faz sentido do ponto de vistaformal e matemático, quando se implementar qualquer um destes algoritmos o programador terá deter em atenção o uso de índices suportado pela linguagem em causa.

15

Page 22: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Não é apenas no cálculo de hθ que se pode tirar partido da multiplicação dematrizes. Também o cálculo das derivadas parciais pode ser vectorizado.

Em primeiro lugar, multiplicando a matriz X completa por θ, obtem-se um vectorcom os valores de hθ para todos os exemplos de treino.

Xθ =

1 x(1)

1 x(2)

......

1 x(m)

[

θ0θ1

]=

θ0 + x(1)θ1θ0 + x(2)θ1

...θ0 + x(m)θ1

Continuando a construção da fórmula para cálculo das derivadas parciais:

Xθ − y =

θ0 + x(1)θ1 − y(1)

θ0 + x(2)θ1 − y(2)

...θ0 + x(m)θ1 − y(m)

=

hθ(X(1))− y(1)

hθ(X(1))− y(2)

...hθ(X(m))− y(m)

Multiplicando esta matriz transposta (Xθ − y)T pela matriz X, temos:

(Xθ − y)TX =

hθ(X(1))− y(1)

hθ(X(2))− y(2)

· · ·hθ(X(m))− y(m)

T

1 x(1)

1 x(2)

......

1 x(m)

=[

hθ(X(1))− y(1) + hθ(X(2))− y(2) + · · ·+ hθ(X(m))− y(m)(hθ(X(1))− y(1))x(1) + · · ·+

(hθ(X(m))− y(m))x(m)

]T

=

[ ∑mi=1(hθ(X(i))− y(i))X

(i)0∑m

i=1(hθ(X(i))− y(i))X

(i)1

]T

Ou seja, podem-se obter o valor para todos os valores de θ de uma só vez:

repetir enquanto relevante {θ ← θ − α 1

m

((Xθ − y)T

X)T

}

Esta técnica pode ser utilizada futuramente noutros algoritmos que serão apre-sentados posteriormente. Nessa altura será referida a sua possibilidade de vecto-rização, mas não será detalhado o seu cálculo.

Exercícios

1. Obtenha o conjunto de medições que relaciona o peso médio do cérebroe do corpo para um conjunto de espécies de mamíferos, recolhido por

16

Page 23: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

S. Weisberg para o livro Applied Linear Regression da Wiley (Weisberg (1980),128-129), disponível em http://people.sc.fsu.edu/~jburkardt/datasets/regression/x01.txt

a. Note que o ficheiro em causa inclui um conjunto de comentários noinício do documento que devem ser removidos;

b. Crie dois ficheiros separados, um com a segunda coluna, o peso docérebro, e um outro com a terceira coluna, o peso do animal. Preten-demos calcular uma regressão linear que nos permita obter o peso doanimal com base no peso do seu cérebro.

c. Crie um gráfico de pontos que represente os dados obtidos.d. Experimente reduzir ambos os eixos de modo a apresentar o gráfico

para valores menores que 1000.

2. Implemente a função jota que receba o vector x, y e θ e calcule J(θ0, θ1).Calcule o custo para θ0 = 0 e θ1 = 1.

3. Altere a função anterior (chame-lhe jotav) que calcule J(θ0, θ1) usando có-digo vectorizado. Verifique que obtém o mesmo valor.

4. [OPCIONAL] Desenhe um gráfico 3D e respectivo gráfico de contornoque mostre a evolução de J(θ0, θ1) com θ0 ∈ [−5000, 5000] e θ1 ∈ [−2, 2].

5. Implemente a função de gradiente descendente que retorna os valores deθ0 e θ1 óptimos, com um factor de aprendizagem α = 0.005 e 10 iterações.Inicie com uma versão iterativa e posteriormente torne-a numa versão vec-torial.

a. Imprima os valores de θ0 e θ1 obtidos. Parecem-lhe válidos?b. Experimente diminuir o valor de α até obter valores de θ0 e θ1 que lhe

pareçam correctos.

6. Desenhe sobre o gráfico obtido em 1 a recta da regressão linear h(θ0, θ1).

2.2 Várias VariáveisO exemplo que foi discutido anteriormente, relativo ao preço de uma casa deacordo com a sua área, era, sem dúvida, simplicista. O preço de uma casa nãodepende apenas da sua área, mas de um conjunto de outros factores, como se-jam a sua idade, o número de quartos, o número de andares, entre um conjuntogrande de outros factores:

Área m2 (x1) Número quartos (x2) Idade (x3) Preço ×1000 e (y)

74.322 2 3 142.592.903 2 4 135.0

101.264 2 3 187.5103.308 3 2 226.5

17

Page 24: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Área m2 (x1) Número quartos (x2) Idade (x3) Preço ×1000 e (y)

103.122 2 3 165.0116.129 3 5 150.0

. . . . . . . . . . . .

Nesta situação estamos perante uma regressão linear multivariada, ou com vá-rias variáveis. Tal como anteriormente, cada linha é um exemplo de treino, deum conjunto de m linhas. A variável n é o número de propriedades, ou carac-terísticas. Neste exemplo, n = 3. O vector x(i) corresponde às propriedades doexemplo de treino i. Finalmente, x

(i)j é o valor da propriedade j do exemplo i.

Havendo mais variáveis, a função hipótese define-se de acordo com o número nde propriedades disponíveis. Para o exemplo anterior,

hθ (x) = θ0 + θ1x1 + θ2x2 + θ3x3

ou, genericamente,

hθ (x) = θ0 + θ1x1 + θ2x2 + · · ·+ θnxn

Por conveniência, e tal como foi feito para a vectorização da regressão linearunivariada, define-se x

(j)0 = 1, para qualquer exemplo j. Assim, os vectores x e

θ correspondem a:

x =

x0x1x2...

xn

∈ IRn+1 θ =

θ0θ1θ2...

θn

∈ IRn+1

Então, a função hipótese pode ser redefinida por:

hθ (x) = θ0 + θ1x1 + θ2x2 + · · ·+ θnxn

=[

θ0 θ1 · · · θn

]

x0x1...

xn

= θT x

A função de custo J é a mesma que anteriormente:

J(θ) = 12m

m∑i=1

(hθ(x(i))− y(i)

)2

18

Page 25: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

E o algoritmo de gradiente descendente tem exactamente o mesmo algoritmo:

repetir enquanto relevante {θj ← θj − α ∂

∂θjJ(θ)

}

Substituindo pelas respectivas derivadas parciais5:

repetir enquanto relevante {θ0 ← θ0 − α 1

m

∑mi=1(hθ(x(i))− y(i))x

(i)0

θ1 ← θ1 − α 1m

∑mi=1(hθ(x(i))− y(i))x

(i)1

· · ·θn ← θn − α 1

m

∑mi=1(hθ(x(i))− y(i))x

(i)n

}

2.2.1 Redimensionamento de Propriedades

Um problema da regressão linear com várias propriedades tem que ver com adiferença de magnitude dos valores destas variáveis. Repare-se que no exemploanterior temos variáveis como o número de quartos, que varia entre 1 e 4, masoutras variáveis, como a área, que pode ultrapassar os 200 metros quadrados.Este tipo de disparidade leva a que o gráfico se torne mais apertado, como sepode ver pelas curvas de nível (ver figura 2.11).

Figura 2.11: Contorno para duas funções, uma com propriedades com escalasdiferentes, e outra com propriedades redimensionadas.

Este tipo de curvas leva a que a aprendizagem seja mais lenta, já que o gradientedescendente irá ter mais dificuldade em convergir. Por outro lado, um gráficocomo o apresentado do lado direito será mais adequado para a convergência doalgoritmo.

Nesse sentido, antes de se aplicar o algoritmo em problemas multivariadosprocede-se ao redimensionamento de propriedades, colocando os valores de

5Recorde-se que se definiu que x(i)0 = 1.

19

Page 26: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

cada propriedade num mesmo intervalo6. Pretende-se que cada variável estejalimitada no intervalo −1 ≤ x ≤ 1.

O redimensionamento das propriedades é, habitualmente, realizado usando nor-malização da média: calcula-se xi − µi e divide-se o valor obtido pela amplitudede xi:

xi ←xi − µi

Siµi =

∑mi=1 xi

mSi = max(xi)−min(xi)

Para o pequeno exemplo apresentado anteriormente, no caso dos quartos, temosque µ2 = 2+2+2+3+2+3

6 = 2.3333, S2 = 3− 2 = 1, pelo que

x2 =[−0.33333 −0.33333 −0.33333 0.66667 −0.33333 0.66667

]Uma versão mais robusta deste redimensionamento divide a diferença pelo desviopadrão:

xi ←xi − µi

σσ =

√∑mi=1 (xi − µi)2

m− 1

Neste caso, obtém-se:

x2 =[−0.64550 −0.64550 −0.64550 1.29099 −0.64550 1.29099

]A vantagem desta segunda abordagem é que o desvio padrão dos resultados ob-tidos é 1.

Depois de redimensionadas todas as propriedades xi, o algoritmo de gradientedescendente é aplicado aos novos valores. Tenha-se em atenção que na altura deusar a função hipótese hθ(x) calculada, os valores de x têm de ser redimensio-nados previamente.

2.2.2 Cálculo do Factor de Aprendizagem

Não existe uma fórmula para calcular o factor de aprendizagem ideal. No en-tanto, durante a implementação do algoritmo de gradiente descendente é pos-sível imprimir, a cada iteração, o valor da função de custo J(θ), e garantir queeste diminui a cada iteração. Se assim não for, o factor de aprendizagem α édemasiado elevado e deve ser diminuído. Note-se, no entanto, que um factor deaprendizagem demasiado baixo leva a que a aprendizagem seja demasiado lenta.Uma forma de escolher um factor de aprendizagem é a representação gráfica daevolução do custo J(θ) para diferentes valores de α durante um número de ite-rações.

6Note-se que o redimensionamento de propriedades não deve ser aplicado à propriedade fictíciax

(i)0 = 1.

20

Page 27: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

O número de iterações também não pode ser previsto. No entanto, pode sercalculada a diferença entre o custo J(θ) para a iteração actual e o custo para aiteração anterior. Se a diferença entre estes dois custos for inferior a uma margemϵ = 10−3, por exemplo.

Exercícios

1. Obtenha o conjunto de medições realizadas numa refinaria para investi-gar o processo de produção e o rácio de octanas de determinada gasolina,de acordo com a quantidade presente de 3 diferentes materiais. Estes da-dos foram preparados por Wood (1973) e estão disponíveis em http://people.sc.fsu.edu/~jburkardt/datasets/regression/x17.txt

a. Note que o ficheiro em causa inclui um conjunto de comentários noinício do documento que devem ser removidos;

b. Crie dois ficheiros separados, um com as quatro variáveis de entrada(colunas 2 a 5) e um outro com a coluna resultado (coluna 6).

2. Implemente uma função normalize.m que receba a matriz de proprieda-des X e a normalize. A função também deve retornar um vector mu com asmédias de cada coluna de X, e um vector sigma com os desvios padrão decada coluna de X. Estes dois vectores serão usados posteriormente quandofor necessário invocar a função hipótese.

3. Garanta que a função descent implementada na secção anterior funci-ona com a matriz X. Não esqueça de adicionar a X os elementos x

(0)i = 1.

Altere a função descent para calcular e imprimir o custo J(θ) a cada ite-ração. Use esta informação para escolher um factor de aprendizagem α eum número de iterações.

4. Usando os valores θ obtidos, calcule as octanas referentes a uma experiênciacom os valores 70.60, 0.00, 55 e 1.42210, respectivamente. Não esqueçade normalizar os valores usando a média e desvio padrão calculados naalínea 2.

2.3 Escolha de PropriedadesEmbora até ao momento todos os exemplos e exercícios tenham usado as propri-edades directamente na regressão linear, a verdade é que as propriedades podemser escolhidas e combinadas. Esta escolha de como usar as propriedades permi-tem o uso de uma técnica denominada de Regressão Polinomial, que permiteaproximar funções hipótese a curvas complexas.

Considere-se de novo o problema de prever o preço de uma vivenda. Destavez recolheram-se os preços e as dimensões do terreno (largura e profundidade).Usando a regressão linear de forma directa, teremos a função hipótese:

hθ(x) = θ0 + θ1 largura + θ2 profundidade

21

Page 28: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Nada impede que se decida que o que é realmente importante para prever opreço da vivenda não são as dimensões do terreno, mas da área. Nesse caso, afunção hipótese poderá ser reescrita por:

hθ(x) = θ0 + θ1x x = largura× profundidade

O facto de ser possível combinar propriedades leva a que também seja possívelaplicar-lhes funções matemáticas (quadrados, raízes, logaritmos), e desse modoaproximar a função hipótese a, por exemplo, uma função quadrática.

2.3.1 Regressão Polinomial

Considere-se a evolução da concentração de CO2 no ar7 (figura 2.12). Emboraseja possível desenhar uma linha que tente passar o mais perto possível por todosos pontos, essa linha não será, de todo, um bom estimador.

Figura 2.12: Evolução da concentração de dióxido de carbono no ar.

A evolução apresentada na imagem é relativamente bem conhecida: está muitopróxima da função exponencial. Daí que fará sentido modelar estes dados poruma função hipótese baseada na função exponencial como seja:

7Dados compilados por: WorldWatch Insitute by H. Friedli et al., “Ice Core Record of the 13C/12C ratio ofAtmospheric CO2 in the Past Two Centuries,” Nature, November 20, 1986; Charles D. Keeling and Timothy Whorf,Scripps Institute of Oceanography, La Jolla, CA, private communications, February 26, 1993 and February 14, 1994and private communication and printout, February 5, 1996.

22

Page 29: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

hθ = θ0 + θ1ex

Para usar as técnicas de regressão linear com esta função hipótese basta calcularo novo vector x, em que cada elemento é transformado usando x(i) = ex(i) .

O uso desta técnica deve ser sempre precedido pelo redimensionamento daspropriedades. Portanto, o algoritmo será:

1. Redimensionar as propriedades;2. Calcular novas propriedades;3. Usar algoritmo tradicional de regressão linear;

Figura 2.13: Regressão polinomial da evolução da concentração de dióxido decarbono no ar.

A aplicação da regressão polinomial deve ser precedida da representação gráfica(quando possível) dos dados de treino de modo a perceber quais as funções maisadequadas à modelação desses mesmo dados.

Outros exemplos de regressões polinomiais:

hθ(x) = θ0 + θ1x + θ2x2

hθ(x) = θ0 + θ1x + θ2x2 + θ3x3

hθ(x) = θ0 + θ1x + θ2√

x

23

Page 30: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

2.3.2 Valores Discretos

Outro tipo de problema em relação à escolha das propriedades tem que ver como seu tipo e continuidade. Nos exemplos apresentados anteriormente todas as pro-priedades xj correspondem a valores reais contínuos, ou a valores inteiros que,embora não sejam contínuos, correspondem a uma escala de gradação com pro-priedades matemáticas contínuas: se um apartamento tem 1 quarto, e outro tem 2 quartos,então o segundo apartamento tem o dobro dos quartos do primeiro. Embora não faça sentidoexistir um apartamento com um quarto e meio, estes valores podem ser usadosdirectamente numa regressão.

Noutras situações os valores discretos correspondem a valores como fraco, normale bom, que embora sejam discretos e textuais podem ser convertidos em inteiros,como −1, 0 e 1 em que existe alguma relação entre os valores: o fraco é menorque o normal, que é menor que o bom. Este tipo de codificação também pode serusada directamente numa regressão.

Tudo complica quando os valores discretos não podem ser ordenados. Por exem-plo, se um dos parâmetros de entrada corresponder ao género de um indivíduo(masculino ou feminino). Podemos representar o masculino por um 0 e o femininopor um 1, mas não existe uma relação directa entre estes valores. Embora assimseja, e como só existem dois valores possíveis (booleanos, activo ou não activo) acodificação de dois valores discretos como tomando os valores de 0 ou 1 é possívelde ser usada directamente numa regressão.

Infelizmente, quando existem mais que dois valores discretos que não podem serordenado, como uma cor, que pode tomar os valores de verde, azul e vermelho, acodificação destes valores possíveis como valores inteiros não pode ser feita parauma regressão linear.

A solução para incorporar este tipo de parâmetros discretos numa regressão passapor criar tantos parâmetros quantos os valores possíveis, definindo-os como valo-res booleanos. Para o exemplo anterior, seriam criados três parâmetros diferenteschamados é verde, é azul e é vermelho, em que cada um destes parâmetros só poderáter um de dois valores booleanos: 1 ou 0.

Exercícios

1. Neste exercício propõe-se o estudo das experiências de Galileu sobre agravidade. Em http://exploringdata.net/ws_galil.htm poderá leruma explicação sobre o que cada valor representa.

h 1000 800 600 450 300 200 100

d 573 534 495 451 395 337 253

Nesta tabela h corresponde à altura da qual determinado objecto foi liber-tado e d à distância horizontal percorrida. Pretende-se prever d com baseem h.

24

Page 31: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

a. Crie os vectores h e d em ficheiros de texto, ou defina-os directamentenum programa Octave.

b. Represente graficamente os pontos da tabela.

2. Calcule as regressões lineares e polinomiais apresentadas de seguidas, erepresente-as sobre o gráfico anterior8:

a. hθ(x) = θ0 + θ1x

b. hθ(x) = θ0 + θ1x + θ2x2

c. hθ(x) = θ0 + θ1√

x

2.4 Equação NormalO método de gradiente descendente funciona mas obriga à definição de um nú-mero de iterações e do factor de aprendizagem de uma forma manual e interac-tiva.

O que se pretende é encontrar os valores de θ onde a função hθ(x) atinge umvalor mínimo. Pelo Cálculo sabe-se que no ponto mínimo as derivadas parciaisserão igual a zero. Podemos então calcular,

∂θjJ (θ) = 0

em ordem a θj , para cada j. Aqui não serão apresentados os detalhes de cálculo,mas é possível demonstrar que θ se obtém usando:

θ =(XT X

)−1XT y

2.4.1 Equação Normal vs Gradiente Descendente

Por um lado o Gradiente Descendente obriga à definição do factor de aprendi-zagem α, são necessárias muitas iterações, mas funciona bem com um númeroelevado de propriedades (mais de 106 propriedades!).

Por outro lado, a equação normal não obriga à escolha do factor de aprendiza-gem α, não necessita de iterar (o valor é calculado imediatamente), mas obriga àcomputação de (XT X)−1 que é demorada (O(n3)), o que torna esta abordagemlenta para um grande número de propriedades.

Assim, se n ≥ 10000 sugere-se o uso do algoritmo de gradiente descendente.

8Para a alínea c deverá garantir que os valores de x são positivos para que se possa calcular√

x.Para isso, e uma vez que o redimensionamento das propriedades obtém valores−1 ≤ x ≤ 1, bastarásomar o valor 1 antes de calcular a raiz quadrada.

25

Page 32: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

2.4.2 Invertibilidade

Para calcular (XT X)−1 é necessário que XT X seja uma matriz quadrada e tenhainversa (nem todas as matrizes têm matriz inversa).

Se X tem dimensão m×n, XT tem dimensão n×m, e portanto, XT tem dimensãon× n, logo uma matriz quadrada.

Em relação à invertibilidade, existem métodos que calculam matrizes inversasaproximadas. O Octave inclui a função pinv que calcula uma matriz pseudo-inversa de X. Mais detalhes são apresentados no apêndice de álgebra linear emOctave.

Exercícios

1. Implemente a função normEquation que calcule os valores de θ com base namatriz X e vector y, usando a equação normal.

2. Experimente todos os exercícios desta secção substituindo o uso do algo-ritmo gradiente descendente pelo uso da equação normal.

26

Page 33: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Capítulo 3Regressão LogísticaA regressão linear é usada, essencialmente, para estimar valores contínuos. Noentanto, existe um conjunto de outros problemas em que se pretendem estimarvalores discretos: classificar um exemplo constituído por um conjunto de propri-edades, atribuindo-lhe uma classe ou etiqueta.

Existem muitos exemplos de situações em que a regressão logística é útil:

• A classificação de e-mails como lixo electrónico (spam). Este tipo de classifi-cação é feito com base num conjunto de e-mails classificados previamentenuma de duas categorias (spam e não spam) e o que se pretende é, dado umnovo e-mail, classificá-lo numa destas duas categorias.

• A classificação de tumores como benignos ou malignos de acordo com umconjunto de factores, depois de criada uma base de exemplos de tumorespreviamente classificados.

• A classificação de notícias como interessantes ou não interessantes para de-terminado leitor de acordo com as notícias que esse leitor já leu e que clas-sificou (manualmente) como sendo interessantes.

Nestes problemas a função hipótese hθ(x) deve permitir obter uma categoria (umvalor discreto). Define-se então que y ∈ {0, 1}, em que 0 corresponde à classenegativa (o e-mail não é spam, o tumor é benigno, a notícia não é interessante), e1 corresponde à classe positiva (o e-mail é spam, o tumor é maligno, ou a notíciaé interessante).

Mais tarde será discutida também a classificação em mais que duas categorias,situação em que y poderá ter um conjunto de valores. Por exemplo, numa situa-ção em que o algoritmo de classificação terá de escolher entre quatro categorias,ter-se-á y ∈ {0, 1, 2, 3}.

3.1 A Função Logística (sigmoid)Considere-se um exemplo fictício e simplificado, em que se analisa a malignidadede um tumor de acordo com o seu tamanho. Fizeram-se nove análises e registadosos tamanhos e a malignidade dos tumores em causa. Apresentam-se (figura 3.1)

27

Page 34: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura 3.1: Tamanho do tumor vs Malignidade (dados fictícios).

graficamente os dados recolhidos e uma tentativa do uso da técnica de regressãolinear.

Como se pode observar, a tentativa de modelar os dados recolhidos com umarecta é infrutífera. Poder-se-ia dizer que quando hθ(x) > 0.5 se consideraria umtumor maligno, e que quando hθ(x) < 0.5 se consideraria um tumor benigno.Repare-se que esta decisão não permite que o quinto exemplo seja devidamenteclassificado. Repare-se também que recolhendo mais exemplos com maiores ta-manhos, a recta irá reduzir de declive, e mais exemplos serão mal classificados.

Pretende-se representar a função hipótese hθ(x) de modo a que seja mais claraa divisão entre as duas categorias. Também se pretende que os valores de hθ(x)variem no intervalo 0 ≤ hθ(x) ≤ 1.

Para isso iremos usar uma função denominada de sigmoid ou funçãologística (figura 3.2):

g(z) = 11 + e−z

A função hipótese será então definida com base em g(z):

hθ(x) = g(θT x) = 11 + e−θT x

28

Page 35: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

-1.5 -1 -0.5 0 0.5 1 1.5

0.5

1

Figura 3.2: Função sigmoid.

O resultado da função hθ(x) pode ser interpretado como a probabilidade de y = 1para a propriedade x. Usando o exemplo anterior, se para determinado tama-nho de tumor hθ(x) = 0.7, significa que há 70% de hipótese de o doente ter umtumor maligno. Pode-se dizer que corresponde à probabilidade de y = 1 dadoum valor de x e θ específicos:

hθ(x) = P (y = 1|x; θ)

Repare-se que se pretende que:

P (y = 0|x; θ) + P (y = 1|x; θ) = 1

Ou seja, a probabilidade de determinado tumor ser maligno, mais a probabi-lidade de não ser maligno, é de 100%. Dada esta equação, pode-se calcular aprobabilidade de y = 0 usando:

P (y = 0|x; θ) = 1− P (y = 1|x; θ) = 1− hθ(x)

Exercícios

1. Implemente a função sigmoid, g(z). Prepare g(z) de modo a que z possa serum escalar, vector ou matriz.

2. Represente graficamente a função g(z).

29

Page 36: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

3.2 Decisão de LimiteComo explicado anteriormente, será estimado y = 1 sempre que hθ(x) ≥ 0.5, eserá estimado y = 0 sempre que hθ(x) < 0.5.

Olhando para a função g(z) sabe-se que g(z) ≥ 0.5 se z ≥ 0, e sabe-se queg(z) < 0.5 se z < 0. Então, e usando a definição de hθ, é possível inferir quehθ(x) ≥ 0.5 sempre que θT x ≥ 0, e que hθ(x) < 0.5 sempre que θT x < 0.

Considerem-se dois exemplos de problemas (ver figura 3.3), em que os pontosrepresentados por um xis correspondem a exemplos positivos (y = 1) e os pon-tos representados por um círculo correspondem a exemplos negativos (y = 0).Pretende-se usar a regressão logística para determinar os limites representados.

Figura 3.3: Dois exemplos de funções hipótese.

No primeiro caso o limite é uma recta, por exemplo, x1 + x2 = 3. Pretende-se inferir que y = 1 quando x1 + x2 ≥ 3. Reescrevendo a equação obtemos−3 + x1 + x2 ≥ 0 que não é mais que uma forma diferente de escrever θT x ≥ 0,com θ = [−3 1 1]T . Neste caso, tem-se que:

hθ(x) = g (θ0 + θ1x1 + θ2x2)

O segundo exemplo corresponde a um limite não linear. Pretende-se inferir y = 1sempre que x2

1 + x22 ≥ 1, ou seja, −1 + x2

1 + x22 ≥ 0. A função hipótese para este

exemplo pode ser escrita como:

hθ(x) = g(θ0 + θ1x1 + θ2x2 + θ3x2

1 + θ4x22)

em que θ = [−1 0 0 1 1]T .

É possível obter limites com formas bastante complicadas, bastando para issoaumentar o grau desta equação, como por exemplo:

hθ(x) = g(θ0 + θ1x1 + θ2x2 + θ3x2

1 + θ4x21x2 + θ5x2

1x22 + θ6x3

1x2 + . . .)

30

Page 37: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Durante o estudo de um conjunto de dados de treino é importante a sua repre-sentação visual para perceber que tipo de limite se pretende obter, e desse modo,escolher devidamente a função hipótese.

Exercícios

1. Em http://ambs.perl-hackers.net/sebentas/ia/datasets/alturapeso.dat estão disponíveis dados sobre o peso (em quilogramas)e a altura (em metros) de 200 indivíduos, 99 do sexo masculino e 101 dosexo feminino.

a. Prepare os dados de modo a que possam ser importados no Octave.b. Represente graficamente os indivíduos. Use duas cores diferentes para

distinguir os indivíduos do sexo masculino dos indivíduos do sexo fe-minino.

c. Analise o gráfico e conjecture uma ou mais possíveis decisões de fun-ções limite.

3.3 Função CustoPara a regressão linear usou-se a função custo J(θ) definida como1:

J(θ) = 1m

m∑i=1

12

(hθ(x(i))− y(i)

)2

Esta função pode ser entendida como a média dos custos para cada um dos exem-plos de treino, ou seja:

J(θ) = 1m

cost(

hθ(x(i)), y(i))

com,

cost (hθ(x), y) = 12

(hθ(x)− y)2

Infelizmente esta função custo, quando hθ(x) = 1/(1 + e−θT x), é não convexa.Como a figura 3.4 mostra, uma função não convexa tem vários mínimos locaiso que torna o algoritmo de gradiente descendente pouco eficiente. O que sepretende é uma função de custo convexa, apenas com um mínimo.Para resolver este problema será definida a função de custo como:

cost (hθ(x), y) ={

− log(hθ(x)) para y = 1− log(1− hθ(x)) para y = 0

1A fórmula apresentada é ligeiramente diferente da usada anteriormente, embora equivalente.O 1/2 foi colocado após o somatório para facilitar a discussão sobre a função custo para a regressãologística.

31

Page 38: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura 3.4: Função não convexa, e função convexa.

A figura 3.5 mostra a função custo para y = 1 e y = 0 a variar de acordo com ovalor de h(x). Repare-se que quando h(x) está próximo do valor de y, o custo épróximo (ou igual) a zero. Por outro lado, à medida que h(x) se afasta do valorde y, o custo aumenta tendendo para infinito.

Figura 3.5: Função de custo para função logística.

Como y ∈ {0, 1}, a função de custo pode ser reescrita sem ser como um sistema:

cost (hθ(x), y) = −y log (hθ(x))− (1− y) log (1− hθ(x))

Repare-se que quando y = 0 a primeira parcela é anulada, e quando y = 1 asegunda parcela é anulada. Deste modo a função custo J(θ), que se pretendeminimizar, pode ser definida como:

J(θ) = − 1m

(m∑

i=1y(i) log hθ(x(i)) + (1− y(i)) log(1− hθ(x(i)))

)

32

Page 39: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Exercícios

1. Prepare os dados do exercício anterior para uma regressão logística:

a. Coloque numa matriz X os valores referentes ao peso e altura dos 200indivíduos;

b. Coloque num vector y os valores referentes ao sexo do indivíduo (use0 para o sexo masculino e 1 para o sexo feminino);

c. Redimensione as propriedades em X;d. Adicione os valores X

(i)0 = 1 em X.

2. Implemente a função de custo J(θ):

a. Implemente de forma iterativa e calcule J(

[0 0 0]T)

.b. Vectorize o cálculo de J(θ).

3.4 Minimização da Função CustoDe seguida são apresentados dois2 métodos possíveis para a minimização da fun-ção custo: por um lado pode ser usado o algoritmo gradiente descendente seme-lhante ao usado para as regressões lineares; por outro lado, pode ser usado umalgoritmo de cálculo de mínimos sobre funções livres.

3.4.1 Gradiente Descendente

Recordando o algoritmo do gradiente descendente:

repetir enquanto relevante {θj ← θj − α ∂

∂θjJ(θ)

}

As derivadas parciais da função custo J(θ) apresentada anteriormente são:

∂θjJ(θ) = 1

m

m∑i=1

(hθ(x(i))− y(i)

)x

(i)j

Repare-se que esta derivada é semelhante à obtida na regressão linear. A únicadiferença é que, para a regressão logística, hθ(x) é definida como:

hθ(x) = 11 + e−θT x

Tal como o gradiente descendente para a regressão linear, este algoritmo tambémpode ser vectorizado.

2Existem muitos outros métodos possíveis para a minimização da função custo, usando algoritmosmais sofisticados e/ou específicos para determinadas circunstâncias.

33

Page 40: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Exercícios

1. Implemente o gradiente descendente e aplique-o aos dados de peso e alturados exercícios anteriores.

2. Vectorize a implementação da alínea anterior e confira que obtém os mes-mos valores para os atributos θ.

3. Use o classificador para decidir o género de um indivíduo com 1.90 metrosde altura, e 110 quilogramas de peso. E se o indivíduo tiver 1.60 metros dealtura e apenas 50 quilogramas de peso?

3.4.2 Optimização

Assim como na regressão linear é possível minimizar a função J(θ) usando aequação normal, para a regressão logística também existe um conjunto de algo-ritmos optimizados para calcular os parâmetros θ. Esses outros algoritmos têmcomo vantagens não necessitarem da escolha do factor de aprendizagem α, e deserem na maior parte dos casos, mais eficientes. Por outro lado, são mais com-plexos.

O Octave inclui a função fminunc que pode ser usada para optimizar várias fun-ções definidas através da função optimset, entre as quais a função de gradientedescendente.

A função fminunc é uma função de ordem superior. Isto significa que um dosseus parâmetros é, ele mesmo, uma outra função. Neste caso, a função devecalcular o valor de custo J(θ) para determinados valores de θ, e os valores dasderivadas parciais ∂

∂θiJ(θ). Para poder calcular esses valores a função também

terá de receber a matriz de propriedades X e o vector de resultados y:

function [ jota, gradiente ] = custo( X, y, theta )

jota = ...;

gradiente = zeros(length(theta), 1);gradiente(1) = ...;gradiente(2) = ...;

endfunction

Ao implementar esta função há que tem em atenção que na posição gradi-ente(1) deve ser guardada a derivada parcial para θ0, ou seja, ∂

∂θ0J(θ). Assim,

gradiente(n+1) guardará ∂∂θn

J(θ).

Para usar a função fminunc é necessário criar um objecto com as opções do tipode função que se pretende minimizar, e o número máximo de iterações:

opcoes = optimset('GradObj', 'on', 'MaxIter', '100');

34

Page 41: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Com este objecto é possível invocar a função fminunc do seguinte modo3:

thetaInicial = zeros(n, 1);[thetaOptimo, resFunc, exitVal] = ...

fminunc(@(t)(custo(X, y, t)), thetaInicial, opcoes);

Note que a função fminunc irá passar à função custo apenas os novos valores deθ, daí a necessidade de criar uma λ-expression que permita invocar a função custocom os valores de X e y.

Os valores θ que minimizam J(θ) serão retornados em thetaOptimo. resFuncirá ter o resultado da função custo na sua última iteração, e exitVal terá umcódigo de sucesso (ou erro).

Existe uma variante mais eficiente da função fminunc denominada fmincg quenão é disponibilizada com o Octave. O código dessa função pode ser obtido emhttp://sprinkler.googlecode.com/svn/trunk/regression/fmincg.m.

Exercícios

1. Implemente a função custo apresentada anteriormente.

2. Use a função custo para obter valores de θ usando uma das funções deordem superior fminunc ou fmincg. Verifique que obtém valores de θsemelhantes aos obtidos na secção anterior.

3.5 Um contra todosEm grande parte das situações reais não se encontram apenas duas classes entreas quais distinguir. Ou seja, não se terá y ∈ {0, 1}. Considere-se por exemplo umcaso em que existem três categorias possíveis, y ∈ {1, 2, 3}, tal como apresentadona primeira imagem da figura 3.6.

A solução passa por dividir este problema em três outros problemas binários.Primeiro realiza-se uma regressão logística em que se distingue a classe 1 das res-tantes classes, posteriormente uma para distinguir a classe 2 das restantes classes,e finalmente, uma outra para distinguir a classe 3 das restantes classes.

Na prática, definem-se tantas funções hipótese quantas as classes possíveis:

h(i)θ (x) = P (y = i | x; θ)

Dados os valores x para os quais se pretende prever y, escolhe-se a classe i quemaximiza:

3A invocação da função fminunc pode parecer estranha. Está-se a usar uma λ-expression, criandouma função anónima que recebe apenas um parâmetro (chamado t), e que o usa para invocar afunção custo. Detalhes das λ-expression podem ser encontrados na secção sobre funções do anexo sobreOctave.

35

Page 42: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura 3.6: Regressão logística: um contra todos.

maxi

h(i)θ (x)

Exercícios

1. Em http://archive.ics.uci.edu/ml/machine-learning-databases/00241/ está disponível um conjunto de dados sobre folhas de diferentesespécies de plantas preparado por Mallah, Cope, and James Orwell (2013).Cada amostra é constituída por 64 parâmetros, referentes à sua forma,textura e margem.

a. Prepare o ficheiro referente à margem, de nome data_mar_64.txtpara ser importado no Octave. Repare que a primeira coluna cor-responde ao nome da folha, ou seja, a classe em que pretendemosclassificar. Substitua cada nome por um valor entre 0 e 99. Use, porexemplo, a ordem alfabética.

b. Crie a matriz X com 1600 linhas e 64 colunas, e o vector y com 1600elementos. Note que não é necessário normalizar os parâmetros por-que estes já se encontram no intervalo [0, 1].

c. Para avaliar o classificador obtido, crie uma matriz Xtest e um vec-tor ytest com um exemplo de treino por classe. Como existem exac-tamente 16 amostras para cada classe pode-se obter estes elementosusando:

36

Page 43: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Xtest = X( rem(1:length(y),16) == 0, :);X = X( rem(1:length(y),16) ~= 0, :);ytest = y( rem(1:length(y),16) == 0);y = y( rem(1:length(y),16) ~= 0);

2. Adicione a coluna de valores x(i)0 às matrizes X e Xtest.

3. Use a função fminunc para obter os valores de θ para cada classe. Paraisso será necessário treinar cada uma das classes em relação às outras. Useo valor 0 para representar todas as outras classes, e o valor 1 para representara classe a ser treinada. Guarde todos os valores de θ numa matriz, com tantaslinhas quanto as classes existentes (100), e com n + 1 colunas (tamanho deθ).

4. Use o classificador h(i)θ (x) obtido para classificar cada um dos exemplos

de teste em Xtest. Verifique se o classificador é capaz de classificar de-vidamente cada folha, comparando o resultado com os valores em ytest.Calcule a percentagem de acerto.

É possível calcular todos os valores de h(i)θ (x) para todos os θ e exemplos i

apenas com uma multiplicação de matrizes.O índice do valor máximo em cada coluna corresponde à classe calculada.Veja a documentação da função max para informação sobre como obter oíndice do maior valor.

5. Experimente a mesma abordagem para a forma e textura4.

6. Experimente juntar os três tipos de análise numa única matriz. Que per-centagem de acerto obtém?

4Note que o ficheiro de texturas tem uma amostra a menos para a primeira classe. Pode resolvero problema duplicando a primeira linha.

37

Page 44: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

38

Page 45: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Capítulo 4Sobre-ajustamento e RegularizaçãoAs figuras 4.1 e 4.2 correspondem a exemplos de regressões lineares e logísticasusando diferentes quantidades de parâmetros.

Figura 4.1: Regressão Linear altamente tendenciosa, aceitável e sobre-ajustada.

Figura 4.2: Regressão Logística altamente tendenciosa, aceitável e sobre-ajustada.

No primeiro caso, a primeira regressão é altamente tendenciosa e sob-ajustada,usando uma regressão simples, hθ(x) = θ0 + θ1x. A terceira regressão está sobre-ajustada com alta variância, hθ(x) = θ0 +θ1x+θ2x2 +θ3x3 +θ4x4 +θ5x5 +θ6x6.A segunda, por sua vez, será uma regressão aceitável, com hθ(x) = θ0 + θ1x +θ2x2 + θ3x3.

39

Page 46: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Do mesmo modo, para a regressão logística também é possível obter regressõessob-ajustadas e tendenciosas usando poucas propriedades, ou regressões sobre-ajustadas e com alta variância, usando um grande número de propriedades.

Quando se usa o número demasiado grande de propriedades, a hipótese hθ

aprendida pode estar perfeitamente adequada ao conjunto de treino (ou seja,com J(θ) ≈ 0), mas irá falhar não sendo capaz de generalizar para novos casos.

As opções possíveis quando existe sobre-ajustamento são:

• reduzir o número de propriedades, seja seleccionando manualmente quaisas relevantes, seja usando um algoritmo de selecção; o problema é que nemsempre é possível prever com alguma certeza quais as propriedades real-mente relevantes.

• manter todas as propriedades, mas reduzir a magnitude ou valor dos parâ-metros θj , solução que irá funcionar bem quando existem muitas proprie-dades em que cada uma contribui ligeiramente na predição de y.

A redução da magnitude ou valor dos parâmetros θj é denominada por regula-rização, e corresponde a adicionar um custo ou peso a cada parâmetro. Comoos algoritmos de regressão têm como objectivo a diminuição do custo da funçãohipótese, os pesos associados aos parâmetros θj vão garantir que a magnitudedestes não subirá demasiado. Esta penalização levará a que se obtenham valoresde θj menores, o que tipicamente corresponde a funções hipóteses mais simples emenos propensas a sobre-ajustamento.

4.1 Regressão Linear RegularizadaPara a regressão linear a regularização corresponde a multiplicar um peso cons-tante, λ, a cada parâmetro θj (com excepção do parâmetro θ0).

4.1.1 Função de Custo

A função de custo regularizada para a regressão linear corresponde a:

J(θ) = 12m

m∑i=1

(hθ(x(i))− y(i)

)2+ λ

n∑j=1

θ2j

Note-se que a regularização multiplica o peso λ pelo quadrado dos parâmetros.A razão de se calcular o quadrado tem que ver com a possibilidade de algumdos parâmetros ser negativo, e nesse caso, o peso diminuir o custo em vez de oaumentar.

Tal como na regressão não regularizada, o objectivo mantém-se:

minθ

J(θ)

40

Page 47: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Repare-se que o parâmetro θ0 não é penalizado. Na verdade não existe grandediferença no resultado penalizando ou não este parâmetro. Mas por convençãonão deve ser penalizado.

O valor λ é designado de parâmetro de regularização, e regula o peso de cada parte dafunção custo: por um lado pretende-se minimizar o custo da função hθ(x), maspor outro lado, também se pretende minimizar os valores de θj .

Note-se que a definição de um parâmetro de regularização excessivamente alto(por exemplo, λ = 1010) os valores de θj irão ser extremamente baixos (na ver-dade, θj ≈ 0), o que pode significa que a função hipótese será hθ(x) ≈ θ0, ouseja, uma função constante.

4.1.2 Gradiente Descendente

Usando regularização as derivadas parciais de J(θ) são diferentes, pelo que oalgoritmo gradiente descendente deverá ser também alterado.

Para o parâmetro θ0 a derivada parcial é a mesma, já que a regularização é cons-tante (não depende do valor de θ0). Para os restantes parâmetros a derivadaparcial fica:

∂θjJ(θ) = 1

m

(m∑

i=1

(hθ(x(i))− y(i)

)x

(i)j + λθj

)

Obtém-se, então, o seguinte algoritmo:

repetir enquanto relevante {θ0 ← θ0 − α 1

m

∑mi=1(hθ(x(i))− y(i))x

(i)0

θj ← θj − α(

1m

∑mi=1(hθ(x(i))− y(i))x

(i)j + λ

m θj

)∀j ̸= 0

}

4.1.3 Equação Normal

É possível usar a equação normal para calcular uma regressão linear com regu-larização. Para isso utiliza-se a seguinte equação:

θ =

XT X + λ

0 0 0 · · · 00 1 0 · · · 00 0 1 · · · 0...

...... . . . ...

0 0 0 · · · 1

−1

XT y

Repare-se que a matriz não é a matriz identidade, já que a posição M0,0 = 0, eque é uma matriz quadrada de tamanho n + 1. Note-se também que é possíveldemonstrar que para λ > 0 então é possível calcular a matriz inversa necessá-ria (e portanto, não é necessário usar a pseudo-inversa). Infelizmente a precisão

41

Page 48: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

disponível em 64 bits por vezes leva a que o cálculo da matriz inversa falhe, peloque é aconselhável usar, de qualquer modo, a função pinv.

Exercícios

1. Obtenha o dataset de 9 pontos no espaço disponível em http://people.sc.fsu.edu/~jburkardt/datasets/regression/x29.txt (Spaeth(1974), 60-61). Repare que apenas as terceira (x1) e quarta (y) colunas sãorelevantes.

a. Represente graficamente os 9 pontos.b. Limite os eixos ao intervalo [0, 10].c. Normalize X.d. Adicione a coluna x0 = 1, e as colunas polinomiais x2 = x2

1, x3 = x31,

x4 = x41, …, x11 = x11

1 .

2. Implemente a versão regularizada da função custo J(θ).

3. Implemente o algoritmo gradiente descendente regularizado.

4. Use o algoritmo para obter os valores θ, usando λ = 0, α = 0.0008 e, pelomenos, 300 000 iterações. Represente sobre o gráfico anterior a regressãoobtida.

5. Experimente adicionar regularização, com λ = 5, α = 0.000001 e, pelomenos, 300 000 iterações. Represente sobre o gráfico anterior a regressãoobtida.

6. Infelizmente adicionando colunas polinomiais torna o algoritmo maislento, necessitando de um número muito maior de iterações, e um factorde aprendizagem muito baixo. Implemente, então, a equação normalregularizada.

7. Use a equação normal para obter os valores de θ sem regularização (λ = 0).Represente sobre o gráfico anterior a regressão obtida.

8. Experimente obter os valores de θ usando regularização (λ = 5). Repre-sente sobre o gráfico anterior a regressão obtida.

4.2 Regressão Logística RegularizadaPara a regressão logística também é possível adicionar um peso aos parâmetrosθj de uma forma muito semelhante à usada na regressão linear.

4.2.1 Função de Custo

A função custo regularizada para a regressão logística corresponde a:

42

Page 49: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

J(θ) = −

(1m

m∑i=1

y(i) log hθ(x(i)) + (1− y(i)) log(

1− hθ(x(i))))

+ λ

2m

n∑j=1

θ2j

Tal como se fez inicialmente para a regressão linear, a parcela referente à regu-larização divide λ por 2 ×m para que ao calcular as derivadas parciais se possasimplificar a equação obtida.

4.2.2 Gradiente Descendente

O algoritmo regularizado é semelhante ao da regressão linear:

repetir enquanto relevante {θ0 ← θ0 − α 1

m

∑mi=1(hθ(x(i))− y(i))x

(i)0

θj ← θj − α(

1m

∑mi=1(hθ(x(i))− y(i))x

(i)j + λ

m θj

)∀j ̸= 0

}

A única diferença consiste em hθ(x) ser definido como:

hθ(x) = 11 + e−θT X

4.2.3 Optimização

O uso da função fminunc ou fmincg é semelhante ao descrito no capítulo ante-rior, tendo apenas em atenção que o cálculo de J(θ) e das derivadas parciais ∂

∂θj

para j > 0 deve ser feito tendo em conta as fórmulas apresentadas anteriormente,incluindo regularização.

Exercícios

1. O dataset disponível em http://ambs.perl-hackers.net/sebentas/ia/datasets/advadj.txt corresponde a um estudo de várias obras deCamilo Castelo Branco e de Almeida Garrett, calculando a frequência re-lativa do uso de adjectivos e de advérbios em cada obra. Importe os dadose prepare um gráfico semelhante ao apresentado na figura 4.3.

2. Implemente a função custo J(θ) com regularização para a regressão logís-tica.

3. Implemente a função gradiente descendente com regularização ou implementeuma função susceptível de poder ser usada com as funções fminunc efmincg.

43

Page 50: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura 4.3: Distribuição das frequências de uso de adjectivos e advérbios dosautores portugueses Camilo Castelo Branco e Almeida Garrett.

44

Page 51: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

4. Obtenha a função createPolinomial disponível em http://ambs.perl-hackers.net/sebentas/ia/code/createPolinomial.m.Dada uma matriz X e um valor inteiro grau, esta função retorna umanova matriz X em que foi adicionada a coluna x

(i)0 = 1, e outras colunas

x(i)j com j > 2, com termos de um polinómio de grau grau. Usando esta

função crie uma nova matriz X com um polinómio de grau 8.

5. Usando a nova matriz X obtida na alínea anterior, use a função fmincgcom 2000 iterações para calcular uma regressão logística sem regulariza-ção.

6. Obtenha a função plotBoundary disponível em http://ambs.perl-hackers.net/sebentas/ia/code/plotBoundary.m. Estafunção permite desenhar graficamente o limite de classificação obtida.Os argumentos recebidos correspondem ao grau do polinómio usado, amatriz X e o valor obtido de θ.

7. Invoque a função plotBoundary usando o valor 8 como grau do polinó-mio. Verifique o limite desenhado.

8. Usando a matriz X use a função fmincg com 2000 iterações para calcularuma regressão logística com regularização, com λ = 0.000001.

9. Com o valor θ obtido na alínea anterior use a função plotBoundary paradesenhar o novo limite.

45

Page 52: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

46

Page 53: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Capítulo 5Redes NeuronaisO conceito de rede neuronal existe há já muito tempo. Embora o seu uso tenha tidoaltos e baixos, actualmente é uma das técnicas mais eficazes para muitas técnicasactuais de Inteligência Artificial.

5.1 MotivaçãoSe existem as regressões lineares e logísticas, para que são necessários mais al-goritmos de aprendizagem? O que se pretende é encontrar novas formas deaprender hipóteses não lineares complexas.

Embora se possa adicionar propriedades polinomiais numa regressão, no sentidode aumentar a sua não linearidade, e portanto, aumentar a complexidade dafunção hipótese encontrada, esta adição leva a uma explosão na quantidade depropriedades da regressão.

Considere-se um problema em que existem 100 propriedades. Ao se decidiradicionar propriedades polinomiais de grau 2 (x2

1, x1x2, x1x3, . . . , x2n) obtemos

cerca de 5 000 propriedades (para além das 100 iniciais). Este tipo de problemapara além de ser caro computacionalmente corre facilmente o risco de sobre-ajustamento. Logo, este tipo de solução não é exequível para problemas com umgrande número de propriedades.

Explorando outro exemplo mais concreto, pretende-se fazer reconhecimento deimagem, em que o computador possa distinguir fotos de flores de fotos em quenão existem flores. Para um computador uma imagem é uma sequência de pon-tos, cada um com uma intensidade de cor (tipicamente a intensidade RGB, quan-tidade de vermelho, verde e azul). Se as imagens que são fornecidas ao algoritmode aprendizagem têm 100 pixels de largura e 50 pixels de altura, cada imagem érepresentada por 5000 pixels. Ao adicionarmos a informação de cor a cada umdestes pixels, obtém-se 15000 propriedades por imagem. Supondo que sobre es-tas propriedades se pretendem adicionar termos polinomais de grau 2, atinge-serapidamente mais de 100 milhões de propriedades.

47

Page 54: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

5.2 HistóriaAs redes neuronais surgiram com o objectivo de imitar o comportamento do cé-rebro. Surgiu nos anos 80 mas a sua popularidade desceu nos anos 90. Ressurgiurecentemente e é estado da arte para muitas aplicações.

O algoritmo assenta na hipótese da existência de um único algoritmo capaz deaprender a realizar qualquer tarefa. Esta hipótese tem vindo a ser testada, comrazoável sucesso, na bio-medicina. Fizeram-se experiências em que a parte docérebro responsável pela audição foi capaz de aprender a ver. O mesmo aconte-ceu com a área (o córtex) somatossensorial, que também foi capaz de aprender aver. Muitas experiências deste género foram e continuam a ser realizadas.

5.3 Modelo de uma Rede NeuronalO cérebro é constituído por células nervosas, chamadas neurónios. Os neuróniossão células com a estrutura apresentada na figura 5.1.

Figura 5.1: Esquema de um neurónio.

As pontas indicadas na imagem, os dendritos (2) são os terminais de recepção dosimpulsos eléctricos, processados pelo núcleo da célula (1). O resultado de pro-cessamento é enviado pelo axônio que está ligado ao terminal de transmissão (4),também denominado de terminal do axônio, através da bainha de mielina (3).

No paralelismo com as ciências da computação interessa salientar a existência devários terminais de recepção, um centro de processamento, e apenas um terminalde transmissão.

Os vários neurónios existentes no cérebro são especializados, sendo cada um res-ponsável por uma pequeníssima parte do raciocínio, controlo do corpo, interfacecom os diversos sentidos, etc. Os neurónios comunicam recebendo vários impul-sos através dos dendritos, que resultam num impulso eléctrico resposta enviado peloterminal do axônio para um outro neurónio.

Esta abordagem é simulada nas redes neuronais, juntando várias unidades, cha-madas unidades logísticas (porque são activadas por uma regressão logística).

48

Page 55: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

5.3.1 Unidades Logísticas

A figura 5.2 apresenta um exemplo de uma unidade logística, com três valores deentrada, e um valor de saída. Note-se que embora o esquema indique três valoresx1, x2 e x3, existe ainda o valor x0 = 1 que habitualmente não é representada.

x1

x2

x3

hθ(x)

Figura 5.2: Unidade Logística.

Assim, uma unidade logística é constituída por valores de entrada x, parâmetrosθ (que na terminologia das redes neuronais são designados por pesos) e por umafunção de activação: a função sigmoidal:

x =

x0x1x2x3

θ =

θ0θ1θ2θ3

hθ(x) = 11 + e−θT x

Uma rede neuronal não é mais que um conjunto de unidades logísticas interli-gadas. A figura 5.3 apresenta uma rede neuronal de 4 unidades logísticas, comtrês camadas: a primeira correspondente aos valores xi de entrada (camada deentrada, ou de input), a segunda correspondente à camada das unidades logísticasdenominadas por a

(j)2 , e a terceira camada correspondente à unidade logística

a(1)3 (camada de saída, ou de output). As camadas intermédias são designadas por

camadas ocultas.Note que, tal como anteriormente, x0 = 1 e a

(j)0 = 1 por definição.

Introduzindo alguma notação, a(j)i é a activação da unidade logística i na camada

j, e Θ(j) é a matriz dos pesos que controlam o mapeamento entre a camada j ea camada j + 1.No exemplo em causa, cada unidade de activação tem quatro pesos associados,θ0, θ1, θ2 e θ3. Uma vez que existem três unidades de activação na segunda ca-mada, a matriz Θ(1) ∈ IR3×4, uma linha por cada unidade de activação.Assim, as funções das unidades de activação correspondem às seguintes regres-sões logísticas:

a(2)1 = g(Θ(1)

1,0x0 + Θ(1)1,1x1 + Θ(1)

1,2x2 + Θ(1)1,3x3)

a(2)2 = g(Θ(1)

2,0x0 + Θ(1)2,1x1 + Θ(1)

2,2x2 + Θ(1)2,3x3)

a(2)3 = g(Θ(1)

3,0x0 + Θ(1)3,1x1 + Θ(1)

3,2x2 + Θ(1)3,3x3)

49

Page 56: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

x1

x2

x3

a(2)1

a(2)2

a(2)3

a(3)1 hΘ(x)

Figura 5.3: Rede neuronal.

Por sua vez, Θ(2) ∈ IR1×4, uma matriz com apenas uma linha (uma vez que na ter-ceira camada só existe uma unidade de activação) e três colunas (uma para cadauma das quatro ligações de entrada para a unidade de activação, a

(2)0 , a

(2)1 , a

(2)2

e a(2)3 ).

A função da última unidade de activação será:

hΘ(x) = a(3)1 = g(Θ(2)

1,0a(2)0 + Θ(2)

1,1a(2)1 + Θ(2)

1,2a(2)2 + Θ(2)

1,3a(2)3 )

Genericamente, se uma rede neuronal tem sj unidades na camada j, e sj+1 uni-dades na camada j + 1, então Θ(j) terá dimensões sj+1 × (sj + 1).

5.3.2 Propagação para a Frente

Uma rede neuronal pode ser calculada de forma eficiente usando uma imple-mentação vectorizada. Para facilitar a discussão iremos definir:

a(2)1 = g(Θ(1)

1,0x0 + Θ(1)1,1x1 + Θ(1)

1,2x2 + Θ(1)1,3x3) = g

(z

(2)1

)ou seja, z

(j)i corresponde ao valor usado na função de activação na camada j,

nodo i. Reescrevendo os restantes termos, obtém-se:

z(2)1 = Θ(1)

1,0x0 + Θ(1)1,1x1 + Θ(1)

1,2x2 + Θ(1)1,3x3

z(2)2 = Θ(1)

2,0x0 + Θ(1)2,1x1 + Θ(1)

2,2x2 + Θ(1)2,3x3

z(2)3 = Θ(1)

3,0x0 + Θ(1)3,1x1 + Θ(1)

3,2x2 + Θ(1)3,3x3

Repare-se que estes termos correspondem, exactamente, à multiplicação Θ(1)x

com x = [x0 x1 x2 x3]T . Deste modo podem-se calcular os valores de activaçãoa(2) usando:

50

Page 57: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

z(2) = Θ(1)x

a(2) = g(z(2))

Para calcular os valores de activação para a camada seguinte, a(3) tem-se de adi-cionar ao vector a(2) o elemento a

(2)0 = 1, e aplicar novamente:

z(3) = Θ(2)a(2)

hΘ(x) = a(3) = g(z(3))

Definindo, por apenas por notação, que a(1) = x, ou seja, que os valores deactivação da camada de entrada podem ser designados por a(1), é possível definirum algoritmo vectorizado eficiente para a computação de uma rede neuronalcom propagação para a frente, ou seja, iniciando a computação do lado esquerdo,e aplicando as operações até obter um valor na camada de saída. Definindo Lcomo sendo o número de camadas da rede neuronal, tem-se:

Para i = 2 até L {

a(i−1)0 = 1

z(i) = Θ(i−1)a(i−1)

a(i) = g(z(i))

}

A relevância das redes neuronais baseia-se no facto de que a rede aprende as suaspróprias propriedades. Considerando o esquema da rede neuronal apresentadoanteriormente, a unidade logística na terceira camada está a calcular uma regres-são logística sobre as propriedades a

(2)1 , a

(2)2 , . . ., que são elas próprias o resultado

de aplicar diferentes regressões logísticas aos valores originais. Isto permite quea última camada da rede neuronal use um conjunto de parâmetros muito maisrico do que os parâmetros originais.

5.4 Arquitecturas de Redes NeuronaisAs unidades logísticas podem ser conectadas entre si de diferentes formas. Aestrutura pela qual as unidades se ligam é denominada a arquitectura da redeneuronal.

Esta arquitectura pode fazer variar o número de camadas ocultas, e o número deunidades logísticas por cada camada. Em particular, na última camada (camadade saída) podem existir mais do que uma unidade logística. Isto permite quea rede neuronal seja capaz de classificar em mais do que duas classes sem sernecessário o uso da técnica um-contra-todos.

51

Page 58: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

x1

x2

x3

a(2)1

a(2)2

a(2)3

a(3)1

a(3)2

a(4)1 hΘ(x)

Figura 5.4: Rede neuronal com arquitectura de quatro camadas.

5.4.1 Múltiplas Unidades de Saída

Quando uma rede neuronal tem na última camada (camada de saída) apenasuma unidade logística, o resultado obtido será binário, permitindo fazer classifi-cação em apenas duas classes.

Embora fosse possível o uso da técnica um-contra-todos para a classificação emmais que duas classe, nas redes neuronais tal é obtido adicionando mais do queuma unidade logística à última camada (camada de saída).

A figura 5.5 mostra uma arquitectura possível para uma rede neuronal, com qua-tro unidades logísticas de saída.

Figura 5.5: Rede neuronal para classificação em 4 classes.

Nesta situação apenas uma das unidades deverá retornar um valor verdadeiro

52

Page 59: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

(superior a 0.5). Assim, os resultados esperados seriam, para cada categoria:

hθ(x) ≈

1000

hθ(x) ≈

0100

hθ(x) ≈

0010

hθ(x) ≈

0001

Isto significa que os dados de treino também devem ser adaptados. Os valores aobter (valores y) deixam de pertencer ao intervalo y ∈ {0, 1, 2, 3}, e passam a servectores como os apresentados anteriormente.

5.4.2 Escolha da Arquitectura de Rede Neuronal

Embora existam algumas limitações na escolha do número de camadas e unida-des por camada numa rede neuronal, a escolha da topologia de rede é abertapermitindo uma enorme variedade de arquitecturas para um mesmo problema.O número mínimo de camadas numa rede neuronal é de 3 camadas, uma ca-mada de entrada, uma camada de saída e uma camada escondida. Não faz sen-tido eliminar a camada escondida já que nessa situação se estaria a simular umconjunto de regressões logísticas. Quanto ao número de camadas escondidas,quanto maior for esse número, melhor será, em princípio, o seu resultado. Noentanto, o aumento do número de camadas escondidas leva a um aumento docusto computacional da rede neuronal pelo que na maior parte das situações seusem redes neuronais com 3 ou 4 camadas.O número de unidades na camada de entrada é definido pelo número de propri-edades existentes, ou seja, o número de elementos em x(i), para cada exemplode treino. Por sua vez, o número de unidades na camada de saída é definidopelo número de classes em que a rede neuronal deverá classificar os dados. Paraa classificação em apenas duas classes usa-se uma unidade na camada de saída.Para a classificação em K classes, com K > 2, usam-se K unidades na camadade saída.Para cada camada escondida o número de unidades pode variar bastante. Ti-picamente usa-se um valor semelhante ao número de unidades da camada deentrada, ou então um seu múltiplo, como duas ou três vezes o número de uni-dades da camada de entrada. Embora não seja obrigatório, é usual que todas ascamadas escondidas tenham o mesmo número de unidades.

5.5 AprendizagemConsiderando o caso geral em que se usam várias unidades logísticas na camadade saída, usa-se L para representar o número de camadas da rede neuronal, sl onúmero de unidades na camada l (sem contar a unidade a

(j)0 = 1), e K o número

de classes, ou seja, o número de unidades logísticas na camada de saída.A notação para os exemplos de treino mantém-se, com (x(i), y(i)) para cadaexemplo de treino, sendo que y(i) deixa de ser um valor inteiro, para dar lugar aum vector, y ∈ IRK .

53

Page 60: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

5.5.1 Função Custo

Recordando a função de custo para a regressão logística:

J(θ) = − 1m

(m∑

i=1y(i) log hθ(x(i)) + (1− y(i)) log(1− hθ(x(i)))

)+ λ

2m

n∑j=1

θ2j

A função de custo para uma rede neuronal é semelhante. As principais diferençassão a necessidade de calcular o custo para cada uma das classes possíveis (por-tanto, para as K unidades de saída), e a de regularizar todos os parâmetros θ detodas as matrizes Θ(j).

Note-se que hΘ(x(i)) ∈ IRK e portanto (hΘ(x(i)))j corresponde à posição j dovector resultado.

J(Θ) =− 1m

(m∑

i=1

K∑k=1

y(i)k log(hΘ(x(i)))k + (1− y

(i)k ) log(1− (hΘ(x(i)))k)

)

+ λ

2m

L−1∑l=1

sl∑i=1

Sl+1∑j=1

(Θ(l)

j,i

)2

5.5.2 Minimização da Função Custo

Tal como com as regressões lineares e logísticas, o que se pretende é minimizar ocusto da rede neuronal, obtendo valores de Θ(l) que permitam obter uma funçãohipótese capaz de simular os dados de treino:

minΘ

J(Θ)

Para a minimização da função custo pode-se utilizar a técnica de gradiente des-cendente ou as funções de procura de mínimos em funções (como a fminunc).Para estas abordagens é necessário calcular derivadas parciais para cada parâ-metro, ou seja, é necessário calcular:

∂Θ(l)i,j

para l < L

O cálculo da fórmula para estas derivadas parciais é complicado e fora do âm-bito deste livro. No entanto, existe uma abordagem iterativa que permite o seucálculo, de nome propagação para trás que será discutida já de seguida.

54

Page 61: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

5.5.3 Propagação para Trás

Considere-se a notação δ(l)i para representar o erro (a variação, ou delta) entre o

valor óptimo para a(l)i (seja ele qual for) e o valor obtido usando a propagação para

a frente com os valores actuais de Θ.

Para a explicação que se segue será usada a arquitectura de rede neuronal repre-sentada anteriormente(figura 5.5), com quatro camadas (L = 4) e quatro unida-des na camada de saída (K = 4).

Tendo em conta esta rede neuronal em particular, e considerando apenas umexemplo de treino (x, y), então δ

(4)1 corresponde ao erro da unidade de activação

a(4)1 em relação ao valor esperado (primeiro elemento do vector y, ou seja, y1):

δ(4)1 = a

(4)1 − y1

Genericamente tem-se:

δ(4)j = a

(4)j − yj 1 ≤ j ≤ K

Ou ainda, vectorizando a operação,

δ(4) = a(4) − y

Intuitivamente este valor pode ser visto como a diferença entre o valor actualobtido pela rede neuronal e aquele que deveria ser, ou seja, o erro actual da redeneuronal.

Para a terceira camada não existe um vector de resultados esperados, tal comona última camada, em que se sabe os valores y esperados. No entanto é possíveldemonstrar que os valores de δ(3) podem ser obtidos com1:

δ(3) = (Θ(3))T δ(4).× g′(z(3))

Também é possível demonstrar que a derivada da função sigmoidal pode ser obtidapor:

g′(z(3)) = g(z(3)).× (1− g(z(3))) = a(3).× (1− a(3))

Do mesmo modo, é possível obter os “erros” para a segunda camada usando umafórmula semelhante:

δ(2) = (Θ(2))T δ(3).× g′(z(2))

Finalmente, não existe δ(1) já que essa camada corresponde aos valores x doexemplo de treino.

1Nas fórmulas que se seguem representa-se por .× a multiplicação elemento a elemento de duasmatrizes com as mesmas dimensões. Se R = A.×B então Ri,j = Ai,j ×Bi,j .

55

Page 62: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Tenha-se em atenção que os vectores δ(l), para l ∈ [3, L − 1], são obtidos comum elemento extra, δ

(l)0 , que deve ser ignorado ao calcular δ(l−1). Assim, numa

rede neuronal de quatro camadas, ao calcular δ(2) será necessário remover pre-viamente o primeiro elemento de δ(3).

Algoritmo

Considerem-se m exemplos de treino,{(x(1), y(1)), (x(2), y(2)), . . . , (x(m), y(m))

}O algoritmo para o cálculo das derivadas parciais usando a propagação para trásé definido como2:

∆(l)i,j = 0 ∀ i, j, l

para i = 1 até m

a(1) = x(i)

a(l) = propagação para a frente ∀ l ∈ {2, 3, . . . , L}

δ(L) = a(L) − y(i)

calcular δ(L−1), δ(L−2), . . . , δ(2)

∆(l)i,j ← ∆(l)

i,j + a(l)j δ

(l+1)i

D(l)i,j = 1

m ∆(l)i,j + λΘ(l)

i,j para j ̸= 0

D(l)i,j = 1

m ∆(l)i,j para j = 0

É possível demonstrar que:

∂Θ(l)i,j

= D(l)i,j

Notas de Implementação

A implementação de uma rede neuronal pode usar o algoritmo gradiente descendenteou utilizar uma das funções optimizadas como a fminunc. Neste último casoserá necessário ter algum cuidado na forma como as matrizes Θ(l) serão passadascomo parâmetros à função, e no modo como essa mesma função irá retornar asvárias matrizes de derivadas D

(l)i,j .

Repare-se que a assinatura da função fminunc é:

fminunc( @FunçãoCusto, ThetaInicial, Opções)2A acumulação dos valores ∆(l) pode ser vectorizado: ∆(l) ← ∆(l) + δ(l+1)(a(l))T .

56

Page 63: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

em que ThetaInicial é um vector, e não um conjunto de matrizes.

Do mesmo modo, a função FunçãoCusto tem a seguinte assinatura:

[custo, gradiente] = FunçãoCusto( VectorTheta )

em que VectorTheta deverá ser o conjunto das matrizes Theta(l) e gradiente deveráser o conjunto das matrizes de derivadas parciais D

(l)i,j .

Então, para que se possa usar estas funções optimizadas no cálculo de uma redeneuronal será necessário converter o conjunto de matrizes num único vector quepossa ser usado como argumento. Do mesmo modo, será necessário arranjar ummétodo inverso que, a partir de um único vector de reais consiga construir umconjunto de matrizes.

A este processo designamos por “desenrolar” as matrizes num único vector e,posteriormente, “enrolar” o vector num conjunto de matrizes. O primeiro pro-cesso é simples e quase independente da configuração da rede neuronal. Dadauma rede neuronal de quatro camadas (L = 4) existem três matrizes Θ(l) paraserem “desenroladas”. Supondo que estão armazenadas nas variáveis Theta1,Theta2 e Theta3, “desenrolar” as matrizes corresponde a tranformá-las em vec-tores verticais e concatená-los verticalmente:

unrolled = [ Theta1(:) ; Theta2(:) ; Theta3(:) ];

Infelizmente o processo de “enrolar” é dependente do número de unidades porcamada da rede neuronal. Supondo que s1 = 4, s2 = 5, s3 = 5 e s4 = 3, entãoas dimensões das matrizes Θ(l) são, respectivamente: 5× 5, 5× 6 e 3× 6.

Então, é possível “enrolar” as três matrizes a partir de um vector previamente“desenrolado” usando a função reshape:

Theta1 = reshape(unrolled(1:25), 5, 5);Theta2 = reshape(unrolled(26:55), 5, 6);Theta3 = reshape(unrolled(56:73), 3, 6);

Esta técnica permite que se “desenrole” as matrizes Θ(l) num vector para as poderpassar para a função fminunc. A função de processamento deverá “enrolar” ovector, usar as matrizes Θ(l) para calcular a propagação para trás obtendo asmatrizes D(l). Estas matrizes terão de ser de novo “desenroladas” para poderemser retornadas.

Validação da Implementação

O algoritmo de propagação para trás é algo complicado e pode ser implementadode forma errada por alguma distracção, pelo que um mecanismo que nos per-mita garantir a sua correcta implementação é imprescindível. É relativamentefácil obter-se uma implementação errada de uma rede neuronal que aparentafuncionar. No entanto, uma implementação correcta deverá permitir obter umcomportamento mais preciso.

57

Page 64: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Uma forma de implementar validação corresponde a calcular aproximações nu-méricas às derivadas parciais (em vez de as calcular de forma algébrica, como noalgoritmo apresentado anteriormente). Este processo é designado por validaçãonumérica do gradiente (numerical gradient checking).

Para simplificar a explicação considere-se um valor θ ao invés de uma matriz.Para calcular um valor aproximado à derivada de J(θ) em determinado pontoda função custo calculam-se os pontos J(θ+ϵ) e J(θ−ϵ). Estes pontos são unidospor um segmento, e a inclinação desse segmento corresponde a uma aproximaçãoda derivada da função nesse ponto.

A figura 5.6 mostra esquematicamente este processo. Está representada a deri-vada (tangente ao ponto de J(θ)), e o segmento obtido unindo os pontos comcoordenadas (θ − ϵ, J(θ − ϵ)) e (θ + ϵ, J(θ + ϵ)).

Figura 5.6: Cálculo da derivada por aproximação numérica.

A inclinação do segmento pode ser obtida dividindo a diferença entre as abcissasdos dois pontos obtidos (J(θ + ϵ)− J(θ− ϵ)) pela diferença entre as coordenadasdesses mesmos pontos (θ + ϵ− (θ − ϵ) = 2ϵ):

∂θJ(θ) ≈ J(θ + ϵ)− J(θ − ϵ)

Quanto menor for o valor de ϵ mais próximo estará o valor obtido do valor daderivada real. Habitualmente usam-se valores de ϵ na ordem dos 10−4.

No caso das redes neuronais não existe apenas um valor θ real: o θ correspondeà versão “desenrolada” das matrizes Θ(l), ou seja, um vector de valores reais.

58

Page 65: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Nesta situação pode-se usar uma abordagem semelhante para calcular valoresaproximados para cada uma das derivadas parciais:

∂∂θ1

J(θ) ≈ J(theta1+ϵ,θ2,θ3,...,θn)−J(theta1−ϵ,θ2,θ3,...,θn)2ϵ

∂∂θ2

J(θ) ≈ J(theta1,θ2+ϵ,θ3,...,θn)−J(theta1,θ2−ϵ,θ3,...,θn)2ϵ

...∂

∂θnJ(θ) ≈ J(theta1,θ2,θ3,...,θn+ϵ)−J(theta1,θ2,θ3,...,θn−ϵ)

O cálculo destas aproximações pode ser realizado usando código semelhante a:

for i = 1:n,thetaMais = theta;thetaMais(i) = thetaMais(i) + EPSILON;thetaMenos = theta;thetaMenos(i) = thetaMenos(i) - EPSILON;gradAprox(i) = (J(thetaMais) - J(thetaMenos)) ...

/ (2 * EPSILON);end

No final, o vector gradAprox deve ser igual ou muito semelhante ao vector obtido“desenrolando” D(l) obtido usando o algoritmo de propagação para trás. Usandoesta técnica pode-se validar a implementação do algoritmo de propagação paratrás. Assim que se garanta a correcta implementação do algoritmo a validaçãonumérica aqui apresentada deve ser desligada já que é excessivamente lenta paraser usada em aprendizagem num problema real.

Valores de Θ iniciais

Seja usando a técnica de gradiente descendente ou uma das funções optimizadas,é necessário inicializar as matrizes Θ(l). Nas regressões lineares e logísticas osvalores θ têm sido inicializados a 0.Para as redes neuronais o uso desta abordagem não funciona. Repare-se quecada unidade de activação do segundo nível, a

(2)i , é calculada multiplicando os

valores de xi por uma linha diferente da matriz Θ(1). Ora, se todos os elementosde Θ(1) forem iguais a zero, os valores de activação a

(2)i serão iguais para todos

os valores de i. Do mesmo modo, ao implementar a propagação para trás, osvalores δ(1) também serão todos iguais. Isto levará a que todas as unidades decada camada tenham, sempre, os mesmos valores. Torna-se então, necessário,usar uma técnica que permita quebrar esta simetria.

A solução passa por inicializar cada valor Θ(l)i,j como sendo um valor aleatório no

intervalo [−ϵ, ϵ], ou seja, −ϵ ≤ Θ(l)i,j ≤ ϵ.

Em Octave, para inicializar uma matriz Θ(1) de dimensões 10× 11 pode-se usaro seguinte código3:

3Note que o ϵ usado para esta inicialização das matrizes Θ não é o mesmo ϵ usado na implemen-tação do algoritmo para o cálculo da aproximação numérica às derivadas parciais.

59

Page 66: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Theta1 = rand(10, 11) * (2 * INIT_EPSILON) - INIT_EPSILON;

O valor de ϵ deverá ser baixo, e habitualmente inferior a 1. Não se pretende queΘ(l) sejam inicializados a zero, mas a valores muito próximos de zero.

Resumo

Para a implementação de uma rede neuronal existem vários detalhes, que foramdiscutidos nas secções anteriores, e o processo de os juntar numa aplicação podeser algo complicado. Esta secção resume este processo como uma sequência depassos a realizar.

1. Preparar os dados para serem aplicados numa rede neuronal. Nomeada-mente,as classes que até agora eram números reais têm de ser convertidasem vectores.

2. Definir a arquitectura da rede neuronal, nomeadamente o número de ca-madas escondidas e o número de camadas a serem usadas.

3. Criar as matrizes Θ(l) com as dimensões correctas para cada camada inici-alizando os seus valores de forma aleatória.

4. Implementar o algoritmo de propagação para a frente e obter hΘ(x(i)) para cadaexemplo de treino x(i).

5. Implementar o cálculo da função custo J(Θ).

6. Implementar o algoritmo de propagação para trás para calcular as derivadasparciais ∂

∂Θ(l)i,j

J(Θ) para cada elemento Θ(l)i,j .

Embora seja possível implementar este algoritmo de forma vectorizada,habitualmente a abordagem inicial passa por um ciclo que itere por cadaum dos m exemplos de treino. Para cada um, executa-se a propagação para afrente e a propagação para trás, obtendo assim os valores de activação a(l) e ostermos δ(l) para l ∈ [2, L].

7. Implementar o algoritmo numérico para o cálculo aproximado das deriva-das parciais. Comparam-se os valores estimados com este algoritmo comos valores obtidos para as derivadas parciais usando a propagação para trás.Se os valores obtidos por ambos os métodos forem semelhantes então oalgoritmo de propagação para trás deverá estar correctamente implementado eeste cálculo numérico poderá ser removido. Caso contrário será necessárioverificar a implementação do algoritmo e corrigir algum erro existente.

8. Utilizar o algoritmo de propagação para trás na implementação do algoritmogradiente descendente ou usando uma das funções optimizadas como o fminuncde modo a obter os valores Θ(l) que minimizam J(Θ).A função J(Θ) é não convexa, o que significa que, teoricamente, é possí-vel que uma implementação de uma rede neuronal encontre um mínimolocal e não o mínimo global. Na prática qualquer um dos métodos resulta,habitualmente, em se encontrar o mínimo global ou, pelo menos, um bommínimo local.

60

Page 67: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Exercícios

1. Brevemente…

61

Page 68: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

62

Page 69: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Apêndice AÁlgebra Linear em OctaveEste apêndice é um resumo de álgebra linear necessária para compreender omaterial apresentado na sebenta. Ao mesmo tempo, é feita uma introdução ànotação do Octave (ou MatLab).

A.1 Matrizes e VectoresUma matriz é uma tabela de números, por exemplo:

A =

1304 2001534 3421143 1324352 954

B =[

3 4 2 9 32 9 3 0 2

]

A é uma matriz pertencente a IR4×2, e B é uma matriz pertencente a IR2×5. Asmatrizes serão sempre representadas por uma letra maiúscula. A dimensão deuma matriz é dada por um par de dimensões, habitualmente escrito como n×m,em que n corresponde ao número de linhas da matriz, e m ao número de colunas.

Cada elemento de uma matriz é identificado pela linha e coluna em que aparece.Assim, e genericamente, Ai,j corresponde ao elemento da matriz A que ocorre nalinha número i, e coluna número j. Assim, A1,2 = 200, e B2,4 = 0. Considera-seerro referir um elemento não existente de uma matriz (por exemplo, A2,3).

Um vector é uma matriz com apenas uma coluna (vector vertical) ou por uma sólinha (vector horizontal):

y =

31151232

63

Page 70: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

O vector y pertence a IR4. Os vectores são representados por letras minúsculas,e tal como as matrizes, é possível indicar o elemento de um vector usando a suaposição: y3 = 12.

Em Octave uma matriz é definida linha por linha, usando a seguinte sintaxe:

A = [1 2 3 4; 5 6 7 8]

Também é possível separar cada coluna por uma vírgula, como no exemplo se-guinte:

A = [1, 2, 3, 4; 5, 6, 7, 8]

A dimensão de uma matriz é obtida pela função size, que retorna um vector comas dimensões:

size(A)

É possível aceder a cada elemento da matriz colocando os índices da posiçãoentre parêntesis:

A(1,1)

Exercícios

1. Defina a matriz A =

1 2 34 5 67 8 9

e o vector b =[

2 4 6 8 10];

2. Obtenha os valores de A2,2 e b3;3. Verifique o tamanho da matriz A e do vector b;4. Altere o elemento A2,2 pelo valor 0;5. Troque os valores de b2 e b4;

A.2 Adição e Multiplicação EscalarSó é possível somar (ou subtrair) matrizes que tenham as mesmas dimensões. Oresultado de somar duas matrizes de tamanho m × n é uma outra matriz, detamanho m× n. A adição (ou subtracção) é feita elemento a elemento:

1 23 45 6

+

3 21 46 5

=

4 44 811 11

Em Octave a soma de duas matrizes A e B é obtida com:

64

Page 71: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

C = A + B

A multiplicação de uma matriz ou de um vector por um valor real resulta numamatriz ou um vector com as mesmas dimensões em que cada um dos elementosfoi multiplicada pelo valor real.

1 23 45 6

× 3 = 3×

1 23 45 6

=

3 69 1215 18

A multiplicação escalar, em Octave, pode ser realizada de duas formas distintas,ou usando a multiplicação simples, ou indicando que a multiplicação deve serrealizada a cada elemento:

C = A * 3B = A .* 3

Embora o resultado seja o mesmo, o operador .* realça que a multiplicaçãodeverá ser efectuada elemento a elemento (ponto a ponto).

É possível misturar estes operadores, usando a prioridade típica da aritmética:

142

+

005

− 3

02

/3 =

3126

+

005

− 1

023

=

212313

Exercícios

1. Defina as matrizes A =

2 34 16 3

e B =

1 01 00 1

;

2. Calcule A + B, 2×B e A + (2×A + 3×B)

A.3 MultiplicaçãoA multiplicação entre duas matrizes ou entre uma matriz e um vector só é possívelquando os seus tamanhos são adequados. Uma matriz com n colunas só pode sermultiplicada por uma matriz com n linhas. Do mesmo modo, uma matriz com ncolunas só pode ser multiplicada por um vector de tamanho n.

Consideremos a multiplicação entre

3 21 30 1

[ 32

]

65

Page 72: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

A primeira matriz é de tamanho 3×2, e o vector de tamanho 2 (ou 2×1). Comoo número de colunas da primeira matriz corresponde ao número de linhas dovector a multiplicação é possível, e o resultado será uma matriz com o númerode linhas da primeira matriz (ou seja, 3) e o número de colunas da segunda matriz(ou seja, 1): 3× 1.

Cada elemento da matriz resultado, na posição i, j, será resultado da soma damultiplicação de cada elemento da linha i da primeira matriz, com cada elementoda coluna j da segunda matriz:

3× 3 + 2× 23× 1 + 3× 20× 3 + 1× 2

=

1392

A multiplicação entre duas matrizes opera da mesma forma:

[1 3 24 0 1

] 1 30 15 2

Como o número de colunas da primeira matriz é igual ao número de linhas dasegunda, a multiplicação pode ser efectuada. O resultado será uma matriz como mesmo número de linhas que a primeira matriz, e o mesmo número de colunasda segunda matriz, ou seja 2× 2:

[1× 1 + 3× 0 + 2× 5 1× 3 + 3× 1 + 2× 24× 1 + 0× 0 + 1× 5 4× 3 + 0× 1 + 1× 2

]=[

11 109 14

]Em Octave a multiplicação de duas matrizes é obtida usando o operador de mul-tiplicação:

C = A * y

Considerando duas matrizes A e B, de tamanhos 3× 2 e 2× 4, respectivamente,é fácil verificar que é possível multiplicar A × B, obtendo-se uma matriz 3 × 4,mas não é possível multiplicar B × A, dado que o número de colunas de B nãocorresponde ao número de linhas de A.

Considerando duas matrizes quadradas, A e B, ambas de dimensões 2× 2, entãoé possível multiplicar A × B e B × A. Tenha-se em atenção no entanto, que amultiplicação de matrizes não preserva a propriedade comutativa, o que significaque, na generalidade, A×B ̸= B ×A.

Já a propriedade associativa é verificada. Para calcular A × B × C é possívelefectuar (A×B)× C ou A× (B × C).

A matriz identidade é uma matriz especial, quadrada, de tamanho n, em que oselementos nas posições i, j com i = j são o valor 1, e os restantes elementos são0:

66

Page 73: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

I4,4 =

1 0 0 00 1 0 00 0 1 00 0 0 1

A multiplicação da matriz identidade I por qualquer outra matriz A resulta namatriz A: I ×A = A = A× I.

Em Octave é possível criar uma matriz identidade usando a função eye:

C = eye(4)

Também é possível criar matrizes de zeros ou de uns usando as funções zeros eones respectivamente:

ones(2,4)zeros(3,2)

Exercícios

1. Considere as matrizes A =

2 41 33 5

e B =[

1 2 32 1 1

].

2. Calcule A×B e B ×A. Compare os tamanhos das matrizes resultado.3. Defina duas matrizes C e D de dimensão 2 × 2 com valores aleatórios de

modo a mostrar que C ×D ̸= D × C.4. Defina mais uma matriz E de dimensão 2× 2 e mostre que C ×D × E =

(C ×D)× E = C × (D × E)

A.4 Matriz Inversa e TranspostaO inverso de um número a é um número b = a−1 tal que a× b = a×a−1 = 1. Oinverso do número 1 é ele próprio (daí ser designado de identidade). O inversodo número 3 é 1

3 já que 3 × 13 = 1. Note-se que nem todo o número tem um

inverso: 0−1 é indefinido.

Do mesmo modo, nem todas as matrizes têm inversas. As matrizes que não têminversa são designadas de singular ou degeneradas. Se a matriz A de tamanho m×m(matriz quadrada) tem inversa, então A×A−1 = A−1 ×A = I.

[3 42 16

] [0.4 −0.1−0.05 0.075

]=[

1 00 1

]= I2×2

A matriz inversa pode ser calculada em Octave com a função inv:

inv( [3 4; 2 16 ])

67

Page 74: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Na verdade, sugere-se que se use a função pinv que é mais robusta, calculandouma matriz pseudo-inversa. Se A é pseudo-inversa de B então A × B está muitopróxima da matriz identidade (com uma margem de erro ϵ).

Para além das matrizes inversas, também são importantes as matrizes transpostas.Se uma matriz A tem tamanho n ×m, então a sua transposta AT tem tamanhom× n, em que Ai,j = AT

j,i

A =[

1 2 03 5 9

]AT =

1 32 50 9

A matriz transposta é obtida usando a seguinte sintaxe:

AT = A'

Exercícios

1. Mostre que a matriz inversa da matriz identidade é ele própria;2. Mostre que a matriz transposta da matriz identidade é ela própria;

68

Page 75: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Apêndice BIntrodução ao OctaveO Octave é uma implementação open-source da conhecida aplicação MatLab. OOctave é bastante poderoso, pelo que se sugere a leitura do manual de referência(mais de 800 páginas). Este apêndice é apenas uma referência rápida a algunscomandos úteis.

B.1 Interacção, Aritmética e LógicaA aritmética do Octave é semelhante a qualquer outra linguagem com caracte-rísticas matemáticas, com o +, -, * e / a realizarem as operações habituais, o ˆ aser usado para a potência e a função sqrt para a raiz quadrada.

Os testes lógicos são conseguidos usando os habituais operadores de comparação,como o <, <=, >, >=, de igualdade, == e de desigualdade ~=. De realçar que esteúltimo é diferente do usado pela maior parte das linguagens de programação.

Os operadores lógicos também são os habituais, com o && usado como conjun-ção lógica e o || como disjunção lógica. A função xor pode ser usada para adisjunção exclusiva.

A linguagem permite o uso de comentários, usando o carácter %.

O resultado de cada comando é impresso no terminal. Para o suprimir pode-secolocar um ponto e vírgula após o comando.

Finalmente, a atribuição de valores em variáveis é obtida usando o =, como namaioria das linguagens.

Para perceber o funcionamento do Octave sugere-se que experimente os seguin-tes comandos:

3 + 2 * (2 - 1) % 5ans % 5a = ans * 2 % 10b = ans * 2;c = (a == b) % 1d = (2 ~= 2) || (2 == 2) % 1help helphelp sqrt

69

Page 76: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Exercícios

1. Use o Octave para calcular os seguintes valores:

a. 5× (2 + 5)b. 232

c.√

9+122

2. Volte a calcular os valores da alínea anterior guardando os seus resultadosem três variáveis a, b e c.

3. Calcule a + b + c.4. Use o Octave para demonstrar num único comando que os três valores são

diferentes.5. Obtenha ajuda sobre a função fact e experimente-a.6. Obtenha ajuda sobre as funções disp e sprintf . Use-as para imprimir o

valor de π (pi) usando 6 casas decimais.7. Obtenha ajuda sobre a função PS1 e experimente-a.

B.2 Vectores e MatrizesPara além das funcionalidades sobre matrizes apresentadas no apêndice de Álge-bra Linear, existe uma sintaxe rica para a construção e manipulação de matrizes.

Assim como A(1,1) acede ao elemento na primeira linha e primeira coluna damatriz, é possível substituir um destes valores por :, para referir toda os elementos.Assim, A(1,:) permite obter todos os elementos da primeira linha, e A(:,2)permite obter todos os elementos da segunda coluna.

A = [1 2 3 ; 4 5 6 ; 7 8 9 ]A(1,:)A(:,2)

Curiosamente estes selectores também podem ser usados para alterar os valo-res da variável. Experimente o seguinte comando sobre a matriz anterior, paraalterar os valores da primeira linha da matriz.

A(1,:) = [10 20 30]

Uma funcionalidade por vezes útil é a vectorização de uma matriz, que trans-forma uma matriz de tamanho m× n num vector de tamanho s = m× n:

A(:)

Os selectores podem tornar-se ainda mais complicados. Por exemplo, A([1 3],:) permite obter uma sub-matriz de A com as linhas 1 e 3.

Para os vectores, é possível seleccionar um sub-vector usando a seguinte notação:

70

Page 77: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

v(1:10) % primeiros 10 elementos de v

É possível construir matrizes com base noutras existentes. Por exemplo, adicionaruma coluna a uma matriz pode ser feito com:

A = [ 1 2; 3 4; 5 6]A = [ A, [10; 20; 30]] % [1 2 10; 3 4 20; 5 6 30]

Esta mesma técnica pode ser usada para concatenar matrizes. Experimente:

A = [ 1 2; 3 4 ]B = [ 5 6; 7 8 ]C = [ A B ] % [ 1 2 5 6 ; 3 4 7 8 ]D = [ A ; B ] % [ 1 2 ; 3 4 ; 5 6 ; 7 8 ]

Também é possível construir matrizes de forma automática: por exemplo, obteruma matriz de determinado tamanho com valores aleatórios, apenas para tes-tar determinado algoritmo. Para isso existem duas funções, rand e randn, queretornam um vector ou uma matriz com as dimensões indicadas. A diferença éque a segunda função garante que os valores aleatórios seguem uma distribuiçãonormal, ou seja, têm média 0 e desvio padrão 1.

rand(4,1)randn(3,2)

Para vectores com valores não aleatórios, existe um construtor de progressõesaritméticas, indicando o valor inferior e superior e, opcionalmente, o incremento.

v = 1:6 % [1, 2, 3, 4, 5, 6]y = 1:0.2:2 % [1.0, 1.2, 1.4, 1.6, 1.8, 2.0]

Para calcular o tamanho de uma matriz ou de um vector usa-se a função size.No entanto, para obter o comprimento de um vector, ou a maior dimensão deuma matriz, usa-se a função length.

length(v) % 6size(v) % 1 6

Como já foi referido no apêndice em Álgebra Linear, é possível realizar operaçõeselemento a elemento numa matriz usando um ponto antes do operador:

v = [1 2 3 4]v.^ 2 % [ 1 4 9 16 ]1 ./ v % [ 1.00 0.50 0.33 0.25 ]

Esta operação elemento a elemento permite também que ambos os operandossejam matrizes, desde que com as mesmas dimensões:

71

Page 78: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

v = [1 2 ; 3 4]w = [3 4 ; 1 2]v .* w % [ 3 8 ; 3 8]

Os vectores1 podem ser representadas visualmente usando um histograma. Afunção hist recebe um vector e apresenta um histograma com um número basede 10 classes (figura B.1).

Figura B.1: Histograma com 10 categorias.

É possível definir o número de classes como segundo argumento (figura B.2):

hist(v, 50)

Exercícios

1. Crie o vector v =[

1 3 5 7 9 11]

usando o construtor de progres-sões aritméticas;

2. Crie dois vectores v e w com 10000 elementos usando as funções rand erandn. Desenhe os respectivos histogramas e compare o resultado obtido.

3. Crie uma matriz A, de tamanho 3 × 3 (manualmente ou usando uma dasfunções anteriores):

1Na verdade as matrizes também podem ser representadas por um histograma mas a sua legibi-lidade é mínima, tornando a sua relevância praticamente nula.

72

Page 79: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura B.2: Histograma com 50 categorias.

a. Obtenha a coluna do meio para um vector v;b. Obtenha a linha do meio para um vector w;c. Substitua a coluna do meio de A pelo vector w (relembre a possibili-

dade de transpor matrizes);d. Substitua a linha do meio de A pelo vector v;

4. Obtenha ajuda sobre a função magic e experimente-a.

B.3 Ficheiros de DadosNo Octave é possível usar um conjunto de comandos para manipular a directoriaactual. Assim, o comando pwd mostra a directoria actual, ls mostra o conteúdoda directoria actual, e o comando cd pode ser usado para a alterar. Estes coman-dos são úteis para que possamos seleccionar a pasta onde temos funções Octaveou ficheiros de dados.

Os ficheiros de dados em Octave são ficheiros de texto, tipicamente com a exten-são .dat ou .txt, em que cada linha do ficheiro é uma linha de uma matriz, eas colunas são separadas por espaços.

Para carregar um desses ficheiros de dados para uma matriz (ou um vector) usa-seo comando load:

load 'dados.dat'

73

Page 80: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

O resultado da leitura de um ficheiro de dados é uma matriz (ou vector) com omesmo nome do ficheiro (sem a extensão). A qualquer momento pode-se consul-tar quais as variáveis existentes usando o comando who ou o comando whos. Esteúltimo apresenta as variáveis em forma tabular juntamente com as suas dimen-sões, tamanho em bytes, e tipo de dados.

Para apagar variáveis usa-se o comando clear seguido do nome da variável.Quando usado de forma independente apaga todas as variáveis definidas.

clear dados % remove a variável dadosclear % remove todas as variáveis

Do mesmo modo que é possível carregar dados para o Octave também é possí-vel escrevê-los para um ficheiro. O comando save permite gravar em formatobinário, mais eficiente em termos de espaço ocupado e em velocidade de escritae leitura, ou em formato textual (semelhante ao descrito para leitura)

save ficheiro.mat A; % escreve A para o ficheirosave ficheiro.dat v -ascii; % escreve v para o ficheiro

Note que ao gravar em formato binário o ficheiro guardará informação sobre onome da matriz ou vector armazenados.

Exercícios

1. Crie uma matriz identidade de tamanho 10 e armazene-a num ficheiro, emformato textual. Use os comandos pwd, cd e ls para saber onde o ficheiroserá armazenado.

2. Altere o ficheiro usando um editor de texto, e volte a carregar a matriz;3. Experimente os comandos who, whos e clear

B.4 Funções ÚteisComo qualquer outra ferramenta de cálculo, o Octave inclui várias funções paradiferentes tipos de cálculos ou manipulação de dados.

Por exemplo, as funções log, exp e abs calculam respectivamente o logaritmo na-tural (loge(x)), exponenciação (ex) e valor absoluto. Estas funções podem seraplicadas em valores reais ou em matrizes, situação em que serão aplicadas acada um dos elementos.

v = 1:4log(v) % [ 0.00 0.69 1.10 1.39 ]exp(v) % [ 2.72 7.39 20.09 54.60 ]-v % [ -1 -2 -3 -4 ]abs(v) % [ 1 2 3 4 ]

74

Page 81: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

É possível arredondar os valores de uma matriz para o valor inteiro mais próximousando as funções ceil ou floor. A diferença é que a função ceil arredonda paracima, enquanto que a função floor arredonda para baixo.

v = [ 1.4 1.5 1.6 ]floor(v) % [ 1 1 1 ]ceil(v) % [ 2 2 2 ]

Os valores de um vector podem ser somados usando a função sum, ou multipli-cados, usando a função prod:

v = 1:5 % [ 1 2 3 4 5 ]sum(v) % 15prod(v) % 120

Estas funções também podem ser aplicadas a matrizes. Nesse caso será calculadaa soma ou o produtório de cada coluna:

A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ]sum(A) % [ 12 15 18 ]prod(A) % [ 28 80 162 ]sum(sum(A)) % 45prod(prod(A)) % 362880

As funções max e min calculam o maior ou o menor valor de um vector. Tal comoas duas funções anteriores, quando aplicadas a matrizes calculam o maior oumenor valor de cada coluna:

v = [ 3 6 4 9 ]max(v) % 9A = [ 7 8 6 ; 4 2 9 ; 1 5 3 ]min(A) % [ 1 2 3 ]

Estas duas funções também permitem obter, para além do maior ou menor valor,também a posição em que esse valor ocorre:

v = [ 3 6 4 9 ][val, idx] = max(v) % val = 9, idx = 4

O max e min também permitem comparar duas matrizes do mesmo tamanho,elemento a elemento, obtendo uma nova matriz, com os maiores ou menoreselementos:

A = [ 1 2 ; 3 4 ]B = [ 2 1 ; 4 3 ]B = max(A, B) % [ 2 2 ; 4 4 ]

75

Page 82: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Ao comparar um vector (ou matriz) com um valor real, obtemos um vector (oumatriz) com valores verdadeiros nas posições que satisfazem a comparação. Paraobter as posições desses elementos usa-se a função find.

v = [ 1 3 2 4 ]v > 2 % [ 0 1 0 1 ]find( v > 2 ) % [ 2 4 ]

Para obter os valores que satisfazem a condição basta usar:

v = [ 1 3 2 4 ]v(v > 2) % [ 3 4 ]

Finalmente, para usar a função find numa matriz temos de ter em consideraçãoque serão retornados dois vectores, um com as linhas e outro com as colunas emque aparecem os valores:

A = [ 1 5 9 ; 2 6 8 ; 3 4 7 ];[ r, c ] = find( A >= 7 );r % [ 1 2 3 ]c % [ 3 3 3 ]

Analisando o resultado, podemos ver que os valores maiores ou iguais que 7 estãonas posições A1,3 = 9; A2,3 = 8; A3,3 = 7.

Exercícios

1. Calcule o somatório total de uma matriz usando apenas uma vez a funçãosum;

2. Obtenha o menor valor numa matriz;3. Use a função magic para criar uma tabela 4× 4 e calcule o produtório de

todos os valores superiores a 10;

B.5 Traçado de GráficosO Octave permite desenhar gráficos de forma simples, bastando existir um con-junto de pontos que serão unidos. Estes pontos serão representados em dois vec-tores, do mesmo comprimento. Um dos vectores guarda as coordenadas X e ooutro vector as coordenadas Y .

Supondo que queremos representar a função seno, no intervalo [−π, pi], o pri-meiro passo corresponde a definir os valores de X para os quais vamos calcularpontos. Quantos mais pontos se escolherem neste intervalo, mais qualidade teráo gráfico, mas mais pesado será. Optando por escolher valores com um incre-mento de 0.1, ou seja, −3.14,−3.04,−2.94,−2.84, . . . , 3.14:

76

Page 83: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

x = -pi : 0.1 : pi;

O passo seguinte corresponde a calcular o valor de Y para esses pontos, invo-cando a função sin em cada valor, o que pode ser feito facilmente com:

y = sin(x);

Para desenhar o gráfico usa-se a função plot com os dois vectores:

plot( x , y );

Para desenhar também o coseno basta calcular os valores da função cos sobre osmesmos valores de x:

ycos = cos(x);plot( x , ycos );

Infelizmente ao executar este novo gráfico o inicial é descartado. Para se desenharas duas funções no mesmo gráfico usa-se o comando hold on:

plot( x, y );hold on;plot( x, ycos, 'r' );

Neste último exemplo na função plot usou-se um argumento extra para definir acor do traço. Outra vantagem do uso do comando hold on é ser possível adicionar,posteriormente, uma legenda, um título e título dos eixos:

xlabel('tempo');ylabel('valor');title('O meu grafico');legend('seno','coseno');

Para exportar o gráfico para uma imagem usa-se o comando print, e para fecharo gráfico actual, o comando close.

print -dpng 'grafico.png';close;

Em vez de fechar a janela o conteúdo da figura pode ser apagado com o comandoclf.

Por vezes é necessário comparar dois gráficos, abrindo duas janelas. Nestas situ-ações usa-se a função figure para alternar entre os vários gráficos abertos:

77

Page 84: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura B.3: Seno e Coseno com legenda e títulos.

figure(1);plot(x, y);figure(2);plot(x, ycos);

Em vez de criar duas janelas, também é possível desenhar dois gráficos (ou mais)numa única figura. O comando subplot permite definir uma grelha (um númerode linhas e de colunas) e seleccionar qual a célula onde desenhar. Veja-se o pró-ximo exemplo:

subplot(1, 2, 1); % divide em 1x2 e acede à 1ª célulaplot(x, y); % desenha gráfico na célulasubplot(1, 2, 2); % acede à segunda célulaplot(x, ycos); % desenha gráfico

Os limites dos eixos de um gráfico podem ser definidos usando a função axis,indicando os valores mínimos e máximos a mostrar em cada eixo:

axis([ -pi/2 pi/2 -1 1]);

Para além destes gráficos, e dos histogramas já referidos anteriormente, existea possibilidade de desenhar uma matriz como um mapa de calor, em que cadacor é representada com uma cor diferente. Veja-se o resultado dos seguintescomandos:

78

Page 85: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura B.4: Seno e Coseno em gráficos paralelos.

A = magic(5)imagesc(A)

Estes gráficos podem ser feitos em escala de cinzento (valores maiores a escuro,valores menores a claro), e é possível adicionar à imagem uma barra de legendaque ajude a perceber o valor para cada cor:

A = magic(5)imagesc(A)colorbarcolormap gray

Exercícios

1. Desenhe a função log no intervalo [0, 5];2. Sobreponha a função exp nesse mesmo intervalo com uma cor diferente;3. Altere o limite do eixo das coordenadas Y, colocando-o no limite [−10, 50];4. Crie uma nova imagem colocando os dois gráficos lado a lado. Crie um

título para cada um deles;5. Desenhe um mapa de cores para a matriz identidade de tamanho 10;

79

Page 86: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

Figura B.5: Mapa de cores.

B.6 Instruções de ControloA linguagem do Octave permite o uso de instruções de controlo como qualqueroutra linguagem de programação.

Os ciclos for usam uma variável que tomará os valores de um vector:

for i = [1, 3, 8, 9];i,

end;

Neste exemplo tenha-se atenção ao uso da vírgula e dos pontos e vírgula: como jáfoi dito antes, quando uma instrução termina em ponto e vírgula, o seu resultadonão é impresso. Como neste exemplo se pretendia que os valores de i fossemimpressos não se poderia usar o ponto e vírgula. Para resolver esse problema oOctave usa a vírgula como sinal de que se seguirá uma outra instrução, mas quese pretende que o resultado seja impresso.

Com as funcionalidades do Octave para construir vectores de forma compacta,os ciclos podem ser definidos de uma forma mais natural:

for i = 1:5;v(i) = i^2;

80

Page 87: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

end;

v % [ 1 4 9 16 25 ]

Os ciclos while são ainda mais parecidos com os das outras linguagens de progra-mação:

i = 1;while i <= 5;

v(i) = v(i) * 2;i = i + 1;

end;

v % [ 2 8 18 32 50 ]

É possível forçar um ciclo a terminar com o comando break:

i = 1;while true;

v(i) = 10;if i == 3;

break;end;i = i + 1;

end;

v % [ 10 10 10 32 50 ]

Neste exemplo também foi introduzido o if que tem a estrutura esperada. Estaestrutura condicional também permite o uso de elseif e de else. Tenha-se em aten-ção à não necessidade de vírgula ou ponto e vírgula após o else:

a = 2;

if (a == 1);disp("Valor um!");

elseif (a == 2);disp("Valor dois!");

elsedisp("Nem um nem dois!");

end;

Exercícios

1. Imprima a tabuada para determinado valor v;2. Verifique se determinado valor a é par2, imprimindo uma mensagem o valor

é par ou o valor é impar.

2Para calcular o resto da divisão inteira use a função rem.

81

Page 88: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

B.7 FunçõesO Octave tem uma forma peculiar de definir funções. Cada função deve sercriada num ficheiro separado, com o mesmo nome que a função, e extensão .m.Estes ficheiros devem estar na directoria actual, ou então deverá ser indicado aoOctave em que pastas deverá procurar por funções3.

Repare que ao pedir ajuda para algumas funções da biblioteca Octave é apre-sentado o caminho para o ficheiro onde essa função está definida. Experimentepedir ajuda para as funções fact ou magic. O Octave indicará ‘magic’ is a function fromthe file….

Consideremos um exemplo simples: desenvolver uma função que calcule o qua-drado de um número, de nome quadrado. O primeiro passo corresponde a criar oficheiro quadrado.m, e escrever o código da função:

function r = quadrado(x)r = x * x;

Repare que a primeira linha é a assinatura da função. Por um lado indica o seunome (que tem de coincidir com o nome do ficheiro), os argumentos e o valor queé retornado. No corpo da função basta colocar na variável escolhida o resultadoda computação.

Em alguns casos é necessário que a função que estamos a definir retorne não um,mas dois (ou mais) valores. Supondo que pretendemos uma função que calcule,ao memso tempo, o quadrado e o cubo de um número:

function [ q , c ] = quadradocubo(x)q = x * x;c = q * x;

Na verdade a função continua a retornar num único elemento: um vector comdois valores. Para invocar esta função usa-se:

[ a , b ] = quadradocubo(3);a % 9b % 27

Para além das funções convencionais também é possível definir λ-expressions emOctave. As λ-expressions são funções definidas como uma expressão que operanum conjunto de variáveis. O resultado da função corresponde ao resultado deavaliar essa expressão para um determinado conjunto de valores.

Estas λ-expressions são especialmente úteis quando é necessário passar uma funçãocomo parâmetro para uma função de ordem superior.

Por exemplo, a função cubo pode ser definida como uma λ-expressions do seguintemodo:

3Para adicionar uma pasta onde o Octave deve procurar funções use o comando addpath.

82

Page 89: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

cubo = @(x) x * x * x;cubo(2) % 8

A primeira linha define a λ-expression que recebe um parâmetro x e calcula o valor.

Exercícios

1. Implemente os exercícios da secção anterior como funções;2. Implemente a função factorial;

83

Page 90: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

84

Page 91: Inteligência Artificial - eremita.di.uminho.pteremita.di.uminho.pt/~ambs/ia.pdf · Um sistema de aprendizagem poderá analisar as notícias, detectar semelhanças e agrupar as notícias

ReferênciasMallah, Charles, James Cope, and and James Orwell. 2013. “Plant Leaf Classi-fication Using Probabilistic Integration of Shape, Texture and Margin Features.”In Signal Processing, Pattern Recognition and Applications SPPRA’2013.

Spaeth, Helmut. 1974. Algorithmen Fuer Multivariable Ausgleichsmodelle. Oldenbourge.

Weisberg, S. 1980. Applied Linear Regression. Wiley.

Wood, F. S. 1973. “The Use of Individual Effects and Residuals in Fitting Equa-tions to Data.” Technometrics 15: 677–95.

85