gpt4 book ai didi

r - 如何将新数据映射/绘制到训练有素的 SOM map 上?

转载 作者:行者123 更新时间:2023-12-05 07:32:14 25 4
gpt4 key购买 nike

训练 SOM 后,如何将新数据绘制到 SOM 上并可视化它如何映射到 SOM 上?理想情况下,我希望用相应的分类颜色和节点位置绘制它。 identify() 具有根据 SOM map 上的选择精确定位数据的能力,但它非常有限,一次只能做一个。我想映射整个(新)数据集并将其可视化。我可以使用 map() 和组关联获取节点位置,但如何手动将新点绘制到 SOM 上?在 Internet 或 kohonen R 文档中找不到任何相关内容。感谢任何帮助。

library(kohonen)
data(wines)
wines.train<-wines[1:150,]
wines.test<-wines[151:nrow(wines),]
wines.sc <- scale(wines.train)

set.seed(7)
wines.som<-som(wines.sc, grid = somgrid(5, 4, "hexagonal"),rlen=150,alpha=c(0.05,0.01))
wines.hc<-cutree(hclust(dist(wines.som$codes[[1]])),6)
plot(wines.som,type="mapping",bgcol=rainbow(6)[wines.hc])
add.cluster.boundaries(wines.som,wines.hc)

可用于手动检查 SOM 上的特定节点

identify(wines.som$grid$pts,labels=as.vector(wines.hc),plot=T,pos=T) 

将新数据映射到经过训练的 SOM

wines.map<-map(wines.som,scale(wines.test))
wines.test.grp<-sapply(wines.map$unit.classif,function(x) wines.hc[[x]])

最佳答案

在我看来,需要注意的一件事是您不应使用其中的值来缩放测试数据。您应该使用训练数据的缩放参数来缩放测试数据。因为模型是使用训练数据中的信息训练的。它没有看到测试数据。

所以你的缩放测试数据应该是这样的:

wines.test.scale <- scale(wines.test, center = attr(wines.sc, 'scaled:center'), scale = attr(wines.sc, 'scaled:scale'))

现在您可以为您的模型分配一个新成员。这是每个数据到每个模型节点的距离测量。因为您将数据拆分为训练和测试,所以可以将两个新成员添加到您的模型中,即训练距离和测试距离。我给它们取名为train.map和test.map,因为这个过程可以看作是输入数据到模型的map的映射过程。

wines.som$train.map <- apply(
wines.sc, 1, function(input1) {
apply(
wines.som$codes[[1]], 1, function(input2) dist(rbind(input1, input2))
)
}
)

wines.som$test.map <- apply(
wines.test.scale, 1, function(input1) {
apply(
wines.som$codes[[1]], 1, function(input2) dist(rbind(input1, input2))
)
}
)

我认为必须将变量放入模型中,因为一旦内核附加了库,它就会用包的函数覆盖基本绘图函数,直到分离包为止。新的绘图函数必须识别正在处理的变量具有适当的类。

现在您可以绘制个人输入数据到模型网络的映射。您可以在此处放置两个阶段:训练数据映射和测试数据映射。

par(mfrow = c(5,5))
for (a in 1:ncol(wines.som$train.map)) {
plot(
wines.som, type = 'property', property = wines.som$train.map[,a],
main = paste('train',a)
)
}

par(mfrow = c(5,5))
for (a in 1:ncol(wines.som$test.map)) {
plot(
wines.som, type = 'property', property = wines.som$test.map[,a],
main = paste('test',a)
)
}

关于r - 如何将新数据映射/绘制到训练有素的 SOM map 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51371075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com