使用R得到KNN的不同结果

使用R得到KNN的不同结果,r,machine-learning,r-caret,knn,R,Machine Learning,R Caret,Knn,我使用类包中的knn函数和插入符号包中的knn3函数,使用K近邻算法来拟合a模型 我使用了ISLR包中的Smarket数据集。但是对于相同的K值,(K=10),我得到了不同的结果 使用knn函数得出的结果如下: require(ISLR) require(class) require(caret) str(Smarket) trainx=Smarket[,-c(1,8,9)] trainy=Smarket[,9] set.seed(123) knnm1=knn(trainx,trainx,t

我使用类包中的knn函数和插入符号包中的knn3函数,使用K近邻算法来拟合a模型

我使用了
ISLR
包中的
Smarket
数据集。但是对于相同的K值,(K=10),我得到了不同的结果

使用knn函数得出的结果如下:

require(ISLR)
require(class)
require(caret)
str(Smarket)


trainx=Smarket[,-c(1,8,9)]
trainy=Smarket[,9]
set.seed(123)
knnm1=knn(trainx,trainx,trainy,k=10)
table(knnm1,trainy)

> table(knnm1,trainy)
      trainy
knnm1  Down  Up
  Down  352 206
  Up    250 442
set.seed(123)
knnm2=knn3(Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 + Volume,data=Smarket,k=10)
pred = predict(knnm2, Smarket, type = "class")
table(pred,Smarket[,9])

> table(pred,Smarket[,9])

pred   Down  Up
  Down  353 215
  Up    249 433
使用knn3函数得出的结果如下:

require(ISLR)
require(class)
require(caret)
str(Smarket)


trainx=Smarket[,-c(1,8,9)]
trainy=Smarket[,9]
set.seed(123)
knnm1=knn(trainx,trainx,trainy,k=10)
table(knnm1,trainy)

> table(knnm1,trainy)
      trainy
knnm1  Down  Up
  Down  352 206
  Up    250 442
set.seed(123)
knnm2=knn3(Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 + Volume,data=Smarket,k=10)
pred = predict(knnm2, Smarket, type = "class")
table(pred,Smarket[,9])

> table(pred,Smarket[,9])

pred   Down  Up
  Down  353 215
  Up    249 433
由于结果不同,我不知道哪个函数给出正确的结果

有人能帮我找出为什么这两个函数给出不同的结果吗


谢谢

有趣的区别,我已经做了几次,就是联系软件的“所有者”或“维护者”,以了解计算方式是否存在任何差异。也许试着向他们展示这种差异,看看他们是否意识到存在差异。看起来你的模型还可以,但我有一个问题。为什么有“knn(trainx,trainx,trainy,k=10)”和2 x trainx?您不应该只需要一个吗?@oaxacamatt根据knn函数的语法,它应该这样写。第一列X对应于训练数据。第二列X对应于测试数据。在我的模型中,我使用trainx训练模型,然后根据trainxOk预测结果,我尝试了一下,得到了与您相同的结果。。。嗯,你和教授或助教谈过了吗?@oaxacamatt谢谢你的检查。这实际上是一个自学练习。我们都在一起有趣的差异,我已经做过几次了,就是联系软件的“所有者”或“维护者”,以了解计算方式是否有任何差异。也许试着向他们展示这种差异,看看他们是否意识到存在差异。看起来你的模型还可以,但我有一个问题。为什么有“knn(trainx,trainx,trainy,k=10)”和2 x trainx?您不应该只需要一个吗?@oaxacamatt根据knn函数的语法,它应该这样写。第一列X对应于训练数据。第二列X对应于测试数据。在我的模型中,我使用trainx训练模型,然后根据trainxOk预测结果,我尝试了一下,得到了与您相同的结果。。。嗯,你和教授或助教谈过了吗?@oaxacamatt谢谢你的检查。这实际上是一个自学练习。我们都在一起