Пределы размера для матрицы расстояний вытекают из максимально допустимого значения индекса. Это значение зависит от машины.
Для огромного количества n данных решение состоит в том, чтобы выбрать случайное репрезентативное подмножество последовательностей, вычислить различия для этого подмножества и сгруппировать подмножество.
Если членство в кластере необходимо для каждой отдельной последовательности, вы можете идентифицировать медоид каждого из кластеров, полученных из подмножества, а затем назначить каждую отдельную последовательность ближайшему медоиду. Для кластеров k это требует вычисления n x k расстояний вместо полной попарной матрицы.
Я проиллюстрировал ниже, используя biofam
данные, поставляемые с TraMineR.
Обратите внимание, что до версии 2.2-0.1 TraMineR проверял размер попарной матрицы расстояний, даже когда использовалось refseq
. Это было исправлено в разрабатываемой версии, доступной по адресу https://r-forge.r-project.org/R/?group_id=743.
library(TraMineR)
data(biofam)
b.seq <- seqdef(biofam[, 10:25])
## compute pairwise distances on a random subset
spl <- sample(nrow(b.seq),400)
bs.seq <- b.seq[spl,]
d.lcs <- seqdist(bs.seq, method="LCS", full.matrix=FALSE)
## cluster the random subset
bs.hclust <- hclust(as.dist(d.lcs), method="ward.D")
#plot(bs.hclust, labels=FALSE)
cl <- cutree(bs.hclust,k=4)
## plot clusters for random subset
seqdplot(bs.seq, group=cl, border=NA)
## Medoids of the clusters
c.cl <- disscenter(d.lcs, group=cl, medoids="first")
seqiplot(bs.seq[c.cl,]) # plot of the medoids
## distances to each medoids
dc <- matrix(0,nrow=nrow(b.seq),ncol=length(c.cl))
for (i in 1:length(c.cl)) {
dc[,i] <- seqdist(b.seq,method="LCS",refseq=spl[c.cl[i]])
}
## cluster membership for the full sequence dataset
## is for each row the column with the smallest distance
cl.all <- max.col(-dc)
## now we can plot clusters for the whole dataset
seqdplot(b.seq, group=cl.all, border=NA)