我希望看到 SOM 算法是否可用于分类预测。我曾经编写了以下代码,但是发现分类结果与正确的结果相差甚远。例如,在测试数据集中,我得到了比训练目标变量中的3个值更多的值。我该如何创建一个能够与训练目标变量保持一致的预测模型?
library(kohonen)
library(HDclassif)
data(wine)
set.seed(7)
training <- sample(nrow(wine), 120)
Xtraining <- scale(wine[training, ])
Xtest <- scale(wine[-training, ],
center = attr(Xtraining, "scaled:center"),
scale = attr(Xtraining, "scaled:scale"))
som.wine <- som(Xtraining, grid = somgrid(5, 5, "hexagonal"))
som.prediction$pred <- predict(som.wine, newdata = Xtest,
trainX = Xtraining,
trainY = factor(Xtraining$class))
结果如下:
$unit.classif
[1] 7 7 1 7 1 11 6 2 2 7 7 12 11 11 12 2 7 7 7 1 2 7 2 16 20 24 25 16 13 17 23 22
[33] 24 18 8 22 17 16 22 18 22 22 18 23 22 18 18 13 10 14 15 4 4 14 14 15 15 4
V2.X
版本中存在trainY = factor
参数,但在V3.X
中消失了。我不知道它应该做什么,但是无论有没有它,返回值都是相同的,并且在2017年3月的文档中没有任何痕迹。在我提供的代码中,预测结果在error.df$corrected
中,因此您可以使用以下内容将其附加到测试中:test$predicted <- error.df$corrected
。 - user5730831