r代码中wine.classes的含义

时间:2017-05-14 18:15:48

标签: r

查看一些代码here

guard
    let statusCode = (response as? HTTPURLResponse)?.statusCode,
    statusCode / 100 == 2
else {
    return
}

一切都很有意义,但我只是不理解其中的含义:

data(wines)
set.seed(7)

training <- sample(nrow(wines), 120)
Xtraining <- scale(wines[training, ])
Xtest <- scale(wines[-training, ],
               center = attr(Xtraining, "scaled:center"),
               scale = attr(Xtraining, "scaled:scale"))

som.wines <- som(Xtraining, grid = somgrid(5, 5, "hexagonal"))

som.prediction <- predict(som.wines, newdata = Xtest,
          trainX = Xtraining,
          trainY = factor(wine.classes[training]))
table(wine.classes[-training], som.prediction$prediction)

它来自哪里?任何指针都将非常感激。谢谢!

2 个答案:

答案 0 :(得分:0)

table(wine.classes[-training], som.prediction$prediction)中,无法找到wine.classes并失败。

在上面predict调用中,它没有失败的原因是因为这些参数不会在任何地方使用。如果您查看文档:

## S3 method for class 'kohonen'
predict(object,
        newdata = NULL,
        unit.predictions = NULL,
        trainingdata = NULL,
        whatmap = NULL,
        threshold = 0, 
        ...)

trainX = Xtraining, trainY = factor(wine.classes[training])不是实际参数,因此根据文档...将它们传递到省略号map.kohonen,然后传递到?predict.kohonen

如果我们查看map.kohonen的文档:

## S3 method for class 'kohonen'
map(x, newdata, whatmap = NULL, user.weights = NULL, maxNA.fraction = NULL, ...)

我们可以看到trainXtrainY也会传递给省略号。如果我们阅读省略号的文档,则表示目前已被忽略

因此,它不会因错误而失败,因为wine.classes未在函数内的任何位置使用。

作为证据,从调用中删除它们会返回相同的结果:

> som.prediction <- predict(som.wines, newdata = Xtest,
+                           trainX = Xtraining,
+                           trainY = factor(wine.classes[training]))
> som.prediction2 <- predict(som.wines, newdata = Xtest)
> identical(som.prediction, som.prediction2)
[1] TRUE

答案 1 :(得分:0)

查看包'kohonen'版本3.0.2的文档中的示例:

data(wines)
## som
som.wines <- som(scale(wines), grid = somgrid(5, 5, "hexagonal"))
summary(som.wines)

## xyf
xyf.wines <- xyf(scale(wines), vintages, grid = somgrid(5, 5, "hexagonal"))
summary(xyf.wines)

加载葡萄酒数据集时,会加载名为 vintages 的变量。这与您可能需要的 wine.classes 相同。

顺便说一下,SOM(自组织映射)不需要标签值,因为它是一种非监督算法。 xyf需要标签值,因为它确实是一种监督算法。