Eu tenho um conjunto de dados com colunas a b c
(3 atributos). a
é numérico e contínuo enquanto b
e c
são categóricos, cada um com dois níveis. Eu estou usando o método Vizinhos K-Nearest to classificar a
e b
on c
. Portanto, para poder medir as distâncias, eu transformo meu conjunto de dados removendo b
e adicionando b.level1
e b.level2
. Se a observação i
tiver o primeiro nível nas b
categorias, b.level1[i]=1
e b.level2[i]=0
.
Agora eu posso medir distâncias no meu novo conjunto de dados: a b.level1 b.level2
Do ponto de vista teórico / matemático: Você pode executar o K-vizinho mais próximo (KNN) com dados binários e contínuos?
Estou usando o FNN
pacote em R e a funçãoknn()
r
classification
k-nearest-neighbour
k.dkhk
fonte
fonte
Respostas:
Tudo bem combinando variáveis categóricas e contínuas (recursos).
De alguma forma, não há muito fundamento teórico para um método como o k-NN. A heurística é que, se dois pontos estão próximos um do outro (de acordo com alguma distância), eles têm algo em comum em termos de saída. Talvez sim, talvez não. E isso depende da distância que você usa.
No seu exemplo, você define uma distância entre dois pontos e ( a ' , b ' , c ' ) como:( a , b , c ) ( a′, b′, c′)
Isso corresponde a atribuir pesos implicitamente a cada recurso.
Observe que se assume valores grandes (como 1000, 2000 ...) com grande variação, os pesos dos recursos binários serão desprezíveis em comparação com o peso de a . Somente a distância entre a e a ' será realmente importante. E o contrário: se um leva valores pequenos como 0,001: somente os recursos binários contam.uma uma uma uma′ uma
Você pode normalizar o comportamento repensando: dividindo cada recurso pelo seu desvio padrão. Isso se aplica a variáveis contínuas e binárias. Você também pode fornecer seus próprios pesos preferidos.
Observe que a função R kNN () faz isso por você: https://www.rdocumentation.org/packages/DMwR/versions/0.4.1/topics/kNN
Como primeira tentativa, basta usar basicamente norm = true (normalização). Isso evitará a maior parte do absurdo que possa aparecer ao combinar recursos contínuos e categóricos.
fonte
Sim, você certamente pode usar o KNN com dados binários e contínuos, mas há algumas considerações importantes das quais você deve estar ciente ao fazer isso.
Os resultados serão fortemente informados pelas divisões binárias relativas à dispersão entre os resultados com valor real (para 0-1 vetores dimensionados e não ponderados), conforme ilustrado abaixo:
Você pode ver neste exemplo que os vizinhos mais próximos de uma observação individual por distância seriam MUITO mais informados pela variável binária do que pela variável de valor real em escala.
Além disso, isso se estende a várias variáveis binárias - se alterarmos uma das variáveis com valor real para binário, podemos ver que as distâncias serão muito mais informadas pela correspondência em todas as variáveis binárias envolvidas do que na proximidade dos valores reais:
Você desejará incluir apenas variáveis binárias críticas - na verdade, você está perguntando "de todas as observações que correspondem a essa configuração de variáveis binárias (se houver), que têm os valores reais mais próximos?" Esta é uma formulação razoável de muitos problemas que poderiam ser tratados com o KNN e uma formulação muito pobre de outros problemas.
fonte