R

具有連續和二元變量的 K 最近鄰

  • March 31, 2017

我有一個包含列a b c(3 個屬性)的數據集。a是數字和連續的,bc是分類的,每個都有兩個級別。我正在使用 K-Nearest Neighbors方法ab. c因此,為了能夠測量距離,我通過刪除b和添加b.level1和來轉換我的數據集b.level2。如果觀察ib類別中具有第一級,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 (規範化)。這將避免在組合連續和分類特徵時可能出現的大多數無意義的情況。

引用自:https://stats.stackexchange.com/questions/271043

comments powered by Disqus