Support Vector Machines: diferenças entre revisões

Fonte: aprendis
Saltar para a navegaçãoSaltar para a pesquisa
(Criou página com: 'As Support Vector Machines (SVM) é uma das técnicas mais utilizadas em Data Mining quando é necessário construir um classificador para dados constituídos maioritari...')
 
Sem resumo de edição
Linha 1: Linha 1:
As Support Vector Machines (SVM) é uma das técnicas mais utilizadas em [[Data Mining]]  quando é necessário construir um classificador para dados constituídos maioritariamente por variáveis numéricas continuas/discretas.  
As Support Vector Machines (SVM) são uma das técnicas mais utilizadas em [[Data Mining]]  quando é necessário construir um classificador para dados constituídos maioritariamente por variáveis numéricas continuas/discretas.  
=A Ideia por detrás da SVM=
A estratégia que a SVM implementa para construir um classificador é bastante simples:
A estratégia que a SVM implementa para construir um classificador é bastante simples:
Se tivermos x bolas de duas cores [[Ficheiro:bolas1.png|50px]] podemos simplesmente colocar uma linha de forma a que se separem [[Ficheiro:bolas2.png|50px]], isto permite-nos saber a partir desta informação que bolas acima da linha são azuis e bolas abaixo são vermelhas, o problema é que a linha pode estar em muitas posições diferentes e aparentemente esta não é a melhor [[Ficheiro:bolas3.png|50px]] e por isso recolocamos a linha [[Ficheiro:bolas4.png|50px]] de forma a que o classificador seja preciso [[Ficheiro:bolas5.png|50px]].
Se tivermos x bolas de duas cores [[Ficheiro:bolas1.png|50px]] podemos simplesmente colocar uma linha de forma a que se separem [[Ficheiro:bolas2.png|50px]], isto permite-nos saber a partir desta informação que bolas acima da linha são azuis e bolas abaixo são vermelhas, o problema é que a linha pode estar em muitas posições diferentes e aparentemente esta não é a melhor [[Ficheiro:bolas3.png|50px]] e por isso recolocamos a linha [[Ficheiro:bolas4.png|50px]] de forma a que o classificador seja preciso [[Ficheiro:bolas5.png|50px]].
No entanto a realidade é que casos assim não existem, na verdade todos os casos que uma SVM classifica são sempre uma mistura de bolas azuis e vermelhas  [[Ficheiro:bolas6.png|50px]]  e por isso não existe nenhum linha que separe estes casos [[Ficheiro:bolas7.png|50px]] mas de certeza  que existe um plano! É por isso aumentamos uma (geralmente varias dimensões diferentes) dimensão para assim encontrar o plano que divide as bolas.[[Ficheiro:bolas8.png|50px]] Este passo é o mais complicado de entender pois sabemos que em duas dimensões o que é uma recta e e m 3 dimensões um plano mas e em 4 ou em 6,7,20,50,1000 dimensões? É por isso que chamamos de hiperplano ao que separa as bolas vermelhas das azuis.
No entanto a realidade é que casos assim não existem, na verdade todos os casos que uma SVM classifica são sempre uma mistura de bolas azuis e vermelhas  [[Ficheiro:bolas6.png|50px]]  e por isso não existe nenhuma linha que separe estes casos [[Ficheiro:bolas7.png|50px]] mas de certeza  que existe um plano! É por isso aumentamos uma (geralmente varias dimensões diferentes) dimensão para assim encontrar o plano que divide as bolas.[[Ficheiro:bolas8.png|50px]] Este passo é o mais complicado de entender pois sabemos que em duas dimensões o que é uma recta e em 3 dimensões um plano mas e em 4 ou em 6,7,20,50,1000 dimensões? É por isso que chamamos de hiperplano ao que separa as bolas vermelhas das azuis.\p
 
=Como encontrar o hiperplano=
Primeiro vamos assumir que cada bola é um objecto do tipo {<x1,x2,x3>,<y>} onde x* é os valores das variáveis e y a classe 1 ou -1, assim matematicamente o hiperplano  é representado pela seguinte formula w.x*-b=0 onde w é vector de valores que queremos encontrar. Para isso precisamos de mais dois hiperplanos que serão os vectores de suporte estes hiperplanos são construídos a partir dos objectos que estão nas margens de cada classe,[[Ficheiro:suportVector.png|150px]] neste caso A,B e C. Apartir destes calculamos então o hiperplano que maximiza a distancia entre os dois hiperplanos de suporte.
Sendo que w e b é igual para os 3 hiperplanos ficamos então com w.x*-b = 1  quando y=1 e w.x*-b = -1 quando y=-1 . Desta forma para sabermos qual a classe de um novo objecto so temos que ver qual o sinal do resultado da equação para x*.
=Dimensões e Kernels=
Dado que os dados nunca estão arranjados da forma que desejamos é necessário acrescentar dimensões, o problema disso é que dado que todas as contas feitas numa svm são produtos vectoriais , acrescentar uma dimensão tem consequências gravíssimas na performance do algoritmo. Para ultrapassar esse problema usa-se uma técnica chamada de Kernel Trick.
Um [[kernel]] é uma forma de aumentar as dimensões sem ter que aumentar a complexidade, para isso é utilizada uma formula como a do [[Kernel Medico]] que faz a multiplicação vectorial de todos os objectos para uma matriz para assim a SVM utilizar estes resultados no calculo dos hiperplanos e ou durante a classificação.
 
 
 
https://www.reddit.com/r/MachineLearning/comments/15zrpp/please_explain_support_vector_machines_svm_like_i/
https://www.quantstart.com/articles/Support-Vector-Machines-A-Guide-for-Beginners

Revisão das 14h59min de 14 de março de 2016

As Support Vector Machines (SVM) são uma das técnicas mais utilizadas em Data Mining quando é necessário construir um classificador para dados constituídos maioritariamente por variáveis numéricas continuas/discretas.

A Ideia por detrás da SVM

A estratégia que a SVM implementa para construir um classificador é bastante simples: Se tivermos x bolas de duas cores Bolas1.png podemos simplesmente colocar uma linha de forma a que se separem Bolas2.png, isto permite-nos saber a partir desta informação que bolas acima da linha são azuis e bolas abaixo são vermelhas, o problema é que a linha pode estar em muitas posições diferentes e aparentemente esta não é a melhor Bolas3.png e por isso recolocamos a linha Bolas4.png de forma a que o classificador seja preciso Bolas5.png. No entanto a realidade é que casos assim não existem, na verdade todos os casos que uma SVM classifica são sempre uma mistura de bolas azuis e vermelhas Bolas6.png e por isso não existe nenhuma linha que separe estes casos Bolas7.png mas de certeza que existe um plano! É por isso aumentamos uma (geralmente varias dimensões diferentes) dimensão para assim encontrar o plano que divide as bolas.Bolas8.png Este passo é o mais complicado de entender pois sabemos que em duas dimensões o que é uma recta e em 3 dimensões um plano mas e em 4 ou em 6,7,20,50,1000 dimensões? É por isso que chamamos de hiperplano ao que separa as bolas vermelhas das azuis.\p

Como encontrar o hiperplano

Primeiro vamos assumir que cada bola é um objecto do tipo {<x1,x2,x3>,<y>} onde x* é os valores das variáveis e y a classe 1 ou -1, assim matematicamente o hiperplano é representado pela seguinte formula w.x*-b=0 onde w é vector de valores que queremos encontrar. Para isso precisamos de mais dois hiperplanos que serão os vectores de suporte estes hiperplanos são construídos a partir dos objectos que estão nas margens de cada classe,SuportVector.png neste caso A,B e C. Apartir destes calculamos então o hiperplano que maximiza a distancia entre os dois hiperplanos de suporte. Sendo que w e b é igual para os 3 hiperplanos ficamos então com w.x*-b = 1 quando y=1 e w.x*-b = -1 quando y=-1 . Desta forma para sabermos qual a classe de um novo objecto so temos que ver qual o sinal do resultado da equação para x*.

Dimensões e Kernels

Dado que os dados nunca estão arranjados da forma que desejamos é necessário acrescentar dimensões, o problema disso é que dado que todas as contas feitas numa svm são produtos vectoriais , acrescentar uma dimensão tem consequências gravíssimas na performance do algoritmo. Para ultrapassar esse problema usa-se uma técnica chamada de Kernel Trick. Um kernel é uma forma de aumentar as dimensões sem ter que aumentar a complexidade, para isso é utilizada uma formula como a do Kernel Medico que faz a multiplicação vectorial de todos os objectos para uma matriz para assim a SVM utilizar estes resultados no calculo dos hiperplanos e ou durante a classificação.


https://www.reddit.com/r/MachineLearning/comments/15zrpp/please_explain_support_vector_machines_svm_like_i/ https://www.quantstart.com/articles/Support-Vector-Machines-A-Guide-for-Beginners