Mam zestaw danych z kolumnami a b c
(3 atrybuty). a
jest liczbowy i ciągły, b
a jednocześnie c
jest kategoryczny, każdy z dwoma poziomami. Używam K-Najbliższa metody sąsiadów do klasyfikowania a
i b
na c
. Aby móc mierzyć odległości, przekształcam mój zestaw danych, usuwając b
i dodając b.level1
i b.level2
. Jeśli obserwacja i
ma pierwszy poziom w b
kategoriach, b.level1[i]=1
oraz b.level2[i]=0
.
Teraz mogę zmierzyć odległości w moim nowym zestawie danych: a b.level1 b.level2
Z teoretycznego / matematycznego punktu widzenia: czy możesz wykonać K-najbliższego sąsiada (KNN) z danymi binarnymi i ciągłymi?
Korzystam z FNN
pakietu w R i funkcjiknn()
r
classification
k-nearest-neighbour
k.dkhk
źródło
źródło
Odpowiedzi:
Można łączyć zmienne jakościowe i ciągłe (cechy).
Jakoś nie ma wiele podstaw teoretycznych dla metody takiej jak k-NN. Heurystyka polega na tym, że jeśli dwa punkty są blisko siebie (zgodnie z pewną odległością), to mają one coś wspólnego pod względem wydajności. Może tak może nie. I zależy to od odległości, z której korzystasz.
W swoim przykładzie określasz odległość między dwoma punktami( a , b , c ) i (za′,b′,do′) Jak na przykład :
Odpowiada to niejawnemu podawaniu wag każdej funkcji.
Zauważ, że jeśliza przyjmuje duże wartości (jak 1000, 2000 ...) z dużą zmiennością, wówczas wagi funkcji binarnych będą pomijalne w porównaniu z wagą za . Tylko odległość międzyza i za′ będzie miało znaczenie. I odwrotnie: ifza przyjmuje małe wartości, takie jak 0,001: liczą się tylko funkcje binarne.
Możesz znormalizować zachowanie poprzez ponowne ważenie: dzielenie każdej cechy przez jej odchylenie standardowe. Dotyczy to zarówno zmiennych ciągłych, jak i binarnych. Możesz również podać własne preferowane ciężary.
Pamiętaj, że funkcja R kNN () robi to za Ciebie: https://www.rdocumentation.org/packages/DMwR/versions/0.4.1/topics/kNN
Jako pierwszą próbę użyj po prostu norma = prawda (normalizacja). Pozwoli to uniknąć większości nonsensów, które mogą się pojawić podczas łączenia funkcji ciągłych i kategorycznych.
źródło
Tak, z pewnością możesz używać KNN zarówno z danymi binarnymi, jak i ciągłymi, ale należy pamiętać o kilku ważnych kwestiach.
Wyniki będą silnie informowane przez podziały binarne w odniesieniu do dyspersji wyników o wartościach rzeczywistych (dla wektorów skalowanych 0-1, nieważonych), jak pokazano poniżej:
W tym przykładzie widać, że najbliżsi sąsiedzi z poszczególnych obserwacji pod względem odległości byliby O DUŻO silniej poinformowani przez zmienną binarną niż przez skalowaną zmienną wartości rzeczywistej.
Co więcej, rozciąga się to na wiele zmiennych binarnych - jeśli zmienimy jedną ze zmiennych o wartościach rzeczywistych na binarne, możemy zauważyć, że odległości będą znacznie bardziej świadome poprzez dopasowanie wszystkich zmiennych binarnych, niż w bliskości rzeczywistych wartości:
Będziesz chciał uwzględnić tylko krytyczne zmienne binarne - w rzeczywistości pytasz „o wszystkie obserwacje, które pasują do tej konfiguracji zmiennych binarnych (jeśli istnieją), które mają najbliższe wartości rzeczywiste?” Jest to rozsądne sformułowanie wielu problemów, które można rozwiązać za pomocą KNN, i bardzo słabe sformułowanie innych problemów.
źródło