SlideShare una empresa de Scribd logo
1 de 55
CLASSIFICAÇÃO
 aVANÇADA
   Métodos de Núcleo e
Máquinas de Vetor de Suporte




             Eduardo Nicola F. Zagari
Sumário

Um exemplo de conjunto de dados

Classificação Linear Básica

Características de Categoria

Normalização dos Dados

Métodos de Núcleo
Conjunto de Dados de
            páginas de Encontros

Considere uma página Web imaginária de encontros de casais.
Vamos considerar também que ela reúna as seguintes informações sobre
seus membros:

   Idade

   É fumante?
   Quer ter filhos?

   Lista de interesses
   Localização

Além destes, são coletadas info para checar se 2 pessoas formam um bom
par, se tiveram um contato inicial e se decidiram se encontrar pessoalmente.
Conjunto de Dados de
       páginas de Encontros

Dois aspectos interessantes sobre este conjunto
de dados:

 não linearidade

 interação entre as variáveis

Por exemplo, considere isoladamente as idades
dos homens e mulheres que combinam e que
não combinam...
Dificuldades com os dados
Classificação Linear básica


Classificador simples

Encontra uma média de todos os dados em
cada categoria e determina um ponto que
representa o centro de cada uma delas

Pode-se então classificar novos pontos,
determinando a quais dos centros eles estão
mais próximos
Classificação Linear básica


Primeiro passo:

  função que calcule o ponto médio nas
  categorias

Ex.:

  Categoria 0: não combinam

  Categoria 1: combinam
Classificação Linear básica
Classificação Linear básica


Sempre que tivermos um novo par e queiramos um palpite sobre se 2
pessoas serão compatíveis, pode-se apenas verificar de qual lado da
reta (média) elas estarão mais próximas

Forma de se determinar proximidade numérica: Distância Euclideana

  menor distância entre o ponto e as 2 médias, ou

  sinal do produto escalar dos 2 vetores:

     Vetor A: vetor entre pontos médios (M0 e M1) das categorias =>
     M0 - M1

     Vetor B: vetor entre o ponto procurado (X) e a média dos pontos
     médios (M) => X - (M0 + M1)/2
Classificação Linear básica


          X
              Vetor A
     M0
                  M = (M0 + M1)/2
      Vetor B
                            M1
Classificação Linear básica


Produto Escalar do Vetor A pelo Vetor B

ProdEscalar(Vetor A, Vetor B) =

              = ProdEscalar(X - (M0+M1)/2, M0 - M1)

              = ProdEscalar(X,M0) - ProdEscalar(X, M1) +
              (ProdEscalar(M1,M1) - ProdEscalar(M0,M0))/2

       onde ProdEscalar(V1,V2) = V1[0]*V2[0] + V1[1]*V2[1]

Se ProdEscalar(Vetor A, Vetor B) for maior que zero, o ponto X
é da categoria 0 (casal não combina), senão, da categoria 1
(casal combina)
Classificação Linear básica


 Assim, teríamos, como exemplo, os resultados:
 >> dp_classify([30,30],avgs)
=> 1
>> dp_classify([30,25],avgs)
=> 1
>> dp_classify([25,40],avgs)
=> 0
>> dp_classify([48,20],avgs)
=> 1

 Lembre-se de que esse é um classificador linear,
 portanto, ele encontra apenas uma linha divisória
   Isto explica o resultado do ponto [48, 20]
Características de categoria




Grupos de dados contêm valores numéricos e
de categoria. Alguns classificadores (como a
Árvore de Decisão) suportam os dois tipos,
mas outros não.

 Solução: transformar dados em números
Características de categoria
    Perguntas de sim/não


Perguntas de Sim/Não

 São as mais simples

 Sim = 1

 Não = -1

 Eu não sei = 0
Características de categoria
      listas de interesses

Listas de Interesses

  Existem várias formas de manipulá-las

  A mais simples é tratar cada interesse possível como uma
  variável numérica separada:

     Tem interesse = 1

     Não tem interesse = 0

  No caso de lidar com pares de pessoas, a opção mais
  intuitiva é usar o número de interesses em comum como
  uma variável (Contagem de Equivalências/Semelhanças)
Características de categoria
      listas de interesses

O número de interesses elimina algumas informações
potencialmente úteis, como interesses que funcionem bem
juntos (p. ex., beber e dançar)

  Classificador que não foi treinado para isto, nunca seria capaz
  de aprender tais combinações

Um alternativa a criar uma variável para cada interesse é
organizá-los numa hierarquia

  Se o interesse é o mesmo, contagem de semelhanças += 1

  Se o interesse é diferente, mas da mesma subcategoria, p. ex.,
  contagem de semelhanças += 0,8
Características de categoria
   Lidando com localização

Uma das características mais difíceis de lidar:

  No nosso caso, parece um bom argumento dizer que
  a probabilidade de pessoas que moram perto serem
  mais compatíveis

  Mas definir “perto” como “viver no mesmo CEP”
  pode ser limitante demais

  Para isto, geralmente o uso de APIs de Geocoding
  são perfeitas: obtém-se latitude e longitude dos
  endereços e se calcula a distância entre eles
Características de categoria
          Google geocoding API


    Para usar o Google Geocoding Web Service,
    podemos usar a gem Geokit:
         $ sudo gem install geokit
        $ irb
        >> require 'rubygems'
        => false
        >> require 'geokit'
        => true

    Agora basta chamar:
>> res = Geokit::Geocoders::GoogleGeocoder.geocode(‘<endereço>’)
>> res.ll
Características de categoria
       Google geocoding API
 >> lat_long = Geokit::Geocoders::GoogleGeocoder.geocode('Avenida Mns-dr. Emilio Jose
Salim, Parque das Universidades, Campinas - Sao Paulo, Brazil')
#<Geokit::GeoLoc:0x180bbb8
 @accuracy=6,
 @all=[#<Geokit::GeoLoc:0x180bbb8 ...>],
 @city="Campinas",
 @country="Brasil",
 @country_code="BR",
 @district="Parque das Universidades",
 @full_address=
  "Av. Mns-dr. Em303255lio Jos303251 Salim - Parque das Universidades, Campinas -
S303243o Paulo, Brazil",
 @lat=-22.8342006,
 @lng=-47.0530948,
 @precision="zip+4",
 @provider="google",
 @province=nil,
 @state="S303243o Paulo",
 @street_address="Av. Mns Dr. Em303255lio Jos303251 Salim",
 @success=true,
 @suggested_bounds=
  #<Geokit::Bounds:0x17bd828
   @ne=#<Geokit::LatLng:0x17bd760 @lat=-22.8310554, @lng=-47.0499702>,
   @sw=#<Geokit::LatLng:0x17bd7c4 @lat=-22.8373507, @lng=-47.0562654>>,
 @zip=nil>
=> nil
>> pp lat_long.ll
"-22.8342006,-47.0530948"
=> nil
Características de categoria
     calculando as distâncias


Se é necessária alta precisão, é complicado
converter latitudes e longitudes em distância em
kms

Mas, como aproximação, pode-se calcular tal
distância, pela fórmula:

                  sqrt(x**2 + y**2)

    onde, x = 69.1*(lat2 - lat1) e y 53*(long2 - long1)
Características de categoria
     calculando as distâncias

    Ou, pela gem geokit:
 >> a = Geokit::Geocoders::GoogleGeocoder.geocode('Campinas,
SP')
>> a.ll
=> "-22.9063648,-47.0615741"
>> b = Geokit::Geocoders::GoogleGeocoder.geocode('Avenida
Mns-dr. Emilio Jose Salim, Parque das Universidades,
Campinas - Sao Paulo, Brazil')
>> b.ll
=> "-22.8342006,-47.0530948"

>> a.distance_to(b, {:units => :kms})
=> 8.07849508688975
Características de categoria
     Normalizando os dados


Como a natureza dos dados é diferente
(diferença de idade, opinião sobre filhos etc), é
preciso colocar todos numa escala comum, para
que as diferenças sejam comparáveis entre todas
as variáveis:

   Por exemplo, normalizando cada variável
   entre 0 e 1
Métodos de núcleo
Métodos de Núcleo


Onde estariam os pontos médios de cada classe?

   o classificador linear não consegue
   diferenciar estas categorias...

Mas, considere o que acontece se elevarmos ao
quadrado todo valor (x,y):

   (-1,2) -> (1,4)

   (0.5, 1) -> (0.25, 1)
Métodos de núcleo
O Truque do núcleo


Nem sempre é factível se transformar os dados
para um novo espaço, a fim de encontrar uma
linha divisória, pois pode ser necessário uma
transformação para um espaço de muitas
dimensões

   Entretanto, para algoritmos que usem
   produtos escalares, pode-se usar a técnica do
   Truque de Núcleo
O Truque do núcleo


Truque de Núcleo:

   consiste em substituir a função de produto
   escalar por uma nova função que retorna o
   que o produto escalar seria, se os dados
   tivessem sido transformados primeiro num
   espaço dimensional maior, usando alguma
   função de mapeamento

   p. exemplo, a função de base radial
O Truque do núcleo


Função de base radial:
    semelhante ao produto escalar, pois toma 2 vetores e
    retorna um valor
    no entanto, difere dele por não ser linear e, assim, poder
    mapear espaços mais complexos


 def rbf(v1, v2, gamma=20)
   retorna nulo se v1.length != v2.length
   dv = diff(v1, v2)    # a ser definida
   l = veclength(dv)    # a ser definida
   Math::exp(-gamma*l)
 end
O Truque do núcleo


Cálculo das distâncias dos pontos médios no espaço
transformado:

    não temos as médias no novo espaço

    sequer temos os locais dos pontos no novo espaço

    felizmente, o produto escalar da média de um
    grupo de vetores com um vetor A é o mesmo que
    a média dos produtos escalares do vetor A com
    todos os demais
O Truque do núcleo




Assim, computamos o produto escalar (ou a
função de base radial) entre o ponto que estamos
tentando classificar e todos os outros na
categoria e então determinamos a média de
todos eles
O Truque do núcleo


     Deslocamento dos intervalos:

def get_offset(rows, gamma=10)
  l0 = pontos_da_categoria_0(rows)
  l1 = pontos_da_categoria_1(rows)
  sum0 = somatorio_dos_rbf_entre_todos_os_pontos(l0)
  sum1 = somatorio_dos_rbf_entre_todos_os_pontos(l1)

  return sum1/(l1.length**2) - sum0/(l0.length**2)
end
O Truque do núcleo


     Classificador Não Linear:

def nl_classify(point, rows, offset, gamma=10)
  Para cada ponto em rows
    Se for da categoria 0
      sum0 += rbf(point, row.data, gamma)
      count0 += 1
    senao
      sum1 += rbf(point, row.data, gamma)
      count1 += 1
    fim
  fim
  retorna 0 se (sum0/count0 - sum1/count1 + offset) > 0
  retorna 1
end
ClassificaDOR Não Linear


 Assim, teríamos, como exemplo, os resultados:
 >> nl_classify([30,30],avgs)
=> 1
>> nl_classify([30,25],avgs)
=> 1
>> nl_classify([25,40],avgs)
=> 0
>> nl_classify([48,20],avgs)
=> 0

 Excelente! Ele agora já reconhece que há uma faixa em que
 as equivalências são mais prováveis

   Veja o resultado do ponto [48, 20] que fica num extremo
ClassificaDOR Não Linear

      Exemplo com o conjunto completo de dados:
 >> ssoffset=get_offset(scaledset)
=> 0.00516260809118123
>> numericalset[0].match
=> 0
>> nl_classify(scale_func.call(numericalset[0].data), scaledset, ssoffset)
=> 0
>> numericalset[1].match
=> 1
>> nl_classify(scale_func.call(numericalset[1].data), scaledset, ssoffset)
=> 1
>> newrow = [28.0, -1, -1, 26.0, -1, 1, 2, 0.8]    Homem não quer filhos,
                                                         mulher quer
=> [28.0, -1, -1, 26.0, -1, 1, 2, 0.8]
>> nl_classify(scale_func.call(newrow), scaledset, ssoffset)
=> 0
>> newrow = [28.0, -1, 1, 26.0, -1, 1, 2, 0.8]          Ambos querem
=> [28.0, -1, 1, 26.0, -1, 1, 2, 0.8]
>> nl_classify(scale_func.call(newrow), scaledset, ssoffset)
=> 1
Máquinas de vetor de suporte
Máquinas de vetor de suporte

 Encontrando a melhor linha divisória
Máquinas de vetor de suporte


Os pontos da margem são chamados de vetores de suporte.

O algoritmo que encontra esses vetores e os usa para
encontrar a linha divisória é a máquina de vetor de suporte.

Já vimos que um classificador linear pode se transformar
em um classificador não-linear utilizando o Truque de
Núcleo, contanto que ele utilize produtos escalares para
comparações.

    Portanto, SVM podem ser usadas para fazer
    classificação não-linear...
Aplicações das
   Máquinas de vetor de suporte

SVM funcionam bem com conjuntos de dados de muitas
dimensões. Alguns exemplos incluem:
    Classificar expressões faciais

    Detectar intrusos utilizando conjuntos de dados militares

    Prever a estrutura de proteínas a partir de suas
    sequências

    Reconhecimento de letra escrita manualmente
    Determinar o estrago potencial durante terremotos
Máquinas de vetor de suporte



O princípio das SVMs é o de criar uma função de
predição a partir de um conjunto de treinamento.
Para tanto, SVMs encontram um hiperplano que
tenta dividir as categorias positiva e negativa
com a maior margem possível de todos os seus
lados.
Máquinas de vetor de suporte


Dado um conjunto de treinamento com os pares


onde:



e
as máquinas de vetor de suporte (SVMs) buscam a solução
do seguinte problema de otimização:
Máquinas de vetor de suporte




Os vetores ‘x’ são mapeados para um espaço N-dimensional
pela função O e a SVM encontra um hiperplano de separação
com a máxima margem no maior espaço dimensional.
Máquinas de vetor de suporte

C > 0 é o parâmetro de penalidade do termo de erro e



é chamada de função de núcleo.

Embora existam várias funções de núcleo propostas por pesquisadores, as 4 funções
mais comuns são:
Máquinas de vetor de suporte


Os conceitos matemáticos são profundos e vão
além do escopo desta apresentação...

Mas, “por sorte”, temos uma biblioteca de código
aberto chamada LIBSVM, que pode treinar um
modelo de SVM, fazer e testar previsões dentro
de um conjunto de dados.

Ela possui suporte implementado para a Função
de Base Radial e outros métodos de núcleo.
LIBSVM



Pode-se conseguir a LIBSVM em

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

Para Ruby, existe uma interface para ela usando
SWIG em

http://github.com/tomz/libsvm-ruby-swig
LIBSVM: um exemplo

 >> require 'svm'
 => true
>> prob = Problem.new([1,-1],[[1,0,1],[-1,0,-1]])
 => Problem: size = 2
>> param = Parameter.new(:kernel_type => LINEAR, :C => 10)
 => #<Parameter:0x2c1dc0 @param=#<Libsvm::Svm_parameter:0x2c1d70>>
>> m = Model.new(prob,param)
 => #<Model:0x2ba14c @nr_class=2, @prob=Problem: size = 2, @probability=0,
@model=#<SWIG::TYPE_p_svm_model:0x2ba034>, @labels=[1, -1], @svm_type=0>
>> m.predict([1,1,1])
 => 1.0
>> m.predict([0,0,-1])
 => -1.0
>> m.save("test.model")
 => 0
>> m2 = Model.new("test.model")
 => #<Model:0x29d880 @nr_class=2, @probability=0,
@model=#<SWIG::TYPE_p_svm_model:0x29d830>, @labels=[1, -1], @svm_type=0>
>> m2.predict([0,0,-1])
 => -1.0
LIBSVM e o
  Conjunto de dados de encontros

O primeiro passo é converter o conjunto de dados
normalizados (para equalizar a importância das
variáveis) para as listas exigidas por “Model”.

Criar o conjunto de dados do problema com as listas
de categorias e a dos dados de entrada (“Problem”)

Escolher a função de base radial como núcleo
(“Parameter”)

Criar o modelo (“Model”)
LIBSVM e o
   Conjunto de dados de encontros


     Agora se pode fazer as previsões via SVM:

 >> newrow = [28.0, -1, -1, 26.0, -1, 1, 2, 0.8]
 => [28.0, -1, -1, 26.0, -1, 1, 2, 0.8]            Homem não quer filhos,
>> m.predict(scale_func.call(newrow))                    mulher quer
 => 0.0
>> newrow = [28.0, -1, 1, 26.0, -1, 1, 2, 0.8]
 => [28.0, -1, 1, 26.0, -1, 1, 2, 0.8]                  Ambos querem
>> m.predict(scale_func.call(newrow))
 => 1.0
LIBSVM e o
  Conjunto de dados de encontros


A LIBSVM também inclui funcionalidade para validação
cruzada dos modelos (“cross_validation”)

    Conj. de dados = conj. de treinamento + conj. de teste

    Ela precisa de um parâmetro n e divide o conjunto
    de dados em n subconjuntos, fazendo a combinação
    de conjuntos de treinamento e de teste entre eles

    Retorna uma lista de respostas para ser comparada
    com a original
LIBSVM e o
   Conjunto de dados de encontros


     Agora se pode fazer as previsões via SVM:

 >> guesses = cross_validation(prob, param, 4)
 => [0.0, 0.0, ...
>> sum = 0
 => 0                                            120 diferenças entre as
                                                      respostas e as
>> answers.length.times do |i|                   previsões, significa que
?>    sum += (answers[i] - guesses[i]).abs        o algoritmo conseguiu
?> end                                               380 equivalêncas
 => 500                                                  corretas.
>> sum
 => 120.0
SVM e Classificação de documentos




 Uma outra aplicação em que SVM apresenta
 ótimos resultados é a Classificação de Textos

 Neste caso, o primeiro passo a se realizar é o
 de se preparar os dados, construindo vetores
 de documentos
SVM e Classificação de documentos


 Converter todos os documentos usando um
 “vector space model”. Neste modelo, ao invés
 de se trabalhar com palavras ou sentenças,

  o texto é quebrado em palavras,

  um ID único é associado a cada uma delas, e

  o texto é reconstruído como uma sequência
  de IDs de palavras únicos
SVM e Classificação de documentos
SVM e Classificação de documentos


  Neste exemplo, se usarmos o Dicionário
  Global para cada documento e marcarmos as
  palavras presentes como ‘1’ e as ausentes
  como ‘0’, teremos:

    Document A: [1, 1, 0, 1, 1], isto é, índices 1,
    2, 4 e 5 presentes e o índice 3 ausente

    Document B: [0, 1, 1, 1, 1]
SVM e Classificação de documentos



•Kernel Linear made 3 errors on the training set
•Kernel Linear made 2 errors on the test set
•Kernel Polynomial made 0 errors on the training set
     • Prediction: 1.0, True label: 1
     • Prediction: 0.0, True label: 0
     • Prediction: 0.0, True label: 0
•Kernel Polynomial made 0 errors on the test set
•Kernel Radial basis function made 0 errors on the training set
•Kernel Radial basis function made 0 errors on the test set
•Kernel Sigmoid made 3 errors on the training set
•Kernel Sigmoid made 2 errors on the test set
Referências


Segaran, Toby. “Programming Collective Intelligence”

Chih-Wei Hsu, Chih-Chung Chang and Chih-Jen Lin. A Practical Guide
to Support Vector Classification. http://www.csie.ntu.edu.tw/~cjlin/

Igvta.com. “Support Vector Machine in Ruby”. http://
www.igvita.com/2008/01/07/support-vector-machines-svm-in-ruby/

LIBSVM

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

LIBSVM-Ruby

http://github.com/tomz/libsvm-ruby-swig

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
SCJA
SCJASCJA
SCJA
 
POO - 08 - Prática de Encapsulamento
POO - 08 - Prática de EncapsulamentoPOO - 08 - Prática de Encapsulamento
POO - 08 - Prática de Encapsulamento
 
Artigo - Exploração Visual de Dados de Partidas de Jogos MOBA
Artigo - Exploração Visual de Dados de Partidas de Jogos MOBAArtigo - Exploração Visual de Dados de Partidas de Jogos MOBA
Artigo - Exploração Visual de Dados de Partidas de Jogos MOBA
 
Tutorial aed iii 003 - algoritmo de ordenação shellsort
Tutorial aed iii   003 - algoritmo de ordenação shellsortTutorial aed iii   003 - algoritmo de ordenação shellsort
Tutorial aed iii 003 - algoritmo de ordenação shellsort
 
Algebra Linear cap 04
Algebra Linear cap 04Algebra Linear cap 04
Algebra Linear cap 04
 
ICC-04 Sistemas Numéricos
ICC-04 Sistemas NuméricosICC-04 Sistemas Numéricos
ICC-04 Sistemas Numéricos
 
Curso de Matlab basico
Curso de Matlab basicoCurso de Matlab basico
Curso de Matlab basico
 
Apostila Alvaro Lim Deriv
Apostila Alvaro Lim DerivApostila Alvaro Lim Deriv
Apostila Alvaro Lim Deriv
 
Java 14
Java 14Java 14
Java 14
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de Chaves
 
Algoritmo_ID3_e_C.45_Gilcimar
Algoritmo_ID3_e_C.45_GilcimarAlgoritmo_ID3_e_C.45_Gilcimar
Algoritmo_ID3_e_C.45_Gilcimar
 
Aula7 diagrama classes
Aula7 diagrama classesAula7 diagrama classes
Aula7 diagrama classes
 
Aula espaço vetorial
Aula espaço vetorialAula espaço vetorial
Aula espaço vetorial
 
Trabalho em greenfoot
Trabalho em greenfootTrabalho em greenfoot
Trabalho em greenfoot
 
Sistema de numeração
Sistema de numeraçãoSistema de numeração
Sistema de numeração
 
Basiconumcomplex (1)
Basiconumcomplex (1)Basiconumcomplex (1)
Basiconumcomplex (1)
 
Novidades java 7
Novidades java 7Novidades java 7
Novidades java 7
 
Ávores de Decisão
Ávores de DecisãoÁvores de Decisão
Ávores de Decisão
 
Algebra
AlgebraAlgebra
Algebra
 

Destacado

Padrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerPadrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerEduardo Nicola F. Zagari
 
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosPadrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosEduardo Nicola F. Zagari
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCEduardo Nicola F. Zagari
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasEduardo Nicola F. Zagari
 
Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelEduardo Nicola F. Zagari
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasVagner Santana
 
Arquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and FiltersArquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and FiltersSergio Crespo
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de SoftwareAricelio Souza
 
Padrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorPadrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorEduardo Nicola F. Zagari
 
Padrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryPadrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryEduardo Nicola F. Zagari
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonEduardo Nicola F. Zagari
 
Padrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - FacadePadrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - FacadeEduardo Nicola F. Zagari
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodEduardo Nicola F. Zagari
 
SO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisSO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisEduardo Nicola F. Zagari
 

Destacado (20)

Padrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerPadrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - Broker
 
Uma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDBUma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDB
 
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosPadrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVC
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - Camadas
 
Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - Microkernel
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de Sistemas
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Arquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and FiltersArquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and Filters
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Padrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorPadrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - Adaptador
 
Padrões-01 - Introdução
Padrões-01 - IntroduçãoPadrões-01 - Introdução
Padrões-01 - Introdução
 
Padrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryPadrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract Factory
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - Singleton
 
ICC-07 Softwares - Introdução
ICC-07 Softwares - IntroduçãoICC-07 Softwares - Introdução
ICC-07 Softwares - Introdução
 
Padrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - FacadePadrões-12 - Padrões Estruturais - Facade
Padrões-12 - Padrões Estruturais - Facade
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory Method
 
SO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisSO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas Operacionais
 
Padrões-07 - Padrões Criacionais
Padrões-07 - Padrões CriacionaisPadrões-07 - Padrões Criacionais
Padrões-07 - Padrões Criacionais
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 

Similar a Classificação Avançada com Métodos de Núcleo e Máquinas de Vetor de Suporte

Informática educativa - história das funções com a web 2.0 - parte 2
Informática educativa - história das funções com a web 2.0 - parte 2Informática educativa - história das funções com a web 2.0 - parte 2
Informática educativa - história das funções com a web 2.0 - parte 2Rafael Araujo
 
Aprendizado de Máquina com Azure Machine Learning e R
Aprendizado de Máquina com Azure Machine Learning e RAprendizado de Máquina com Azure Machine Learning e R
Aprendizado de Máquina com Azure Machine Learning e RDiego Nogare
 
Análise Espacial Baseada em Localização
Análise Espacial Baseada em LocalizaçãoAnálise Espacial Baseada em Localização
Análise Espacial Baseada em LocalizaçãoVitor Vieira Vasconcelos
 
[José Ahirton Lopes] Support Vector Machines
[José Ahirton Lopes] Support Vector Machines[José Ahirton Lopes] Support Vector Machines
[José Ahirton Lopes] Support Vector MachinesAhirton Lopes
 
O vértice da parábola da função do 2 grau
O vértice da parábola da função do 2 grauO vértice da parábola da função do 2 grau
O vértice da parábola da função do 2 grauNewton Sérgio Lima
 
Mapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptMapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptJoberthSilva
 
MAT 1ª Série 3º Bimestre Professor.pdf
MAT 1ª Série 3º Bimestre Professor.pdfMAT 1ª Série 3º Bimestre Professor.pdf
MAT 1ª Série 3º Bimestre Professor.pdfGernciadeProduodeMat
 
Funcao modular
Funcao modularFuncao modular
Funcao modularcon_seguir
 
Implementação mód4
Implementação   mód4 Implementação   mód4
Implementação mód4 inechidias
 
Implementação mód4 -
Implementação   mód4 - Implementação   mód4 -
Implementação mód4 - inechidias
 
Implementação mód4
Implementação   mód4 Implementação   mód4
Implementação mód4 inechidias
 
Análise Espacial baseada em Localização - Prática no QGis - 2024
Análise Espacial baseada em Localização - Prática no QGis - 2024Análise Espacial baseada em Localização - Prática no QGis - 2024
Análise Espacial baseada em Localização - Prática no QGis - 2024Vitor Vieira Vasconcelos
 
Algebra linear i cunha; figueiredo
Algebra linear i   cunha; figueiredoAlgebra linear i   cunha; figueiredo
Algebra linear i cunha; figueiredolucio-vicente
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7PeslPinguim
 

Similar a Classificação Avançada com Métodos de Núcleo e Máquinas de Vetor de Suporte (20)

comparaciones
comparacionescomparaciones
comparaciones
 
18comparaciones
18comparaciones18comparaciones
18comparaciones
 
Informática educativa - história das funções com a web 2.0 - parte 2
Informática educativa - história das funções com a web 2.0 - parte 2Informática educativa - história das funções com a web 2.0 - parte 2
Informática educativa - história das funções com a web 2.0 - parte 2
 
Aprendizado de Máquina com Azure Machine Learning e R
Aprendizado de Máquina com Azure Machine Learning e RAprendizado de Máquina com Azure Machine Learning e R
Aprendizado de Máquina com Azure Machine Learning e R
 
Análise Espacial Baseada em Localização
Análise Espacial Baseada em LocalizaçãoAnálise Espacial Baseada em Localização
Análise Espacial Baseada em Localização
 
[José Ahirton Lopes] Support Vector Machines
[José Ahirton Lopes] Support Vector Machines[José Ahirton Lopes] Support Vector Machines
[José Ahirton Lopes] Support Vector Machines
 
O vértice da parábola da função do 2 grau
O vértice da parábola da função do 2 grauO vértice da parábola da função do 2 grau
O vértice da parábola da função do 2 grau
 
Apostila funcoes
Apostila funcoesApostila funcoes
Apostila funcoes
 
MMQ_CasoDiscreto.pdf
MMQ_CasoDiscreto.pdfMMQ_CasoDiscreto.pdf
MMQ_CasoDiscreto.pdf
 
Estatística - Aula 2
Estatística - Aula 2Estatística - Aula 2
Estatística - Aula 2
 
Mapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptMapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.ppt
 
MAT 1ª Série 3º Bimestre Professor.pdf
MAT 1ª Série 3º Bimestre Professor.pdfMAT 1ª Série 3º Bimestre Professor.pdf
MAT 1ª Série 3º Bimestre Professor.pdf
 
Aula 00
Aula 00Aula 00
Aula 00
 
Funcao modular
Funcao modularFuncao modular
Funcao modular
 
Implementação mód4
Implementação   mód4 Implementação   mód4
Implementação mód4
 
Implementação mód4 -
Implementação   mód4 - Implementação   mód4 -
Implementação mód4 -
 
Implementação mód4
Implementação   mód4 Implementação   mód4
Implementação mód4
 
Análise Espacial baseada em Localização - Prática no QGis - 2024
Análise Espacial baseada em Localização - Prática no QGis - 2024Análise Espacial baseada em Localização - Prática no QGis - 2024
Análise Espacial baseada em Localização - Prática no QGis - 2024
 
Algebra linear i cunha; figueiredo
Algebra linear i   cunha; figueiredoAlgebra linear i   cunha; figueiredo
Algebra linear i cunha; figueiredo
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
 

Más de Eduardo Nicola F. Zagari

Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasEduardo Nicola F. Zagari
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSEduardo Nicola F. Zagari
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxEduardo Nicola F. Zagari
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealEduardo Nicola F. Zagari
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Eduardo Nicola F. Zagari
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Eduardo Nicola F. Zagari
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Eduardo Nicola F. Zagari
 
Padrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyPadrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyEduardo Nicola F. Zagari
 

Más de Eduardo Nicola F. Zagari (15)

Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 
Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes Linux
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo Real
 
Módulo de Estudos em Tempo Real
Módulo de Estudos em Tempo RealMódulo de Estudos em Tempo Real
Módulo de Estudos em Tempo Real
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
 
Padrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyPadrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - Proxy
 
ICC-01 História dos Computadores
ICC-01 História dos ComputadoresICC-01 História dos Computadores
ICC-01 História dos Computadores
 
ICC-02 Evolução dos Computadores
ICC-02 Evolução dos ComputadoresICC-02 Evolução dos Computadores
ICC-02 Evolução dos Computadores
 
ICC-03 Organização dos Computadores
ICC-03 Organização dos ComputadoresICC-03 Organização dos Computadores
ICC-03 Organização dos Computadores
 
ICC-05 Álgebra Booleana
ICC-05 Álgebra BooleanaICC-05 Álgebra Booleana
ICC-05 Álgebra Booleana
 
ICC-06 Periféricos - Introdução
ICC-06 Periféricos - IntroduçãoICC-06 Periféricos - Introdução
ICC-06 Periféricos - Introdução
 

Classificação Avançada com Métodos de Núcleo e Máquinas de Vetor de Suporte

  • 1. CLASSIFICAÇÃO aVANÇADA Métodos de Núcleo e Máquinas de Vetor de Suporte Eduardo Nicola F. Zagari
  • 2. Sumário Um exemplo de conjunto de dados Classificação Linear Básica Características de Categoria Normalização dos Dados Métodos de Núcleo
  • 3. Conjunto de Dados de páginas de Encontros Considere uma página Web imaginária de encontros de casais. Vamos considerar também que ela reúna as seguintes informações sobre seus membros: Idade É fumante? Quer ter filhos? Lista de interesses Localização Além destes, são coletadas info para checar se 2 pessoas formam um bom par, se tiveram um contato inicial e se decidiram se encontrar pessoalmente.
  • 4. Conjunto de Dados de páginas de Encontros Dois aspectos interessantes sobre este conjunto de dados: não linearidade interação entre as variáveis Por exemplo, considere isoladamente as idades dos homens e mulheres que combinam e que não combinam...
  • 6. Classificação Linear básica Classificador simples Encontra uma média de todos os dados em cada categoria e determina um ponto que representa o centro de cada uma delas Pode-se então classificar novos pontos, determinando a quais dos centros eles estão mais próximos
  • 7. Classificação Linear básica Primeiro passo: função que calcule o ponto médio nas categorias Ex.: Categoria 0: não combinam Categoria 1: combinam
  • 9. Classificação Linear básica Sempre que tivermos um novo par e queiramos um palpite sobre se 2 pessoas serão compatíveis, pode-se apenas verificar de qual lado da reta (média) elas estarão mais próximas Forma de se determinar proximidade numérica: Distância Euclideana menor distância entre o ponto e as 2 médias, ou sinal do produto escalar dos 2 vetores: Vetor A: vetor entre pontos médios (M0 e M1) das categorias => M0 - M1 Vetor B: vetor entre o ponto procurado (X) e a média dos pontos médios (M) => X - (M0 + M1)/2
  • 10. Classificação Linear básica X Vetor A M0 M = (M0 + M1)/2 Vetor B M1
  • 11. Classificação Linear básica Produto Escalar do Vetor A pelo Vetor B ProdEscalar(Vetor A, Vetor B) = = ProdEscalar(X - (M0+M1)/2, M0 - M1) = ProdEscalar(X,M0) - ProdEscalar(X, M1) + (ProdEscalar(M1,M1) - ProdEscalar(M0,M0))/2 onde ProdEscalar(V1,V2) = V1[0]*V2[0] + V1[1]*V2[1] Se ProdEscalar(Vetor A, Vetor B) for maior que zero, o ponto X é da categoria 0 (casal não combina), senão, da categoria 1 (casal combina)
  • 12. Classificação Linear básica Assim, teríamos, como exemplo, os resultados: >> dp_classify([30,30],avgs) => 1 >> dp_classify([30,25],avgs) => 1 >> dp_classify([25,40],avgs) => 0 >> dp_classify([48,20],avgs) => 1 Lembre-se de que esse é um classificador linear, portanto, ele encontra apenas uma linha divisória Isto explica o resultado do ponto [48, 20]
  • 13. Características de categoria Grupos de dados contêm valores numéricos e de categoria. Alguns classificadores (como a Árvore de Decisão) suportam os dois tipos, mas outros não. Solução: transformar dados em números
  • 14. Características de categoria Perguntas de sim/não Perguntas de Sim/Não São as mais simples Sim = 1 Não = -1 Eu não sei = 0
  • 15. Características de categoria listas de interesses Listas de Interesses Existem várias formas de manipulá-las A mais simples é tratar cada interesse possível como uma variável numérica separada: Tem interesse = 1 Não tem interesse = 0 No caso de lidar com pares de pessoas, a opção mais intuitiva é usar o número de interesses em comum como uma variável (Contagem de Equivalências/Semelhanças)
  • 16. Características de categoria listas de interesses O número de interesses elimina algumas informações potencialmente úteis, como interesses que funcionem bem juntos (p. ex., beber e dançar) Classificador que não foi treinado para isto, nunca seria capaz de aprender tais combinações Um alternativa a criar uma variável para cada interesse é organizá-los numa hierarquia Se o interesse é o mesmo, contagem de semelhanças += 1 Se o interesse é diferente, mas da mesma subcategoria, p. ex., contagem de semelhanças += 0,8
  • 17. Características de categoria Lidando com localização Uma das características mais difíceis de lidar: No nosso caso, parece um bom argumento dizer que a probabilidade de pessoas que moram perto serem mais compatíveis Mas definir “perto” como “viver no mesmo CEP” pode ser limitante demais Para isto, geralmente o uso de APIs de Geocoding são perfeitas: obtém-se latitude e longitude dos endereços e se calcula a distância entre eles
  • 18. Características de categoria Google geocoding API Para usar o Google Geocoding Web Service, podemos usar a gem Geokit: $ sudo gem install geokit $ irb >> require 'rubygems' => false >> require 'geokit' => true Agora basta chamar: >> res = Geokit::Geocoders::GoogleGeocoder.geocode(‘<endereço>’) >> res.ll
  • 19. Características de categoria Google geocoding API >> lat_long = Geokit::Geocoders::GoogleGeocoder.geocode('Avenida Mns-dr. Emilio Jose Salim, Parque das Universidades, Campinas - Sao Paulo, Brazil') #<Geokit::GeoLoc:0x180bbb8 @accuracy=6, @all=[#<Geokit::GeoLoc:0x180bbb8 ...>], @city="Campinas", @country="Brasil", @country_code="BR", @district="Parque das Universidades", @full_address= "Av. Mns-dr. Em303255lio Jos303251 Salim - Parque das Universidades, Campinas - S303243o Paulo, Brazil", @lat=-22.8342006, @lng=-47.0530948, @precision="zip+4", @provider="google", @province=nil, @state="S303243o Paulo", @street_address="Av. Mns Dr. Em303255lio Jos303251 Salim", @success=true, @suggested_bounds= #<Geokit::Bounds:0x17bd828 @ne=#<Geokit::LatLng:0x17bd760 @lat=-22.8310554, @lng=-47.0499702>, @sw=#<Geokit::LatLng:0x17bd7c4 @lat=-22.8373507, @lng=-47.0562654>>, @zip=nil> => nil >> pp lat_long.ll "-22.8342006,-47.0530948" => nil
  • 20. Características de categoria calculando as distâncias Se é necessária alta precisão, é complicado converter latitudes e longitudes em distância em kms Mas, como aproximação, pode-se calcular tal distância, pela fórmula: sqrt(x**2 + y**2) onde, x = 69.1*(lat2 - lat1) e y 53*(long2 - long1)
  • 21. Características de categoria calculando as distâncias Ou, pela gem geokit: >> a = Geokit::Geocoders::GoogleGeocoder.geocode('Campinas, SP') >> a.ll => "-22.9063648,-47.0615741" >> b = Geokit::Geocoders::GoogleGeocoder.geocode('Avenida Mns-dr. Emilio Jose Salim, Parque das Universidades, Campinas - Sao Paulo, Brazil') >> b.ll => "-22.8342006,-47.0530948" >> a.distance_to(b, {:units => :kms}) => 8.07849508688975
  • 22. Características de categoria Normalizando os dados Como a natureza dos dados é diferente (diferença de idade, opinião sobre filhos etc), é preciso colocar todos numa escala comum, para que as diferenças sejam comparáveis entre todas as variáveis: Por exemplo, normalizando cada variável entre 0 e 1
  • 24. Métodos de Núcleo Onde estariam os pontos médios de cada classe? o classificador linear não consegue diferenciar estas categorias... Mas, considere o que acontece se elevarmos ao quadrado todo valor (x,y): (-1,2) -> (1,4) (0.5, 1) -> (0.25, 1)
  • 26. O Truque do núcleo Nem sempre é factível se transformar os dados para um novo espaço, a fim de encontrar uma linha divisória, pois pode ser necessário uma transformação para um espaço de muitas dimensões Entretanto, para algoritmos que usem produtos escalares, pode-se usar a técnica do Truque de Núcleo
  • 27. O Truque do núcleo Truque de Núcleo: consiste em substituir a função de produto escalar por uma nova função que retorna o que o produto escalar seria, se os dados tivessem sido transformados primeiro num espaço dimensional maior, usando alguma função de mapeamento p. exemplo, a função de base radial
  • 28. O Truque do núcleo Função de base radial: semelhante ao produto escalar, pois toma 2 vetores e retorna um valor no entanto, difere dele por não ser linear e, assim, poder mapear espaços mais complexos def rbf(v1, v2, gamma=20) retorna nulo se v1.length != v2.length dv = diff(v1, v2) # a ser definida l = veclength(dv) # a ser definida Math::exp(-gamma*l) end
  • 29. O Truque do núcleo Cálculo das distâncias dos pontos médios no espaço transformado: não temos as médias no novo espaço sequer temos os locais dos pontos no novo espaço felizmente, o produto escalar da média de um grupo de vetores com um vetor A é o mesmo que a média dos produtos escalares do vetor A com todos os demais
  • 30. O Truque do núcleo Assim, computamos o produto escalar (ou a função de base radial) entre o ponto que estamos tentando classificar e todos os outros na categoria e então determinamos a média de todos eles
  • 31. O Truque do núcleo Deslocamento dos intervalos: def get_offset(rows, gamma=10) l0 = pontos_da_categoria_0(rows) l1 = pontos_da_categoria_1(rows) sum0 = somatorio_dos_rbf_entre_todos_os_pontos(l0) sum1 = somatorio_dos_rbf_entre_todos_os_pontos(l1) return sum1/(l1.length**2) - sum0/(l0.length**2) end
  • 32. O Truque do núcleo Classificador Não Linear: def nl_classify(point, rows, offset, gamma=10) Para cada ponto em rows Se for da categoria 0 sum0 += rbf(point, row.data, gamma) count0 += 1 senao sum1 += rbf(point, row.data, gamma) count1 += 1 fim fim retorna 0 se (sum0/count0 - sum1/count1 + offset) > 0 retorna 1 end
  • 33. ClassificaDOR Não Linear Assim, teríamos, como exemplo, os resultados: >> nl_classify([30,30],avgs) => 1 >> nl_classify([30,25],avgs) => 1 >> nl_classify([25,40],avgs) => 0 >> nl_classify([48,20],avgs) => 0 Excelente! Ele agora já reconhece que há uma faixa em que as equivalências são mais prováveis Veja o resultado do ponto [48, 20] que fica num extremo
  • 34. ClassificaDOR Não Linear Exemplo com o conjunto completo de dados: >> ssoffset=get_offset(scaledset) => 0.00516260809118123 >> numericalset[0].match => 0 >> nl_classify(scale_func.call(numericalset[0].data), scaledset, ssoffset) => 0 >> numericalset[1].match => 1 >> nl_classify(scale_func.call(numericalset[1].data), scaledset, ssoffset) => 1 >> newrow = [28.0, -1, -1, 26.0, -1, 1, 2, 0.8] Homem não quer filhos, mulher quer => [28.0, -1, -1, 26.0, -1, 1, 2, 0.8] >> nl_classify(scale_func.call(newrow), scaledset, ssoffset) => 0 >> newrow = [28.0, -1, 1, 26.0, -1, 1, 2, 0.8] Ambos querem => [28.0, -1, 1, 26.0, -1, 1, 2, 0.8] >> nl_classify(scale_func.call(newrow), scaledset, ssoffset) => 1
  • 35. Máquinas de vetor de suporte
  • 36. Máquinas de vetor de suporte Encontrando a melhor linha divisória
  • 37. Máquinas de vetor de suporte Os pontos da margem são chamados de vetores de suporte. O algoritmo que encontra esses vetores e os usa para encontrar a linha divisória é a máquina de vetor de suporte. Já vimos que um classificador linear pode se transformar em um classificador não-linear utilizando o Truque de Núcleo, contanto que ele utilize produtos escalares para comparações. Portanto, SVM podem ser usadas para fazer classificação não-linear...
  • 38. Aplicações das Máquinas de vetor de suporte SVM funcionam bem com conjuntos de dados de muitas dimensões. Alguns exemplos incluem: Classificar expressões faciais Detectar intrusos utilizando conjuntos de dados militares Prever a estrutura de proteínas a partir de suas sequências Reconhecimento de letra escrita manualmente Determinar o estrago potencial durante terremotos
  • 39. Máquinas de vetor de suporte O princípio das SVMs é o de criar uma função de predição a partir de um conjunto de treinamento. Para tanto, SVMs encontram um hiperplano que tenta dividir as categorias positiva e negativa com a maior margem possível de todos os seus lados.
  • 40. Máquinas de vetor de suporte Dado um conjunto de treinamento com os pares onde: e as máquinas de vetor de suporte (SVMs) buscam a solução do seguinte problema de otimização:
  • 41. Máquinas de vetor de suporte Os vetores ‘x’ são mapeados para um espaço N-dimensional pela função O e a SVM encontra um hiperplano de separação com a máxima margem no maior espaço dimensional.
  • 42. Máquinas de vetor de suporte C > 0 é o parâmetro de penalidade do termo de erro e é chamada de função de núcleo. Embora existam várias funções de núcleo propostas por pesquisadores, as 4 funções mais comuns são:
  • 43. Máquinas de vetor de suporte Os conceitos matemáticos são profundos e vão além do escopo desta apresentação... Mas, “por sorte”, temos uma biblioteca de código aberto chamada LIBSVM, que pode treinar um modelo de SVM, fazer e testar previsões dentro de um conjunto de dados. Ela possui suporte implementado para a Função de Base Radial e outros métodos de núcleo.
  • 44. LIBSVM Pode-se conseguir a LIBSVM em http://www.csie.ntu.edu.tw/~cjlin/libsvm/ Para Ruby, existe uma interface para ela usando SWIG em http://github.com/tomz/libsvm-ruby-swig
  • 45. LIBSVM: um exemplo >> require 'svm' => true >> prob = Problem.new([1,-1],[[1,0,1],[-1,0,-1]]) => Problem: size = 2 >> param = Parameter.new(:kernel_type => LINEAR, :C => 10) => #<Parameter:0x2c1dc0 @param=#<Libsvm::Svm_parameter:0x2c1d70>> >> m = Model.new(prob,param) => #<Model:0x2ba14c @nr_class=2, @prob=Problem: size = 2, @probability=0, @model=#<SWIG::TYPE_p_svm_model:0x2ba034>, @labels=[1, -1], @svm_type=0> >> m.predict([1,1,1]) => 1.0 >> m.predict([0,0,-1]) => -1.0 >> m.save("test.model") => 0 >> m2 = Model.new("test.model") => #<Model:0x29d880 @nr_class=2, @probability=0, @model=#<SWIG::TYPE_p_svm_model:0x29d830>, @labels=[1, -1], @svm_type=0> >> m2.predict([0,0,-1]) => -1.0
  • 46. LIBSVM e o Conjunto de dados de encontros O primeiro passo é converter o conjunto de dados normalizados (para equalizar a importância das variáveis) para as listas exigidas por “Model”. Criar o conjunto de dados do problema com as listas de categorias e a dos dados de entrada (“Problem”) Escolher a função de base radial como núcleo (“Parameter”) Criar o modelo (“Model”)
  • 47. LIBSVM e o Conjunto de dados de encontros Agora se pode fazer as previsões via SVM: >> newrow = [28.0, -1, -1, 26.0, -1, 1, 2, 0.8] => [28.0, -1, -1, 26.0, -1, 1, 2, 0.8] Homem não quer filhos, >> m.predict(scale_func.call(newrow)) mulher quer => 0.0 >> newrow = [28.0, -1, 1, 26.0, -1, 1, 2, 0.8] => [28.0, -1, 1, 26.0, -1, 1, 2, 0.8] Ambos querem >> m.predict(scale_func.call(newrow)) => 1.0
  • 48. LIBSVM e o Conjunto de dados de encontros A LIBSVM também inclui funcionalidade para validação cruzada dos modelos (“cross_validation”) Conj. de dados = conj. de treinamento + conj. de teste Ela precisa de um parâmetro n e divide o conjunto de dados em n subconjuntos, fazendo a combinação de conjuntos de treinamento e de teste entre eles Retorna uma lista de respostas para ser comparada com a original
  • 49. LIBSVM e o Conjunto de dados de encontros Agora se pode fazer as previsões via SVM: >> guesses = cross_validation(prob, param, 4) => [0.0, 0.0, ... >> sum = 0 => 0 120 diferenças entre as respostas e as >> answers.length.times do |i| previsões, significa que ?> sum += (answers[i] - guesses[i]).abs o algoritmo conseguiu ?> end 380 equivalêncas => 500 corretas. >> sum => 120.0
  • 50. SVM e Classificação de documentos Uma outra aplicação em que SVM apresenta ótimos resultados é a Classificação de Textos Neste caso, o primeiro passo a se realizar é o de se preparar os dados, construindo vetores de documentos
  • 51. SVM e Classificação de documentos Converter todos os documentos usando um “vector space model”. Neste modelo, ao invés de se trabalhar com palavras ou sentenças, o texto é quebrado em palavras, um ID único é associado a cada uma delas, e o texto é reconstruído como uma sequência de IDs de palavras únicos
  • 52. SVM e Classificação de documentos
  • 53. SVM e Classificação de documentos Neste exemplo, se usarmos o Dicionário Global para cada documento e marcarmos as palavras presentes como ‘1’ e as ausentes como ‘0’, teremos: Document A: [1, 1, 0, 1, 1], isto é, índices 1, 2, 4 e 5 presentes e o índice 3 ausente Document B: [0, 1, 1, 1, 1]
  • 54. SVM e Classificação de documentos •Kernel Linear made 3 errors on the training set •Kernel Linear made 2 errors on the test set •Kernel Polynomial made 0 errors on the training set • Prediction: 1.0, True label: 1 • Prediction: 0.0, True label: 0 • Prediction: 0.0, True label: 0 •Kernel Polynomial made 0 errors on the test set •Kernel Radial basis function made 0 errors on the training set •Kernel Radial basis function made 0 errors on the test set •Kernel Sigmoid made 3 errors on the training set •Kernel Sigmoid made 2 errors on the test set
  • 55. Referências Segaran, Toby. “Programming Collective Intelligence” Chih-Wei Hsu, Chih-Chung Chang and Chih-Jen Lin. A Practical Guide to Support Vector Classification. http://www.csie.ntu.edu.tw/~cjlin/ Igvta.com. “Support Vector Machine in Ruby”. http:// www.igvita.com/2008/01/07/support-vector-machines-svm-in-ruby/ LIBSVM http://www.csie.ntu.edu.tw/~cjlin/libsvm/ LIBSVM-Ruby http://github.com/tomz/libsvm-ruby-swig

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n