You are on page 1of 31

Aprendizagem de Mquina

A rea de aprendizagem de mquina estuda como construir programas computacionais que se melhoram
automaticamente com a experincia.
Machine Learning
o Computational Learning Theory (PAC Learning pro!a!ly approximately correct learning"
o #eural #et$or%s
o &ayesian Learning
o Algoritmos 'en(ticos
o )nstance*&ased Learning (%*nearest neigh!or learning"
o +ecision tree
o ,andom tree
o Ada!oost
o -upport .ector Machine
o /stimation o0 hypothesis accuracy
+e0.1 +iz*se que um programa computacional aprende com a experincia / no que diz respeito a uma classe de tare0as
T e medida de desempenho P2 se o seu desempenho nas tare0as em T2 medida por P2 aumenta com a experincia /.
/xemplo1
3" 4ogo de dama1
Tare0a T1 5ogar dama
Medida de desempenho P1 porcentagem de 5ogos ganhos.
/xperincia de treinamento /1 5ogar partidas.
6" ,econhecer letras caligr0icas1
Tare0a T1 reconhecer e classi0icar pala7ras manuscritas em imagem.
Medida de desempenho P1 porcentagem de pala7ras corretamente classi0icadas.
/xperincia de treinamento /1 uma !ase de dados de pala7ras manuscritas com classi0ica89o.
:" Aprender ;*operador
Tare0a T1 construir um ;*operador desconhecido

<
.
Medida de desempenho P1 di0eren8a entre as sa=das geradas pelo operador ideal

e pelo operador
constru=do

< .
/xperincia de treinamento /1 imagens exemplos.
Aplica8>es1
/mula89o de operadores desconhecidos (exemplo1 detectar extremidades2 !ordas2 esquinas"
,ecohecer textura.
,econhecer letras e 0ormas.
Aumentar resolu89o das imagens !inrias e hal0tone.
?al0tone in7erso.
@" +istinguir entre pedestre e carro.
A" +etectar rostos humanos.
3
Aprendizagem super7isionada B Aprendizagem n9o*super7isionada
instant*!ased learning outros tipos
-implesmente armazena exemplos de treinamento
(m(todo Cpregui8osoD"
ConstrEi explicitamente a 0un89o*o!5eti7a
%*nearest neigh!or learning
locally $eighted regression
radial !asis 0unctions
neural net$or%
algoritmos gen(ticos
r7ore de decis9o
ConstrEi somente aproxima89o local de 0un89o*
o!5eti7a. #unca constrEi toda a 0un89o*o!5eti7a.
.antagem1 0un89o pode ser complexa
+es7antagem1 custo de classi0icar no7as instFncias
pode ser alta
&i!liogra0ia1
Tom. M Mitchell2 Machine Learning2 ;C&BMc'ra$*?ill2 3GGH
I,iJAK ?. L. Mim2 C&inary ?al0tone )mage ,esolution )ncreasing !y +ecision*Tree
Learning2D )/// Trans. on )mage Processing2 7ol. 3:2 no. N2 pp. 33:O*33@O2 Aug. 6JJ@.
I,iJ:K ?. L. Mim2 C&inary Pperator +esign !y %*#earest #eigh!or Learning $ith
Application to )mage ,esolution )ncreasing2D )nt. 4. )maging -ystems2 7ol. 332 no. A2 pp.
::3*::G2 6JJJ.
ICi33K ?. L. Mim and ,. L. Queiroz2 C)n7erse ?al0toning !y +ecision Tree Learning2D in
Proc. IEEE Int. Conf. on Image Processing2 (&arcelona2 -pain"2 7ol. 62 pp. G3:*G3O2 6JJ:.
tes6.pd0 (Pro5eto de Pperadores pela Aprendizagem * cap=tulo da tese de li7re docncia"
6
/mula89o de operadores pela aprendizagem de mquina1
P3 (36J3OJ" /ros9o ::
P6 (36J3OJ" /ros9o :: (emula89o erro zero"
P3 a!ertura 66
P3 a!ertura
P6 a!ertura 66
P6 a!ertura emulado (erro zero"
:
+etec89o de pontas
ax ay
qx qp
mle cutb ax.bmp ay.bmp c:\proeikon\ee\e33.ges filtro.ctb
mle appb qx.bmp filtro.ctb qp.bmp
@
,econhecimento de letras
ax ay
qx qy qpHH
#ota1 #9o 0oi usado Pccam. Runciona !em usando 5anelas HxH.
/xemplo gr0ico de r7ore de decis9o para construir operadores !inrios1
/xemplos S T IJJJ2 JK2 IJJJ2 JK2 IJJJ2 3K2 IJJ32 3K2 I3JJ2 3K2 I3JJ2 3K2 IJ332 3K2 I3332 JK U

A
Rei5>es
ax ay
qx (03.5pg"
qp
mle cutc ax.tga ay.tga \proeikon\ee\e11.ces filtro.ctc
mle appc f1.jpg filtro.ctc p1.tga
mle appc f2.jpg filtro.ctc p2.tga
mle appc f3.jpg filtro.ctc p3.tga
Le7a 6 segundos para aprender e J2A segundos para aplicar (usando %d*tree sem !ac%trac%ing".
O
// pos-2012 fora-bruta
#include <cekeikon.h>
int diferenca(CO c1! CO c2"
# return abs(c1$0%-c2$0%"&
abs(c1$1%-c2$1%"&
abs(c1$2%-c2$2%"'
(
int )ain("
# *at+<CO> a,' le(a,!-a,.t.a-"'
*at+<CO> a/' le(a/!-a/.t.a-"'
*at+<CO> 0,' le(0,!-f1.2p.-"'
*at+<CO> 0p(0,.ro3s!0,.cols"'
for (int l40' l<0p.ro3s' l&&"
for (int c40' c<0p.cols' c&&" #
CO cor40,(l!c"'
int o)enor40,5ffffff'
CO o)elhor'
for (int l240' l2<a,.ro3s' l2&&"
for (int c240' c2<a,.cols' c2&&" #
if (diferenca(cor!a,(l2!c2""<o)enor" #
o)enor4diferenca(cor!a,(l2!c2""'
o)elhor4a/(l2!c2"'
(
(
0p(l!c"4o)elhor'
(
i)p(0p!-0p1.pp)-"'
(
//.rad2016
#include <cekeikon.h>
double distancia(CO a! CO b"
# return s0rt(ele72(a$0%-b$0%"&ele72(a$1%-b$1%"&ele72(a$2%-b$2%""'
(
int )ain("
# *at+<CO> a,' le(a,!-a,.t.a-"'
*at+<89> a/' le(a/!-a/.t.a-"'
*at+<CO> 0,' le(0,!-f1.2p.-"'
*at+<89> 0p(0,.ro3s!0,.cols"'
for (int l40' l<0,.ro3s' l&&" #
cout << l << endl'
for (int c40' c<0,.cols' c&&" #
CO busca40,(l!c"'
double )indist41e10' int )inl! )inc'
for (int l240' l2<a,.ro3s' l2&&"
for (int c240' c2<a,.cols' c2&&" #
double d4distancia(busca!a,(l2!c2""'
if (d<)indist" # )indist4d' )inl4l2' )inc4c2' (
(
0p(l!c"4a/()inl!)inc"'
(
(
i)p(0p!-f1.pn.-"'
(
Le7aria aproximadamente AJJ segundos (N minutos". Ror8a !ruta.
H
//pos-2012 usando :la;;
#include <cekeikon.h>
int )ain("
# *at+<CO> a,' le(a,!-a,.t.a-"'
*at+<CO> a/' le(a/!-a/.t.a-"'
*at+<CO> 0,' le(0,!-f1.2p.-"'
if (a,.si<e("=4a/.si<e("" erro(->rro di)ensao-"'
*at+<CO> 0p(0,.ro3s!0,.cols"'
*at+<:?@> features(a,.ro3sAa,.cols!6"'
*at+<:?@> saidas(a,.ro3sAa,.cols!1"'
int i40'
for (int l40' l<a,.ro3s' l&&"
for (int c40' c<a,.cols' c&&" #
features(i!0"4a,(l!c"$0%'
features(i!1"4a,(l!c"$1%'
features(i!2"4a,(l!c"$2%'
saidas(i!0"4a/(l!c"$0%'
i4i&1'
(
flannBBCnde, ind(features!flannBBDE@reeCnde,Fara)s(1""'
// usa 1 ar7ores
7ector<:?@> 0uer/(6"'
7ector<int> indices(1"'
7ector<:?@> dists(1"'
89 r'
for (int l40' l<0p.ro3s' l&&"
for (int c40' c<0p.cols' c&&" #
0uer/$0%40,(l!c"$0%'
0uer/$1%40,(l!c"$1%'
0uer/$2%40,(l!c"$2%'
ind.knnGearch(0uer/!indices!dists!1!flannBBGearchFara)s(1H""'
// co) backtrackin.
r489(saidas(indices$0%!0""'
0p(l!c"4CO(r!r!r"'
(
i)p(0p!-0p-kd1.pp)-"'
(
Le7a G2OO segundos usando Rla## com @ r7ores e !ac%trac%ing.
N
//.rad-2016 usando :la;;
#include <cekeikon.h>
int )ain("
# *at+<CO> a,' le(a,!-a,.t.a-"'
*at+<CO> a/' le(a/!-a/.t.a-"'
if (a,.si<e("=4a/.si<e("" erro(->rro di)ensao-"'
*at+<CO> 0,' le(0,!-f1.2p.-"'
*at+<CO> 0p(0,.ro3s!0,.cols"'
*at+<:?@> features(a,.ro3sAa,.cols!6"'
*at+<:?@> saidas(a,.ro3sAa,.cols!1"'
int i40'
for (int l40' l<a,.ro3s' l&&"
for (int c40' c<a,.cols' c&&" #
features(i!0"4a,(l!c"$0%'
features(i!1"4a,(l!c"$1%'
features(i!2"4a,(l!c"$2%'
saidas(i!0"4a/(l!c"$0%'
i4i&1'
(
flannBBCnde, ind(features!flannBBDE@reeCnde,Fara)s(1""'
// usa 1 ar7ore
7ector<:?@> 0uer/(6"'
7ector<int> indices(1"'
7ector<:?@> dists(1"'
89 r'
for (int l40' l<0p.ro3s' l&&"
for (int c40' c<0p.cols' c&&" #
0uer/$0%40,(l!c"$0%'
0uer/$1%40,(l!c"$1%'
0uer/$2%40,(l!c"$2%'
ind.knnGearch(0uer/!indices!dists!1!flannBBGearchFara)s(1""'
// se) backtrackin.
r489(saidas(indices$0%!0""'
0p(l!c"4CO(r!r!r"'
(
i)p(0p!-0p-kd1.pp)-"'
(
Le7a A23A segundos usando 3 r7ore e sem 0azer !ac%trac%ing.
G
Cuttree ( a minha implementa89o de %d*tree (3 r7ore e sem !ac%trac%ing". Ptimizada para
7elocidade.
//Cuttree.cpp
#include <cekeikon.h>
int )ain("
# *at+<CO> a,' le(a,!-a,.t.a-"'
*at+<CO> a/' le(a/!-a/.t.a-"'
if (a,.si<e("=4a/.si<e(""
erro(->rroB Ei)ensoes diferentes-"'
*at+<CO> 0,' le(0,!-f1.2p.-"'
*at+<CO> 0p(0,.ro3s!0,.cols"'
*at+<89> features(a,.ro3sAa,.cols!6"'
*at+<89> saidas(a,.ro3sAa,.cols!1"'
int i40'
for (int l40' l<a,.ro3s' l&&"
for (int c40' c<a,.cols' c&&" #
features(i!0"4a,(l!c"$0%'
features(i!1"4a,(l!c"$1%'
features(i!2"4a,(l!c"$2%'
saidas(i!0"4a/(l!c"$0%'
i4i&1'
(
CI@@>> cut'
7ector<int> ee#0!1!2('
cut.train(features!saidas!ee"'
*at+<89> 0uer/(1!6"'
89 r'
for (int l40' l<0p.ro3s' l&&"
for (int c40' c<0p.cols' c&&" #
0uer/(0"40,(l!c"$0%'
0uer/(1"40,(l!c"$1%'
0uer/(2"40,(l!c"$2%'
r4cut.predict(0uer/"'
0p(l!c"4CO(r!r!r"'
(
i)p(0p!-0p-cut.pp)-"'
(
Le7a J26@ segundos.
3J
#ormal &ayes classi0ier1 CThis simple classi0ication model assumes that 0eature 7ectors 0rom each
class are normally distri!uted (though2 not necessarily independently distri!uted". -o2 the $hole data
distri!ution 0unction is assumed to !e a 'aussian mixture2 one component per class. Vsing the
training data the algorithm estimates mean 7ectors and co7ariance matrices 0or e7ery class2 and then
it uses them 0or predictionD.
//ba/es.cpp
#include <cekeikon.h>
int )ain("
# *at+<CO> a,' le(a,!-a,.t.a-"'
*at+<CO> a/' le(a/!-a/.t.a-"'
if (a,.si<e("=4a/.si<e(""
erro(->rroB Ei)ensoes diferentes-"'
*at+<CO> 0,' le(0,!-f1.2p.-"'
*at+<CO> 0p(0,.ro3s!0,.cols"'
*at+<:?@> features(a,.ro3sAa,.cols!6"'
*at+<:?@> saidas(a,.ro3sAa,.cols!1"'
int i40'
for (int l40' l<a,.ro3s' l&&"
for (int c40' c<a,.cols' c&&" #
features(i!0"4a,(l!c"$0%'
features(i!1"4a,(l!c"$1%'
features(i!2"4a,(l!c"$2%'
saidas(i!0"4a/(l!c"$0%'
i4i&1'
(
C7;or)alJa/esClassifier ba'
ba.train(features!saidas"'
*at+<:?@> 0uer/(1!6"'
:?@ result'
for (int l40' l<0p.ro3s' l&&"
for (int c40' c<0p.cols' c&&" #
0uer/(0"40,(l!c"$0%'
0uer/(1"40,(l!c"$1%'
0uer/(2"40,(l!c"$2%'
result4ba.predict(0uer/"'
int r4result'
0p(l!c"4CO(r!r!r"'
(
i)p(0p!-0p-ba/es.pp)-"'
(
Frocessa)ento le7a 1!1Hs
33
0p-kd1 (K!5s" 0p-kd1 (L!2s"
0p-cut (0!21s" 0p-ba/es (1!1Hs"
36
Textura
ax ay3 ay6
qx qp3 qp6
qx qp3 qp6
3:
ax ay
ap qx
qy qp
#ota1 P 0iltro 0oi aprendido nas !andas ,'&.
3@
Woom de hal0tone1
&aixar e rodar os exemplos em1
http1BB$$$.lps.usp.!rBXhaeBso0t$areBhal0zoomBindex.html
Halftone images generated by clustered-dot ordered ditering.
ax (amostra de treino de entrada :JJ dpi" ay (amostra de treino de sa=da OJJ dpi"
qx (imagem a processar :JJ dpi" qp (imagem processada OJJ dpi"
qy (sa=da ideal OJJ dpi"
3A
Halftone images generated by H! "aser#et $ri%er option &coarse dot.&
ax (amostra de treino de entrada :JJ dpi" ay (amostra de treino de sa=da OJJ dpi"
qx (imagem a processar :JJ dpi" qp (imagem processada OJJ dpi"
qy (sa=da ideal OJJ dpi"
3O
?al0tone in7erso1
&aixar e rodar os exemplos em1
http1BB$$$.lps.usp.!rBXhaeBso0t$areBin7hal0Bindex.html
,esultados o!tidos1
distg aqy.tga aqpoclus.tga m 'clustered-dot ordered ditering(
)*+ 'max,1--.(...................: 1./0.
!123 considering igest,244.....: 25./556 d7
distg aqy.tga aqpodisp.tga m 'dispersed-dot ordered ditering(
)*+ 'max,1--.(...................: 1.51.
!123 considering igest,244.....: 3-.2262 d7
distg aqy.tga aqpoerrd.tga m 'error diffusion(
)*+ 'max,1--.(...................: 1.44.
!123 considering igest,244.....: 31.5682 d7
distg aqy.tga aqpopcd.tga m 'H! laserjet coarse-dot(
)*+ 'max,1--.(...................: 2.-8.
!123 considering igest,244.....: 28.824- d7
/stes resultados s9o melhores do que os o!tidos pelos 0iltros passa*!aixa.
3H
entrada clustered*dot imagem processada de clustered*dot
entrada dispersed*dot imagem processada de dispersed*dot
entrada di0us9o de erro imagem processada de di0us9o de erro
entrada ?P laser5et coarse*dot imagem processada de ?P laser5et coarse*dot
Ps treinos s9o 0eitos com outros con5untos de imagens.
3N
Classificar um problema com 10 features, quando somente os features 0 e 1 so relevantes.
Teste 1
A sa=da depende apenas de 0J (linhas" e 03 (colunas". Ps 0eatures 06...0G s9o irrele7antes. Raremos
treino com 6JJ amostras geradas aleatoriamente e testes com outras 6JJ amostras. Cada 0eature (
um nYmero aleatErio entre J e GG.
!rvore de deciso "01#
99dtree.cpp
:include ;cekeikon.<
int nfeatures,1-=
int ntreinos,2--=
int ntestes,2--=
int classe'float f-> float f1(
? if 'f-@f1;1--( return -1=
else return @1=
A
%oid geraBreino')atC;float<D features> )atC;float<D saidas(
? srand'8(=
features.create'ntreinos>nfeatures(=
saidas.create'ntreinos>1(=
for 'int l,-= l;ntreinos= l@@( ?
for 'int c,-= c;nfeatures= c@@(
features'l>c(,rand'(.1--=
saidas'l(,classe'features'l>-(>features'l>1((=
A
A
int main'(
? )atC;float< features> saidas=
geraBreino'features>saidas(=
E%$Bree ind=
ind.train'features>EFC3GHC1*)!"+>saidas(=
srand'5(=
int nacertos,-=
)atC;float< query'1>nfeatures(=
for 'int l,-= l;ntestes= l@@( ?
for 'int c,-= c;nfeatures= c@@( query'c(,rand'(.1--=
int predicao,c%3ound'ind.predict'query(-<%alue(=
int correto , classe'query'-(>query'1((=
if 'predicao,,correto( nacertos@@=
A
printf'&*certos,.0.2f..\n&>1--.-Inacertos9ntestes(=
A
3G
AcertosS GJ.JJZ
6J
$uebrando dtree em treino e predi%o
A r7ore resultante do treino pode ser armazenada num arqui7o1
99dt-train.cpp
:include ;cekeikon.<
int nfeatures,1-=
int ntreinos,2--=
int ntestes,2--=
int classe'float f-> float f1(
...
%oid geraBreino')atC;float<D features> )atC;float<D saidas(
...
int main'(
? )atC;float< features> saidas=
geraBreino'features>saidas(=
E%$Bree ind=
ind.train'features>EFC3GHC1*)!"+>saidas(=
ind.sa%e'&treino.xml&(=
A
99dt-pred.cpp
:include ;cekeikon.<
int nfeatures,1-=
int ntreinos,2--=
int ntestes,2--=
int classe'float f-> float f1(
...
int main'(
?
E%$Bree ind=
ind.load'&treino.xml&(=
srand'5(=
int nacertos,-=
)atC;float< query'1>nfeatures(=
for 'int l,-= l;ntestes= l@@( ?
for 'int c,-= c;nfeatures= c@@( query'c(,rand'(.1--=
int predicao,c%3ound'ind.predict'query(-<%alue(=
int correto , classe'query'-(>query'1((=
if 'predicao,,correto( nacertos@@=
A
printf'&*certos,.0.2f..\n&>1--.-Inacertos9ntestes(=
A
AcertosS GJ.JJZ
63
[r7ore de decis9o pode ser usada para determinar a importFncia de cada 0eature1
99importa.cpp
:include ;cekeikon.<
int main'(
? E%$Bree ind=
ind.load'&treino.xml&(=
)atC;$7"< f,ind.getFarJmportance'(=
cout ;; f.roKs ;; & & ;; f.cols ;; endl=
cout ;; tipo'f( ;; endl=
for 'int i,-= i;f.cols= i@@(
printf'&.f\n&>f'i((=
A
1 10
CM+H1:1
0.L216L0
0.15NHL0
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
[r7ore de decis9o detectou corretamente que somente as duas primeiras 7ari7eis s9o rele7antes.
66
&izin'o mais pr()imo "01#, usando Cv*+earest
P resto do programa ( igual ao dtree.cpp
99knearest.cpp
int main'(
? )atC;float< features> saidas=
geraBreino'features>saidas(=
E%L2earest ind'features>saidas(=
srand'5(=
int nacertos,-=
)atC;float< query'1>nfeatures(=
for 'int l,-= l;ntestes= l@@( ?
for 'int c,-= c;nfeatures= c@@( query'c(,rand'(.1--=
int predicao,c%3ound'ind.findCnearest'query>1((=
int correto , classe'query'-(>query'1((=
if 'predicao,,correto( nacertos@@=
A
printf'&*certos,.0.2f..\n&>1--.-Inacertos9ntestes(=
A
AcertosS NJ.AJZ
-urpreendentemente2 a taxa de acertos ( alta.
&izin'o mais pr()imo "01#, usando flann
P resto do programa ( igual ao dtree.cpp
99flann.cpp
int main'(
? )atC;float< features> saidas=
geraBreino'features>saidas(=
flann::Jndex ind'features>flann::L$BreeJndex!arams'6((=
srand'5(=
int nacertos,-=
)atC;float< query'1>nfeatures(=
%ector;int< indices'1(=
%ector;float< dists'1(=
for 'int l,-= l;ntestes= l@@( ?
for 'int c,-= c;nfeatures= c@@( query'c(,rand'(.1--=
ind.knn1earc'query>indices>dists>1>flann::1earc!arams'10((=
int predicao,c%3ound'saidas'indicesM-N>-((=
int correto , classe'query'-(>query'1((=
if 'predicao,,correto( nacertos@@=
A
printf'&*certos,.0.2f..\n&>1--.-Inacertos9ntestes(=
A
AcertosS HG.JJZ
Como esperado2 as taxas de acertos de C7M#earest e 0lann s9o quase iguais.

Moti7o do mau resultado do 7izinho mais prEximo1 P classi0icador n9o sa!e que a sa=da depende sE
dos 0eatures J e 32 pois o treino ( 0eito sem in0ormar a classi0ica89o.
6:
/xemplo gr0ico1
Considere classi0icar os pontos com 6 0eatures 0J e 03 em C\D ou CPD2 onde a classi0ica89o sE
depende do 7alor 0J.
Vsando o 7izinho mais prEximo2 C, ser classi0icada erradamente como C\D.
Vsando a r7ore de decis9o2 pro7a7elmente C, ser classi0icada corretamente como CPD.
6@
-oosting ."01#/
Ada!oost soma respostas de 7rias r7ores de decis9o ($ea% classi0iers" para tomar uma decis9o
0inal.
99boosting.cpp
...
int main'(
? )atC;float< features> saidas=
geraBreino'features>saidas(=
E%7oost ind'features>EFC3GHC1*)!"+>saidas(=
srand'5(=
int nacertos,-=
)atC;float< query'1>nfeatures(=
for 'int l,-= l;ntestes= l@@( ?
for 'int c,-= c;nfeatures= c@@( query'c(,rand'(.1--=
int predicao,c%3ound'ind.predict'query((=
int correto , classe'query'-(>query'1((=
if 'predicao,,correto( nacertos@@=
A
printf'&*certos,.0.2f..\n&>1--.-Inacertos9ntestes(=
A
AcertosS GJ.AJZ
#este exemplo2 n9o hou7e aumento signi0icati7o de acerto em rela89o ] dtree. /m muitos
pro!lemas2 !oosting tem taxa de acerto maior que r7ore de decis9o.
&oosting pode de7ol7er a soma das respostas2 em 7ez de categoria. A resposta real d uma indica89o
so!re a Ccon0ian8aD do classi0icador.
O"B r,ind.predict'query>)at'(>3ange::all'(>false>true(= 99 resposta real
M06> 8-> 11> 3> 34> 63> /8> 08> 81> /4N 5.88152 1
M8-> 43> 13> 8/> 00> 43> 51> 68> 62> 0/N 1.3/225 1
M/0> 00> 2> 58> /> 48> 61> 86> 33> 1/N 10.4534 1
M43> 66> 54> 32> 84> 61> 5/> 03> 2-> 68N -1.56/12 -1
M/5> 05> 43> 45> 12> /4> 5-> 41> 33> 1/N 10.4534 1
M3> 24> 4> 85> 65> 2/> 46> 1> 0> 64N -14.28/5 -1
M4/> 3-> /2> 2-> 5-> 5-> 08> 18> 26> 8/N -0.24/58 -1
M56> 1-> 3> 64> 1-> 0> 10> 12> 18> 0-N -4.05/42 -1
M43> 54> 30> 8-> /5> 43> 6> /6> 65> 60N 8.-5-/8 1
M54> 40> 34> 03> 40> 61> 86> 3/> 16> 4-N /.2-3// 1
M00> /4> 88> 8/> 0-> 23> 10> 2/> 45> 05N 5.88152 1
M4/> 4-> /0> 3> 0-> 6> 03> 10> 63> 51N --.145202 1 ,erro
M53> 3/> 2/> 36> /5> /5> 34> 3-> 55> 33N 1.44153 1
M01> 55> 06> /4> /6> 3-> 53> 3-> 6> 55N 5.88152 1
M53> 6/> 0/> 06> 52> //> 41> /2> 38> 52N 8.04366 1
M10> 34> 58> 2/> 58> 81> 36> 31> 01> 1/N -14.28/5 -1
M64> 45> 14> 63> 85> 23> 3/> 66> 62> 36N --.2/540/ 1 ,erro
M00> 2> 6/> //> 51> /4> 32> 35> 62> 24N -13.4-12 -1
M8-> 21> 13> 11> 10> -> 45> 42> 13> 52N -8.43-4 -1
M38> 26> 25> 13> 38> 56> 43> 8-> 21> 10N -1-.4656 -1
...
,epare que nos casos de erro2 ada!oost esta7a Cmais ou menos indecisoD. #9o tinha e7idncia clara
da decis9o que de7eria tomar.
6A
Classificador de -a0es 1aussiano .normal/ "01#
//ba/es.cpp
...
int )ain("
# *at+<float> features! saidas'
.era@reino(features!saidas"'
C7;or)alJa/esClassifier ind'
ind.train(features!saidas"'
srand(N"'
int nacertos40'
*at+<float> 0uer/(1!nfeatures"'
for (int l40' l<ntestes' l&&" #
for (int c40' c<nfeatures' c&&" 0uer/(c"4rand("O100'
int predicao4c7ound(ind.predict(0uer/""'
int correto 4 classe(0uer/(0"!0uer/(1""'
if (predicao44correto" nacertos&&'
(
printf(-Pcertos4OH.2fOOQn-!100.0Anacertos/ntestes"'
(
AcertosS G@.JJZ
^ a maior taxa de acertos at( agora.
2upport &ector Mac'ine .2&M/ "01#
99s%m.cpp
...
int main'(
? )atC;float< features> saidas=
geraBreino'features>saidas(=
E%1F) ind=
ind.train'features>saidas(=
srand'5(=
int nacertos,-=
)atC;float< query'1>nfeatures(=
for 'int l,-= l;ntestes= l@@( ?
for 'int c,-= c;nfeatures= c@@( query'c(,rand'(.1--=
int predicao,c%3ound'ind.predict'query((=
int correto , classe'query'-(>query'1((=
if 'predicao,,correto( nacertos@@=
A
printf'&*certos,.0.2f..\n&>1--.-Inacertos9ntestes(=
A
AcertosS A:.AJZ
Para este exemplo2 -.M n9o 0uncionou !em...
+eural +et.
3andom Tree.
etc.
6O
Classificar um problema com 10 features, quando somente os features 0 e 1 so relevantes.
Teste "
A sa=da depende apenas de 0J (linhas" e 03 (colunas". Ps 0eatures 06...0G s9o irrele7antes. Raremos
treino com 6JJ amostras geradas aleatoriamente e testes com outras 6JJ amostras. Cada 0eature (
um nYmero aleatErio entre J e GG.
!rvore de deciso "01#, teste"
)gual ao programa do teste32 exceto1
99dtree.cpp
...
int classe'float f-> float f1(
? if 'f-@f1;4- PP 14-;f-@f1( return -1=
else return @1=
A
...
AcertosS G3.JJZ
&izin'o mais pr()imo "01#, usando Cv*+earest, teste"
-E muda a 0un89o classe.
AcertosS H@.AJZ
&izin'o mais pr()imo "01#, usando flann, teste"
-E muda a 0un89o classe.
AcertosS H:.JJZ

Moti7o do mau resultado do 7izinho mais prEximo1 P classi0icador n9o sa!e que a sa=da depende sE
dos 0eatures J e 32 pois o treino ( 0eito sem in0ormar a classi0ica89o.
6H
-oosting ."01#/, teste"
-E muda a 0un89o classe.
AcertosS HO.AJZ
.emos2 que neste caso2 !oosting 0uncionou muito mal.
Classificador de -a0es 1aussiano .normal/ "01#, teste"
-E muda a 0un89o classe.
AcertosS H6.JJZ
.emos2 que neste caso2 &ayes tam!(m 0uncionou muito mal.
2upport &ector Mac'ine .2&M/ "01#
-E muda a 0un89o classe.
AcertosS H@.AJZ
-.M tam!(m n9o 0uncionou !em...
,esumo das taxas de acerto1
Teste 3 Teste 6
dtree GJ.JJZ G3.JJZ
%nearest NJ.AJZ H@.AJZ
0lann HG.JJZ H:.JJZ
!oosting GJ.AJZ HO.AJZ
&ayes G@.JJZ H6.JJZ
-.M A:.AJZ H@.AJZ
6N
*4means ."015/
%*means1 Vsado para agrupar dados.
//k)eans1.cpp
#include <cekeikon.h>
int )ain("
# int )a,i)ol4N'
int )a,i)oc42'
*at+<:?@> data()a,i)ol!)a,i)oc"'
data(0!0"410' data(0!1"4K'
data(1!0"45' data(1!1"411'
data(2!0"410' data(2!1"4N'
data(6!0"4N' data(6!1"45'
data(1!0"410' data(1!1"4K1'
data(L!0"4N' data(L!1"4K5'
data(H!0"412' data(H!1"4K2'
data(5!0"45' data(5!1"4KH'
*at+<int> best?abels()a,i)ol!1"'
*at+<:?@> centers()a,i)ol!)a,i)oc"'
@er)Criteria criteria(@er)CriteriaBBCOI;@ R @er)CriteriaBB>FG! 20! 0.1"'
double co)pactness4k)eans(data!2!best?abels!criteria!1!D*>P;G+FF+C>;@>G!centers"'
// double k)eans(CnputPrra/ data! int D! CnputOutputPrra/ best?abels!
// @er)Criteria criteria! int atte)pts! int fla.s!
// OutputPrra/ centers4noPrra/(" "
cout << -Co)pactness4- << s0rt(co)pactness/)a,i)ol" << endl'
cout << -Jest?abels4- << best?abels << endl'
cout << -Centers4- << centers << endl'
(
-a=da1
>k)eans1
Co)pactness42.HL1HL
Jest?abels4$1' 1' 1' 1' 0' 0' 0' 0%
Centers4$K.2L! K1'
N.5L! N.5L%
6G
B9aula-treina.cpp grad2-13 ep2
:include ;cekeikon.<
int main'(
? %ector;string< %s=
%sHildEard'&Ktreino\\nI.pgm&>%s(=
%sHildEard'&Ktreino\\pI.pgm&>%s(=
%sHildEard'&Ktreino\\pI.pgm&>%s(=
%sHildEard'&Ktreino\\pI.pgm&>%s(=
%sHildEard'&Ktreino\\pI.pgm&>%s(=
%sHildEard'&Ktreino\\pI.pgm&>%s(=
%sHildEard'&Ktreino\\pI.pgm&>%s(=
%sHildEard'&Ktreino\\pI.pgm&>%s(=
%sHildEard'&Ktreino\\pI.pgm&>%s(=
%sHildEard'&Ktreino\\pI.pgm&>%s(=
int maximol,int'%s.siQe'((=
int maximoc,26I26=
)atC;O"B< features'maximol>maximoc(=
)atC;O"B< saidas'maximol>1(=
)atC;O"B< a=
for 'unsigned i,-= i;%s.siQe'(= i@@( ?
cout ;; %sMiN ;; endl=
le'a>%sMiN(=
if 'a.roKsR,26 PP a.colsR,26( erro'&+rro: dimensao in%alida&(=
int j,-=
for 'int l,-= l;a.roKs= l@@(
for 'int c,-= c;a.cols= c@@( ?
features'i>j(,a'l>c(=
j@@=
A
car letra,toloKer'semdiret'%sMiN(M-N(=
if 'letra,,SpS( saidas'i>-(,1=
else if 'letra,,SnS( saidas'i>-(,-=
else erro'&+rro: 2ome do arqui%o in%alido&(=
A

cout ;; &Breinando ar%ore& ;; endl=
E%$Bree ind=
ind.train'features>EFC3GHC1*)!"+>saidas(=
ind.sa%e'&aula-treina.xml&(=
A
:J
99aula-testa.cpp grad2-13 ep2
:include ;cekeikon.<
int main'(
? %ector;string< %s=
%sHildEard'&Kteste\\nI.pgm&>%s(=
%sHildEard'&Kteste\\pI.pgm&>%s(=
E%$Bree ind=
ind.load'&aula-treina.xml&(=
int maximoc,26I26=
)atC;O"B< a=
)atC;O"B< query'1>maximoc(=
int resultado=
for 'unsigned i,-= i;%s.siQe'(= i@@( ?
le'a>%sMiN(=
if 'a.roKsR,26 PP a.colsR,26( erro'&+rro: dimensao in%alida&(=
int j,-=
for 'int l,-= l;a.roKs= l@@(
for 'int c,-= c;a.cols= c@@( ?
query'->j(,a'l>c(=
j@@=
A
resultado,arredonda'ind.predict'query(-<%alue(=
cout ;; %sMiN ;; & & ;; resultado ;; endl=
A
A
:3