我一直在尝试构建这个程序,或者找出如何访问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")
答案 0 :(得分: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
所以最接近邦德的邻居是Pujols和Walker。