繁体   English   中英

在内核k-means(R中的kernlab包)中将新数据点分配给集群?

[英]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的情况下,对于所有xK(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM