计算新测试数据中每行的线性判别分类函数得分

时间:2014-05-19 15:52:41

标签: r statistics classification

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

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

获得判别函数轴上895个人中每一个的判别函数得分。

现在我想使用前两个判别函数对数千个新案例进行分类(假设它在一个简短的示例文件中有三行)。我将一个新文件test调用到R中,其中包含与ref中的名称相同的矢量(原始测量值)然后我调用z2 <- predict(z, test)但是会​​收到一条警告消息: &#34; 警告信息:&#39; newdata&#39;有3行,但找到的变量有895行&#34; 如何将具有这些分数的新向量添加到我的测试数据框test?或者至少产生这些分数的矩阵。

尽管我从这两个好网站上阅读并尝试了一些内容,但我还是没有设法解决问题:herehere。对于第二个链接,滚动到&#34;判别函数的加载&#34;。

当然,这是一件我很想念的事情......也许reftest数据框架不匹配......

1 个答案:

答案 0 :(得分: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)

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

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

您的lda模型中的所有条款都可能具有“ref $”部分,因此它们与您的新数据不匹配。我不知道为什么他们在那个指南上有那个可怕的公式表示法的例子。我建议像上面那样做。从每个术语中取出data.frame名称并提供data.frame作为第二个参数。这样就可以将名称与新数据相匹配。