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

时间:2018-03-30 13:26:02

标签: r knn

我正在使用R class包中的knn metod创建一个knn分类模型:

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时,混淆表是不同的:

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会为同一数据返回两个不同的模型?我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

设置R的随机数生成器的种子,这对于创建可以再现的模拟或随机对象非常有用。

如果您尝试使用

运行相同的模型

set.seed(123)

它应该返回相同的结果。

答案 1 :(得分:1)

使用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两次执行完全相同的操作,则还需要将种子设置两次。