1

我一直在尝试构建这个程序或找出如何访问 KKNN 所做的工作以产生其结果。我正在使用 KKNN 函数和包来帮助预测未来的棒球统计数据。它包含 11 个预测变量(之前 3 年的统计数据、PA 和水平,以及年龄和另一个预测变量)。预测效果很好,但我希望做的是,当我只预测一名球员时(因为这在预测 100 名球员时会很荒谬),我希望看到可能与相关球员最近的 3 个邻居以及他们之前的统计他们明年生产的产品。我最关心最近邻居的名称,因为知道哪些玩家最接近将为它做出的预测提供背景信息。

如果这是获得这些功能的唯一方法,我可以尝试将实际代码编辑到函数中。即使找到索引也会有所帮助,因为我可以从那里反向求解以获取名称。非常感谢您的所有帮助!

这是一些应该有帮助的示例代码:

name=c("McGwire,Mark","Bonds,Barry","Helton,Todd","Walker,Larry","Pujols,Albert","Pedroia,Dustin")
z
lag1=c(100,90,75,89,95,70)
lag2=c(120,80,95,79,92,90)
Runs=c(65,120,105,99,65,100)
full=cbind(name,lag1,lag2,Runs)
full=data.frame(full)
learn=full
learn
learn$lag1=as.numeric(as.character(learn$lag1))
learn$lag2=as.numeric(as.character(learn$lag2))
learn$Runs=as.numeric(as.character(learn$Runs))
valid=learn[5,]
learn=learn[-5,]
valid

k=kknn(Runs~lag1+lag2,learn,valid,k=2,distance=1)
summary(k)
fit=fitted(k)
fit

这是我实际调用的函数,如果它可以帮助您定制解决方法的答案!

kknn(RVPA~(lag1*lag1LVL*lag1PA)+(lag2*lag2LVL*lag2PA)+(lag3*lag3LVL*lag3PA)+Age1‌​+PAsize, RV.learn, RV.valid,k=86, distance = 1,kernel = "optimal") 
4

1 回答 1

1

这是您的示例的略微修改版本:

full= data.frame(
name=c("McGwire,Mark","Bonds,Barry","Helton,Todd","Walker,Larry","Pujols,Albert","Pedroia,Dustin"),
lag1=c(100,90,75,89,95,70),
lag2=c(120,80,95,79,92,90),
Runs=c(65,120,105,99,65,100)
)

library(kknn)
train=full[full$name!="Bonds,Barry",]
test=full[full$name=="Bonds,Barry",]
k=kknn(Runs~lag1+lag2,train=train, test=test,k=2,distance=1)

这预测 Bonds 将有 80.2 次运行。Runs 变量就像一个类标签,如果您调用k$CL,您将返回 65 和 99(对应于两个最近邻居的运行次数)。有两名球员(McGwire、Pujols)跑了 65 次,一名跑了 99 次,所以你无法直接分辨出邻居是谁。似乎 的输出kknn不包括测试集的最近邻居列表(尽管您可能会从各种输出中将其删除)。

但是,该FNN包将允许您以您想要的方式对您的训练数据进行查询:

library(FNN)
get.knnx(data=train[,c("lag1","lag2")], query=test[,c("lag1","lag2")],k=2)
$nn.index
 [,1] [,2]
[1,]    3    4

$nn.dist
     [,1] [,2]
[1,] 1.414214   13

train[c(3,4),"name"]
[1] Walker,Larry  Pujols,Albert

所以邦兹最近的邻居是普约尔斯和沃克。

于 2013-09-09T19:37:21.820 回答