Учитывая набор точек, я пытаюсь выбрать подмножество из n точек, которые наиболее равномерно распределены по этому набору точек. Другими словами, я пытаюсь проредить набор данных, сохраняя при этом равномерную выборку по всему пространству.
Пока у меня есть следующее, но этот подход, вероятно, не подойдет для больших наборов данных. Возможно, есть более разумный способ выбрать подмножество точек в первую очередь... Следующий код случайным образом выбирает подмножество точек и стремится минимизировать расстояние между точками в этом подмножестве и точками вне этого подмножества. .
Предложения приветствуются!
evenSubset <- function(xy, n) {
bestdist <- NA
bestSet <- NA
alldist <- as.matrix(dist(xy))
diag(alldist) <- NA
alldist[upper.tri(alldist)] <- NA
for (i in 1:1000){
subset <- sample(1:nrow(xy),n)
subdists <- alldist[subset,-subset]
distsum <- sum(subdists,na.rm=T)
if (distsum < bestdist | is.na(bestdist)) {
bestdist <- distsum
bestSet <- subset
}
}
return(xy[bestSet,])
}
xy2 <- evenSubset(xy=cbind(rnorm(1000),rnorm(1000)), n=20)
plot(xy)
points(xy2,col='blue',cex=1.5,pch=20)