Kernelised k Vizinho mais próximo

12

Eu sou novo no kernels e encontrei um problema ao tentar kernelizar o kNN.

Preliminares

Estou usando um kernel polinomial:
K(x,y)=(1+x,y)d

O kNN euclidiano típico usa a seguinte métrica de distância:
d(x,y)=||xy||

Deixe mapear para algum espaço de recurso de maior dimensão. Então o quadrado da métrica de distância acima no espaço de Hilbert pode ser expresso por produtos internos: x d 2 ( f ( x ) , f ( y ) ) = K ( x , x ) - 2 K ( x , y ) + K ( y , y )f(x)xd2(f(x),f(y))=K(x,x)2K(x,y)+K(y,y)

Observe que, se deixarmos o item acima degenerará para sua distância euclidiana padrão.d=1


A questão

O principal problema que tenho é que não consigo ver como o kNN do kernelizing produz melhores resultados, como mostrado experimentalmente por, por exemplo, este artigo (aviso, link direto em pdf!).

Hélice
fonte

Respostas:

24

Teorema de Cover: Grosso modo, ele diz que, dado qualquer conjunto aleatório de pontos finitos (com rótulos arbitrários), então com alta probabilidade esses pontos podem ser linearmente separáveis ​​[1], mapeando-os para uma dimensão mais alta [2].

Implicação: Ótimo, o que esse teorema me diz é que, se eu pegar meu conjunto de dados e mapear esses pontos para uma dimensão mais alta, posso encontrar facilmente um classificador linear. No entanto, a maioria dos classificadores precisa calcular algum tipo de similaridade, como o produto escalar, e isso significa que a complexidade do tempo de um algoritmo de classificação é proporcional à dimensão do ponto de dados. Portanto, dimensão maior significa maior complexidade de tempo (sem mencionar a complexidade do espaço para armazenar esses grandes pontos dimensionais).

Truque do kernel: Seja a dimensão original dos pontos de dados o mapa que mapeia esses pontos para um espaço de dimensão . Agora, se existe uma função que recebe as entradas e do espaço original e calcula , então sou capaz de calcular o produto escalar no espaço dimensional mais alto, mas com complexidade vez de .f N ( > > n ) K x Y K ( x , y ) = f ( x ) , f ( y ) S ( n ) S ( N )nfN(>>n)KxyK(x,y)=f(x),f(y)O(n)O(N)

Implicação: Portanto, se o algoritmo de classificação depende apenas do produto escalar e não depende do mapa real , posso usar o truque do kernel para executar o algoritmo no espaço de alta dimensão, quase sem custo adicional.f

A separabilidade linear implica que os pontos da mesma classe se aproximarão do que os pontos das diferentes classes? Não, não existe essa garantia. A separabilidade linear não implica realmente que o ponto da mesma classe tenha se aproximado ou que os pontos de duas classes diferentes tenham chegado mais longe.

Então, por que o kNN funcionaria? Não precisa! No entanto, se isso acontecer, é puramente por causa do kernel.

O que isso significa? Considere o vetor de recurso booleano . Quando você usa o kernel polinomial de grau dois, o vetor de recurso é mapeado para o vetorx ( x 2 1 , x=(x1,x2)x(x12,2x1x2,x22). A partir de um vetor de características booleanas, apenas usando o polinômio de grau dois, obtivemos um vetor de características de "conjunções". Assim, os próprios kernels produzem alguns mapas de recursos brilhantes. Se seus dados tiverem bons recursos originais e se puderem se beneficiar dos mapas de recursos criados por esses kernels. Por benefício, quero dizer que os recursos produzidos por esses mapas de recursos podem aproximar os pontos da mesma classe e afastar pontos de diferentes classes; então, o kNN se beneficiará do uso de kernels. Caso contrário, os resultados não serão diferentes do que você obtém ao executar o kNN nos dados originais.

Então, por que usar o kernel kNN? Mostramos que a complexidade computacional do uso de kernels é apenas um pouco maior que o kNN usual e se os dados se beneficiam do uso de kernels, por que não usá-los?

Existe algum artigo que estudou qual classe de dados pode se beneficiar dos kernels no kNN? Até onde eu sei, não.

[1] http://en.wikipedia.org/wiki/Linear_separability
[2] http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4038449&tag=1

TenaliRaman
fonte