Você está na página 1de 5

Aprendizagem de Mquina Lista de Exerccios 1 Felipe de Souza Araujo Comentrios gerais: A tcnica implementada para avaliar o modelo foi

a Leave-one-out, a fim de melhor estimar o desempenho do classificador se treinado com todos os dados disponveis. Todos os dados devem estar contidos em apenas um arquivo com a base de dados completa. Para cada instncia, calculada a distncia dele a todos as outras instncias do conjunto (que formam o conjunto de treinamento). A fim de simplificar a leitura automtica das bases de dados, em todas as bases de dados, caracteres ',' foram substitudos por caracteres espao ou caracteres tabulao, atributos categricos nominais que seriam utilizados no processo foram transformados numa escala 1..N. As bases de dados a serem utilizadas devem possuir atributos apenas numricos, sem valores faltantes, e com as colunas de atributos separadas por espaos em branco. Mais detalhes, e outras informaes so descritas na sesso de cada base de dados. 1) O k-NN foi implementado como uma funo. A assinatura da funo descrita a seguir:
function [err, t] = l1q1(filename, ninstances, maxk, nclasses, classes) ncolumns, fstin, lstin, fstout, lstout,

Onde: filename o caminho para o arquivo que contm a base de dados; ncolumns o nmero total de colunas contidas no arquivo com a base de dados; fstin, lstin so, respectivamente, os nmeros da primeira e da ltima coluna com atributos de entrada, apenas so aceitos intervalos ininterruptos; fstout, lstout so o nmero da coluna com o atributo de sada (classe); ninstances a quantidade de instncias presente no arquivo; maxk o valor mximo do k que se quer testar, sero testados de 1 at este valor; nclasses a quantidade de classes existentes; classes um array com os valores possveis das classes, um array de tamanho 1 por nclasses. Abaixo, segue um pseudo-cdigo do classificador implementado: para cada atributo a de entrada: range(a) = valor-max(a) valor-mn(a) //range ser utilizado para normalizao de atributos para cada instncia te da base: para cada instncia tr != te da base: dif = vetor(te) vetor(tr); //calcula a normdif = dif / range; //normaliza a diferena dist(te, tr) = sqrt( sum ( normdif ) ) knn = mink(dist(te), k) //guarda as k instncias diferentes de te com menor distncia de te O vetor dist(te) usado no caso do k-NN ponderado. Aps tomar-se as k instncias mais prximas, verifica-se a classe com mais instncias dentro desse conjunto (cada instncia pertencente classe contribui com 1, e as no pertencentes contribuem com 0). No caso do knn ponderado, antes de se verificar a classe predominante, aqueles valores 1 e 0 so divididos por dist(te, tr).

Avaliaes: Base de dados: wine.data Funo: l1q1('q1db/wine.data', 14, 2, 14, 1, 1, 178, 15, 3, [1 2 3]) Como dito anteriormente, para ser utilizada no classificador, caracteres ',' foram substitudos por espaos. Erro:
K K K K K K K K K K K K K K K = = = = = = = = = = = = = = = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 No Ponderado Ponderado 5,06% 5,06% 4,49% 5,06% 3,37% 3,37% 4,49% 3,93% 5,06% 5,06% 4,49% 4,49% 3,37% 3,37% 4,49% 4,49% 4,49% 4,49% 3,37% 3,37% 3,37% 3,37% 4,49% 3,93% 2,25% 2,25% 2,81% 2,25% 2,25% 2,25%

Tempo: 0,9516s

Base de dados: wdbc.data Funo: l1q1('q1db/wdbc.data', 32, 3, 32, 2, 2, 569, 15, 2, [1 2]) Alm das ','s, as classes 'M' foram substitudas por '1' e as classes 'B' foram substitudas por '2'. Erro:
K K K K K K K K K K K K K K K = = = = = = = = = = = = = = = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 No Ponderado Ponderado 4,75% 4,75% 5,10% 4,75% 2,99% 2,99% 3,51% 2,81% 3,34% 3,34% 3,34% 3,34% 2,99% 2,99% 2,81% 2,99% 2,99% 2,99% 2,81% 2,64% 3,16% 2,99% 2,99% 2,81% 2,64% 2,64% 2,64% 2,64% 2,46% 2,28%

Tempo: 4,3213s

2)
function [err, t] = l1q2(filename, ncolumns, fstin, lstin, maxvalcat, fstout, lstout, ninstances, maxk, nclasses, classes)

maxvalcat o maior valor do maior conjunto de valores de todos atributos categricos. Os valores dos atributos podem variar entre 1 e maxvalcat. Avaliaes: Base: car.data Funo: l1q2('q2db/car.data', 7, 1, 6, 4, 7, 7, 1728, 15, 4, [1 2 3 4]) Pr-processamento: ',' -> ' ' 'vhigh' -> '1' 'high' -> '2' 'med' -> '3' 'low' -> '4' '5more' -> '1' 'more' -> '1' 'small' -> '1' 'big' -> '2' 'unacc' -> '1' 'acc' -> '2' 'vgood' -> '4' 'good' -> '3' Erro:
K K K K K K K K K K K K K K K = = = = = = = = = = = = = = = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 No Ponderado Ponderado 3,01% 3,01% 6,02% 3,01% 2,60% 2,49% 3,07% 2,37% 3,30% 3,30% 3,41% 3,30% 3,82% 3,82% 3,41% 3,30% 3,30% 3,30% 2,89% 2,89% 3,82% 3,70% 3,24% 3,07% 3,94% 3,70% 4,11% 3,76% 4,11% 3,82%

Tempo: 6,3648s Base: SPECT.data //.train e .test unidos em um .data Funo: l1q2('q2db/SPECT.data', 23, 2, 23, 2, 1, 1, 267, 15, 2, [2 1]) Pr-processamento: ',' ' ' '0' -> '2' Erro:

K K K K K K K K K K K K K K K

= = = = = = = = = = = = = = =

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

No Ponderado Ponderado 25,47% 25,47% 31,09% 26,97% 22,85% 23,60% 24,72% 27,72% 21,35% 19,10% 26,97% 20,22% 22,85% 18,73% 18,73% 19,85% 18,35% 19,48% 18,35% 20,22% 17,60% 19,48% 19,85% 19,85% 18,35% 20,22% 17,98% 20,22% 16,48% 19,85%

Tempo: 0,9828s 3) function [err, t] = l1q3(filename, ncolumns, fstin, lstin, maxvalcat, fstout,
lstout, ninstances, maxk, nclasses, classes, catAttribs)

catAttribs um array que indica quais os atributos categricos. Avaliaes: Funo: l1q3('q3db/dermatology.data', 35, 1, 34, 4, 35, 35, 366, 15, 6, 1:6,
1:33)

Pr-processamento: ',' ' ' '0' '4' exceto no atributo 'age' Valores faltantes substitudos pela mdia do atributo numrico. Erro:
K K K K K K K K K K K K K K K = = = = = = = = = = = = = = = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 No Ponderado Ponderado 1,91% 1,91% 2,19% 1,91% 1,91% 1,91% 2,19% 1,91% 1,37% 1,37% 1,64% 1,64% 1,37% 1,37% 1,09% 1,37% 1,64% 1,64% 1,09% 1,37% 1,91% 1,91% 1,64% 1,91% 1,91% 1,64% 1,09% 1,64% 1,37% 1,37%

Tempo: 32,6042 Funo: l1q3('q3db/zoo.data', 17, 1, 16, 2, 17, 17, 101, 15, 7, 1:7, [1:12
14:16])

Pr-processamento: ',' ' ' '0' '2' exceto no atributo legs

primeira coluna excluda (id nico nominal) Erro:


K K K K K K K K K K K K K K K = = = = = = = = = = = = = = = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 No Ponderado Ponderado 3,96% 3,96% 5,94% 3,96% 7,92% 3,96% 5,94% 3,96% 8,91% 4,95% 9,90% 4,95% 10,89% 4,95% 10,89% 3,96% 10,89% 3,96% 10,89% 3,96% 12,87% 3,96% 12,87% 3,96% 10,89% 3,96% 10,89% 4,95% 12,87% 4,95%

Tempo: 1,6068 4) Os experimentos confirmaram a tese de que no h um valor de K que satisfaa todos os problemas, nem mesmo o classificador ser ponderado ou no pode ser decidido de ante-mo. Devido ao seu princpio bsico, o processo de treinamento do classificador k-NN linear, pois consiste apenas em fazer a leitura do conjunto de treinamento. Uma consulta no k-NN custa caro, principalmente com a tcnica de avaliao de desempenho implementada, o leave-one-out, que testa cada instncia com o conjunto de treinamento sendo todos os outros dados, ou seja, O(N)*comparaes entre instncias. O valor de k no influencia nem no tempo de treinamento nem no tempo de teste, pelo menos no no limite superior, visto que aumentar o k aumenta algumas operaes, que custam O(k), logo, podemos selecion-lo de acordo com o desempenho de classificao. A saber, as melhores combinaes obtidas nos experimentos foram: Base: wine.data k = 13 ou k = 15 Ponderado ou no ponderado Base: wdbc.data k = 15 Ponderado Base: car.data k=3 Ponderado Base: SPECT.data Estrutura de testes insuficiente, mas se fssemos nos basear nela para selecionar os parmetros: k = 15 No ponderado Base: dermatology.data k = 10 ou k = 14 No ponderado Base: zoo.data k = 1 e no ponderado ou k entre 1 a 4 ou entre 8 a 13 e ponderado

Você também pode gostar