J'ai un ensemble de données avec des colonnes a b c
(3 attributs). a
est numérique et continue tandis que b
et c
sont catégoriques chacun avec deux niveaux. J'utilise la méthode K-Neighbors la plus proche de classer a
et b
sur c
. Donc, pour pouvoir mesurer les distances, je transforme mon ensemble de données en supprimant b
et en ajoutant b.level1
et b.level2
. Si l'observation i
a le premier niveau dans les b
catégories, b.level1[i]=1
et b.level2[i]=0
.
Maintenant, je peux mesurer les distances dans mon nouvel ensemble de données: a b.level1 b.level2
D'un point de vue théorique / mathématique: Pouvez-vous effectuer K-plus proche voisin (KNN) avec des données binaires et continues?
J'utilise le FNN
package dans R et la fonctionknn()
Réponses:
C'est correct de combiner des variables catégorielles et continues (fonctionnalités).
D'une certaine manière, il n'y a pas beaucoup de fondement théorique pour une méthode telle que k-NN. L'heuristique est que si deux points sont proches l'un de l'autre (selon une certaine distance), alors ils ont quelque chose en commun en termes de sortie. Peut-être que oui, peut-être que non. Et cela dépend de la distance que vous utilisez.
Dans votre exemple, vous définissez une distance entre deux points et tels que:(a,b,c) (a′,b′,c′)
Cela correspond à donner implicitement des poids à chaque caractéristique.
Notez que si prend de grandes valeurs (comme 1000, 2000 ...) avec une grande variance, alors les poids des caractéristiques binaires seront négligeables par rapport au poids de . Seule la distance entre et importera vraiment. Et l'inverse: si prend de petites valeurs comme 0,001: seules les fonctionnalités binaires compteront.a a a a′ a
Vous pouvez normaliser le comportement en repesant: divisant chaque fonction par son écart-type. Cela s'applique aux variables continues et binaires. Vous pouvez également fournir vos propres poids préférés.
Notez que la fonction R kNN () le fait pour vous: https://www.rdocumentation.org/packages/DMwR/versions/0.4.1/topics/kNN
Dans un premier temps, utilisez simplement norm = true (normalisation). Cela évitera la plupart des non-sens qui peuvent apparaître lors de la combinaison de caractéristiques continues et catégorielles.
la source
Oui, vous pouvez certainement utiliser KNN avec des données binaires et continues, mais vous devez être conscient de certaines considérations importantes lorsque vous le faites.
Les résultats vont être fortement informés par les divisions binaires relatives à la dispersion entre les résultats à valeur réelle (pour les vecteurs non pondérés à l'échelle 0-1), comme illustré ci-dessous:
Vous pouvez voir dans cet exemple que les voisins les plus proches d'une observation individuelle par la distance seraient BEAUCOUP plus informés par la variable binaire que par la variable de valeur réelle mise à l'échelle.
De plus, cela s'étend à plusieurs variables binaires - si nous changeons l'une des variables à valeur réelle en binaire, nous pouvons voir que les distances seront beaucoup plus informées en faisant correspondre toutes les variables binaires impliquées que dans la proximité des valeurs réelles:
Vous voudrez n'inclure que les variables binaires critiques - vous demandez en fait "à toutes les observations qui correspondent à cette configuration de variables binaires (le cas échéant), qui ont les valeurs réelles les plus proches?" Il s'agit d'une formulation raisonnable de nombreux problèmes qui pourraient être traités avec KNN, et d'une formulation très médiocre d'autres problèmes.
la source