R
具有連續和二元變量的 K 最近鄰
我有一個包含列
a b c
(3 個屬性)的數據集。a
是數字和連續的,b
而c
是分類的,每個都有兩個級別。我正在使用 K-Nearest Neighbors方法a
對b
.c
因此,為了能夠測量距離,我通過刪除b
和添加b.level1
和來轉換我的數據集b.level2
。如果觀察i
在b
類別中具有第一級,b.level1[i]=1
並且b.level2[i]=0
.現在我可以在我的新數據集中測量距離:
a b.level1 b.level2
從理論/數學的角度來看:您能否對二進制和連續數據執行 K 近鄰 (KNN)?
我
FNN
在 R 和函數中使用包knn()
可以將分類變量和連續變量(特徵)結合起來。
不知何故,對於諸如 k-NN 之類的方法沒有太多的理論依據。啟發式是,如果兩個點彼此靠近(根據一定距離),那麼它們在輸出方面有一些共同點。也許是,也許不是。這取決於您使用的距離。
在您的示例中,您定義了兩點之間的距離和如 :
- 取之間的平方距離和:
- 如果添加 +2和是不同的,如果相等則為 +0(因為您計算每個類別的差異為 1)
- 如果添加 +2和不同,+0 等於(相同)
這對應於為每個特徵隱式賦予權重。
請注意,如果取較大的值(如 1000、2000…)且方差較大,則二元特徵的權重與. 只有之間的距離和真的很重要。反過來:如果採用像 0.001 這樣的小值:只有二進制特徵才會計算在內。
您可以通過重新加權來規範行為:將每個特徵除以其標準偏差。這適用於連續變量和二元變量。您也可以提供自己喜歡的重量。
請注意,R 函數 kNN() 為您執行此操作:https ://www.rdocumentation.org/packages/DMwR/versions/0.4.1/topics/kNN
作為第一次嘗試,只需使用基本的 norm=true (規範化)。這將避免在組合連續和分類特徵時可能出現的大多數無意義的情況。