我一直在研究 SOM 以及如何获得最佳聚类结果。一种方法是尝试多次运行并选择误差平方和最小的聚类。
但是,我不仅要初始化随机值并尝试多次,还要选择好的参数。我在“Influence of Learning Rates and Neighboring Functions on Self-Organizing Maps”(Stefanovic 2011)中读到,如果您不知道要为邻域函数和学习率选择哪些参数,那么选择高斯可能是最佳选择函数和非线性学习率。
我的数据是一个时间序列,可以说:
matrix(c(sample(seq(from = 10, to = 20, by = runif(1,min=1,max=3)), size = 5000, replace = TRUE),(sample(seq(from = 15, to = 22, by = runif(1,min=1,max=4)), size = 5000, replace = TRUE)),(sample(seq(from = 18, to = 24, by = runif(1,min=1,max=3)), size = 5000, replace = TRUE))),nrow=300,ncol=50,byrow = TRUE) -> data
其中有 300 个观测值,每个观测值有 50 个值。100 个观察值往往更相似。
我正在使用 kohonen 包。
编码:
grid<-somgrid(4,3,"hexagonal")
kohonen<-som(data,grid)
matplot(t(kohonen$codes),col=kohonen$unit.classif,type="l")
给我值在 10 到 22 之间的集群,这类似于 obersations
我也尝试了“som”包,它提供了高斯邻域函数和反时学习率。
som<-som(data,4,3,init="random",alphaType="inverse",neigh="gaussian")
som$visual[,4]<-with(som$visual,interaction(som$visual[,1],som$visual[,2]))
som$visual[,4]<-as.numeric(as.factor(som$visual[,4]))
matplot(t(som$code),col=som$visual[,4],type="l")
在这里,我得到值在 15 和 18 之间的集群,因此所有集群都“缩小”并变得更加相似。使用不同的输入系列,我得到相同的现象
我的两个问题:
1) 为什么使用 som 包的自组织地图中的集群会变得如此相似并缩小到更小的范围,即使据说你得到了具有高斯邻域函数和非线性学习率的良好集群?
2)如何避免使用高斯邻域函数和非线性学习率缩小范围以获得适当的集群?