Это не идеальное решение, просто грубая сила. То, что вы спрашиваете, - не простая вычислительная проблема (вы можете прочитать об этом: проблема многоканального разбиения ).
вот мое грубое решение R, предполагающее, что ваши данные являются данными кадр:
k <- 3 # define how many clusters you want
#A really simple gleedy clustering algorithm, basically you start each list with an elemnt and add the next element to the lowest scoring list
clustering <- function(df,k){
clusters <- list()
for (r in 1:k) {
clusters[[r]] <- df[r,]
}
for (i in 4:nrow(df)){
a = data.frame(sum(clusters[[1]]$expenses))
for (j in 2:k) {
a = rbind(a,sum(clusters[[j]]$expenses))
}
minimo = which.min(a[,1])
clusters[[minimo]] <- rbind(clusters[[minimo]],df[i,])
}
return(clusters)
}
#calculate the difference between the lowest and highest list
distance <- function(){
A <- clustering(df,k)
for (k in 1:k) {
start <- c(start,sum(A[[k]]$expenses))
}
distance <- max(start) - min(start)
return(distance)
}
#repeat the process with a diferent starting point and save the clusters which has the lowest variance
max.distance = distance()
Clusters <- clustering(df,k)
for (i in 2:50) {
df <- slice(df, sample(1:n()))
g=distance()
if (max.distance>g) {
max.distance <- distance()
Clusters <- clustering(df,k)
}
}