gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:22:50 24 4
gpt4 key购买 nike

我对 R 的 kernlab 包中的 kkmeans 函数有疑问。我是这个包的新手,如果我在这里遗漏了一些明显的东西,请原谅我.

我想将一个新数据点分配给一组集群中的一个集群,这些集群是使用内核 k-means 和函数“kkmeans”创建的。对于常规聚类,可以通过计算新数据点与聚类质心之间的欧几里德距离来实现这一点,并选择具有最近质心的聚类。在内核 k 均值中,必须在特征空间中执行此操作。

以 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 均值中,您循环遍历所有质心并选择一个使到给定数据点的距离(在使用的度量下)最小化的质心。如果使用核方法(kkmeans 中的默认核函数是径向基函数),您只需循环质心并选择最大化核函数值的一个(对于 RBF)或最小化内核诱导距离(对于任何内核)。提供了将内核转换为距离度量的详细说明here - 一般来说,内核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

关于r - 将新数据点分配给内核 k-means 中的簇(R 中的 kernlab 包)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11621642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com