R:两个(显然相同的)knn 模型 return 不同的数据

R: Two (apparently same) knn models return different data

我正在使用 R class 包中的 knn 方法创建一个 knn class化模型:

impens_test_pred <- knn(train = train_set, test = test_set, cl = train_set_labels$cleavage, k = 5)
impens_test_pred2 <- knn(train = train_set, test = test_set, cl = train_set_labels$cleavage, k = 5)

但是当我为模型调用 ggmodels.CrossTable 时,混淆 table 是不同的:

CrossTable(x = test_set_labels$cleavage, y = impens_test_pred, prop.chisq=FALSE)
CrossTable(x = test_set_labels$cleavage, y = impens_test_pred2, prop.chisq=FALSE)

|-------------------------|-----------|-----------|-----------|
|test_set_labels$cleavage |     FALSE |      TRUE | Row Total | 
|-------------------------|-----------|-----------|-----------|
|                FALSE    |       266 |         1 |       267 | 
|                         |     0.996 |     0.004 |     0.853 | 
|                         |     0.875 |     0.111 |           | 
|                         |     0.850 |     0.003 |           | 
|-------------------------|-----------|-----------|-----------|
|                 TRUE    |        38 |         8 |        46 | 
|                         |     0.826 |     0.174 |     0.147 | 
|                         |     0.125 |     0.889 |           | 
|                         |     0.121 |     0.026 |           | 
|-------------------------|-----------|-----------|-----------|
|         Column Total    |       304 |         9 |       313 | 
|                         |     0.971 |     0.029 |           | 
|-------------------------|-----------|-----------|-----------|






|-------------------------|-----------|-----------|-----------|
|test_set_labels$cleavage |     FALSE |      TRUE | Row Total | 
|-------------------------|-----------|-----------|-----------|
|                FALSE    |       266 |         1 |       267 | 
|                         |     0.996 |     0.004 |     0.853 | 
|                         |     0.869 |     0.143 |           | 
|                         |     0.850 |     0.003 |           | 
|-------------------------|-----------|-----------|-----------|
|                 TRUE    |        40 |         6 |        46 | 
|                         |     0.870 |     0.130 |     0.147 | 
|                         |     0.131 |     0.857 |           | 
|                         |     0.128 |     0.019 |           | 
|-------------------------|-----------|-----------|-----------|
|         Column Total    |       306 |         7 |       313 | 
|                         |     0.978 |     0.022 |           | 
|-------------------------|-----------|-----------|-----------|

为什么 knn returns 同一个数据有两个不同的模型?我做错了什么?

谢谢!

设置 R 的随机数生成器的种子,这对于创建可以复制的模拟或随机对象很有用。

如果您尝试 运行 与

相同的型号

set.seed(123)

它应该return 相同的结果。

使用 set.seed 时请注意以下行为:

set.seed(123)
sample(1:9, 1) # will always return 3
sample(1:9, 1) # will always return 8

因此,如果您希望两个样本相同,则必须设置两次种子:

set.seed(123)
sample(1:9, 1) # returns 3
set.seed(123)
sample(1:9, 1) # returns 3 again

此行为自然会扩展到 sample 以外的使用随机化的函数。所以如果你想 knn 做两次完全相同的事情,你还需要设置两次种子。