Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R kmeans()的结果在不同的运行中没有变化_R_Cluster Analysis_K Means - Fatal编程技术网

R kmeans()的结果在不同的运行中没有变化

R kmeans()的结果在不同的运行中没有变化,r,cluster-analysis,k-means,R,Cluster Analysis,K Means,我试图运行几个kmeans,以查看totss得到的不同值。但是当我运行下面的代码时,我得到了50次相同的精确结果(n=50) 知道为什么会这样吗 图片:我删除了set.seed()的内容,并打印了a$iter(迭代次数)。set.seed(runif(1))始终为您提供set.seed(0)。您可以尝试set.seed(i) 您也可以只在循环外部使用单个set.seed 我将runif(1)更改为runif(1)*100,但每次运行都得到相同的输出 我添加了set.seed(),因为如果我删除

我试图运行几个kmeans,以查看
totss
得到的不同值。但是当我运行下面的代码时,我得到了50次相同的精确结果(n=50)

知道为什么会这样吗

图片:我删除了set.seed()的内容,并打印了
a$iter
(迭代次数)。

set.seed(runif(1))
始终为您提供
set.seed(0)
。您可以尝试
set.seed(i)

您也可以只在循环外部使用单个
set.seed


我将
runif(1)
更改为
runif(1)*100
,但每次运行都得到相同的输出

我添加了
set.seed()
,因为如果我删除它,循环会为所有迭代提供相同的结果


我理解你的观点,但问题是有些地方出了问题,因为我在每次运行/迭代中都得到了相同的结果

谁告诉你
kmeans
总是给出随机结果?这取决于数据的外观。下面的示例有两个明确的集群,因此
kmeans
不会显示随机性

set.seed(0)
X <- rbind(matrix(rnorm(100), 50), matrix(rnorm(100, 10), 50))
plot(X)
set.seed(0)
X
set.seed(runif(1))
始终为您提供
set.seed(0)
。您可以尝试
set.seed(i)

您也可以只在循环外部使用单个
set.seed


我将
runif(1)
更改为
runif(1)*100
,但每次运行都得到相同的输出

我添加了
set.seed()
,因为如果我删除它,循环会为所有迭代提供相同的结果


我理解你的观点,但问题是有些地方出了问题,因为我在每次运行/迭代中都得到了相同的结果

谁告诉你
kmeans
总是给出随机结果?这取决于数据的外观。下面的示例有两个明确的集群,因此
kmeans
不会显示随机性

set.seed(0)
X <- rbind(matrix(rnorm(100), 50), matrix(rnorm(100, 10), 50))
plot(X)
set.seed(0)

数据的X太极端,则可能只有一个最佳值

在您显示的数据部分中,第一列是常量(=无所谓),最后一列的大小太小,不重要。另外两个只有两个值。因此,几乎可以肯定的是,我们会发现这个微不足道的二进制分割


所以问题在于你的数据。

数据太过极端,那么可能只有一个最佳值

在您显示的数据部分中,第一列是常量(=无所谓),最后一列的大小太小,不重要。另外两个只有两个值。因此,几乎可以肯定的是,我们会发现这个微不足道的二进制分割


因此,问题是您的数据。

runif(1)返回的值介于0和1之间,set.seed需要一个整数。我怀疑你在每个循环开始时将随机数生成器重置为相同的初始值,因此计算结果完全相同。我不知道你实际上在做什么。是否设置固定的随机种子?对于前者,请参见@李哲源'下面是我的答案;对于后者(没有固定种子),只需删除
set.seed(…)
,每次都会产生一个随机种子。我将“runif(1)”部分改为“set.seed(round(as.numeric(runif(1)*100))”,并且是相同的output@MauritsEvers实际上我添加了“set.seed()”的内容,因为如果我放弃它,对于所有迭代,它仍然给我相同的结果。注意,索引
k
在每次迭代中增加1,但您没有使用它。如果(1)返回一个介于0和1之间的值,并且set.seed需要一个整数,那么它不会改变looprunif中的任何内容。我怀疑你在每个循环开始时将随机数生成器重置为相同的初始值,因此计算结果完全相同。我不知道你实际上在做什么。是否设置固定的随机种子?对于前者,请参见@李哲源'下面是我的答案;对于后者(没有固定种子),只需删除
set.seed(…)
,每次都会产生一个随机种子。我将“runif(1)”部分改为“set.seed(round(as.numeric(runif(1)*100))”,并且是相同的output@MauritsEvers实际上我添加了“set.seed()”的内容,因为如果我放弃它,对于所有迭代,它仍然给我相同的结果。注意,索引
k
在每次迭代中增加1,但您没有使用它。它不会改变你的循环中的任何东西我理解你的观点,但问题是有些地方出了问题,因为我在每次运行/迭代中没有得到相同的结果。我理解你的观点,但问题是有些地方出了问题,因为我在每次运行/迭代中没有得到相同的结果。
set.seed(0)
X <- rbind(matrix(rnorm(100), 50), matrix(rnorm(100, 10), 50))
plot(X)
## 50 run
cl <- replicate(50, kmeans(X, 2), FALSE)

## size[1]
sapply(cl, "[[", c(7, 1))
# [1] 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
#[26] 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50

## size[2]
sapply(cl, "[[", c(7, 2))
# [1] 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
#[26] 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50

## iter
sapply(cl, "[[", 8)
# [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
#[39] 1 1 1 1 1 1 1 1 1 1 1 1
## center
ctr <- lapply(cl, "[[", 2)
unique(ctr)
#[[1]]
#        [,1]        [,2]
#1 0.02393097  0.02140593    ## lower left cluster is the 1st cluster
#2 9.78910937 10.11978752
#
#[[2]]
#        [,1]        [,2]
#1 9.78910937 10.11978752    ## upper right cluster is the 1st cluster
#2 0.02393097  0.02140593
X <- matrix(runif(200), 100)
plot(X)