[英]Assign new data point to cluster in kernel k-means (kernlab package in R)?
我對R的kernlab
包中的kkmeans
函數有疑問。我是這個包的新手,請原諒我,如果我在這里遺漏了一些明顯的東西。
我想將一個新數據點分配給一組集群中的集群,這些集群是使用內核k-means和函數'kkmeans'創建的。 通過常規聚類,可以通過計算新數據點和聚類質心之間的歐幾里德距離來實現此目的,並選擇具有最接近質心的聚類。 在內核k-means中,必須在特征空間中執行此操作。
以kkmeans描述中使用的示例為例:
data(iris)
sc <- kkmeans(as.matrix(iris[,-5]), centers=3)
假設我在這里有一個新數據點,我想將其分配給上面在sc
創建的最近的集群。
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.0 3.6 1.2 0.4
關於如何做到這一點的任何提示? 非常感謝您的幫助。
內核K-means使用內核函數來計算對象的相似性。 在簡單的k-means中,您遍歷所有質心並選擇最小化距離(在使用的度量下)到給定數據點的質心。 在內核方法的情況下( kkmeans
默認內核函數是radial basis function
),您只需循環遍歷質心並選擇最大化內核函數值的那個(在RBF的情況下)或最小化內核引起的距離 (對於任何內核)。 這里提供了將核轉換為距離測量的詳細描述 - 通常由核K
引起的距離可以通過d^2(a,b) = K(a,a)+K(b,b)-2K(a,b)
,但在RBF的情況下,對於所有x
, K(x,x)=1
,你可以最大化K(a,b)
而不是最小化整個K(a,a)+K(b,b)-2K(a,b)
。
要從kkmeans
對象獲取內核函數,可以使用kernelf
函數
> data(iris)
> sc <- kkmeans(as.matrix(iris[,-5]), centers=3)
> K = kernelf(sc)
所以對你的例子
> c=centers(sc)
> x=c(5.0, 3.6, 1.2, 0.4)
> K(x,c[1,])
[,1]
[1,] 1.303795e-11
> K(x,c[2,])
[,1]
[1,] 8.038534e-06
> K(x,c[3,])
[,1]
[1,] 0.8132268
> which.max( c( K(x,c[1,]), K(x,c[2,]), K(x,c[3,]) ) )
[1] 3
在使用的核函數意義上,最接近的質心是c[3,]=5.032692 3.401923 1.598077 0.3115385
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.