【问题标题】:Calculating linear discriminant classification function scores for each row in new test data计算新测试数据中每一行的线性判别分类函数分数
【发布时间】:2014-07-07 16:05:28
【问题描述】:

我无法在线性判别函数分析 (DFA) 中对新案例进行分类 - 特别是根据原始变量计算每个新测试案例的判别函数值,因此我可以绘制并覆盖训练数据中的点。

对于我的训练数据框ref,我使用z <-lda(ref$species ~ ref$v1 + ref$v2 + ref$v3 ...etc... + ref$v14) 对包含 895 行和 14 个测量变量的数据集执行了线性 DFA,我得到了 7 个 LD 函数。然后我使用predict通过z1 <-predict(z)$x获得判别函数轴上895个人中每一个人的判别函数分数

现在我想使用前两个判别函数对数千个新案例进行分类(假设它在一个简短的示例文件中有三行)。我将一个新文件 test 调用到 R 中,它具有与 ref 中的名称相同的向量(原始测量值)然后我调用 z2 <- predict(z, test) 但收到一条警告消息: "警告消息:'newdata' 有 3 行,但找到的变量有 895 行" 我怎样才能简单地将具有这些分数的新向量附加到我的测试数据框test?或者至少生成这些分数的矩阵。

尽管阅读并尝试了这两个不错的网站:herehere,但我还是没有设法解决问题。对于第二个链接,滚动到“判别函数的载荷”。

当然这是我缺少的一些简单的东西......也许reftest 数据帧不匹配......

【问题讨论】:

    标签: r statistics classification


    【解决方案1】:

    使用您列出的第二个网站的示例数据,我能够运行

    wine <- read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data", sep=",")
    wine.lda <- lda(V1 ~ V2 + V3 + V4 + V5 + V6 + V7 +
        V8 + V9 + V10 + V11 + V12 + V13 + V14, wine)
    
    #create "new" data                                
    ss<-aggregate(.~V1, wine, mean)[-1]
    
    #predict on new data
    predict(wine.lda, ss)
    

    所以我认为问题在于您如何指定模型(或者实际上是模型协变量的名称)。我认为 predict 会检查以确保

    attr(wine.lda$terms,"term.labels") == names(ss)
    

    很可能您的 lda 模型中的所有术语都有“ref$”部分,因此它们与您的新数据不匹配。我不知道为什么他们在该指南上有那个糟糕的公式符号示例。我会建议像上面那样做。从每个术语中删除 data.frame 名称并将 data.frame 作为第二个参数提供。这应该可以将名称与新数据进行匹配。

    【讨论】:

    • 非常感谢@MrFlick,使用attr() 我能够弄清楚发生了什么并进行了相应的修复。感谢您的麻烦回复,现在很好地哼唱。
    猜你喜欢
    • 2011-08-03
    • 2018-02-07
    • 2023-04-02
    • 2020-02-04
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多