【问题标题】:Find nearest neighbor names from KKNN package从 KKNN 包中查找最近的邻居名称
【发布时间】:2013-09-13 06:49:11
【问题描述】:

我一直在尝试构建此程序或了解如何访问 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") 

【问题讨论】:

    标签: r regression nearest-neighbor indices


    【解决方案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。

    【讨论】:

    • 有意思,感谢您花时间回答!在我的完整数据集中,我为 kknn 使用“最佳”内核。有没有办法让 FNN 使用与 kknn 相同的内核,以确保它们使用相同的邻居?这看起来是一个很好的答案,所以谢谢!了解哪些是最近邻的目标是为预测提供上下文。如果有意义的话,我还可以使用 40 个最近的邻居及其趋势,根据他们的统计数据得出某种突破/崩溃/改善/回归百分比!
    • 这是我在实际函数中实际调用的内容,因为我必须尝试构建 get.knnx 来匹配它,我将如何去做? kknn(RVPA~(lag1*lag1LVLlag1PA)+(lag2*lag2LVLlag2PA)+(lag3*lag3LVL*lag3PA)+Age1+PAsize, RV.learn, RV.valid,k=86, 距离= 1,kernel = "最优")
    猜你喜欢
    • 2020-11-05
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多