У меня есть следующие dataset
(полученного here):Оптимизация K-средства кластеризации с использованием генетического алгоритма
----------item survivalpoints weight
1 pocketknife 10 1
2 beans 20 5
3 potatoes 15 10
4 unions 2 1
5 sleeping bag 30 7
6 rope 10 5
7 compass 30 1
Я группироваться этот набор данных на три группы с kmeans()
используя двоичную строку в качестве моего первоначального выбора центров. Для например:
## 1 represents the initial centers
chromosome = c(1,1,1,0,0,0,0)
## exclude first column (kmeans only support continous data)
cl <- kmeans(dataset[, -1], dataset[chromosome == 1, -1])
## check the memberships
cl$clusters
# [1] 1 3 3 1 2 1 2
Используя эту фундаментальную концепцию, я попробовал его с GA
пакетом для проведения поиска, где я пытаюсь оптимизировать индекс (минимизировать) Davies-Bouldin (DB).
library(GA) ## for ga() function
library(clusterSim) ## for index.DB() function
## defining my fitness function (Davies-Bouldin)
DBI <- function(x) {
## converting matrix to vector to access each row
binary_rep <- split(x, row(x))
## evaluate the fitness of each chromsome
for(each in 1:nrow(x){
cl <- kmeans(dataset, dataset[binary_rep[[each]] == 1, -1])
dbi <- index.DB(dataset, cl$cluster, centrotypes = "centroids")
## minimizing db
return(-dbi)
}
}
g<- ga(type = "binary", fitness = DBI, popSize = 100, nBits = nrow(dataset))
Конечно (я понятия не имею, что происходит), я получил сообщение об ошибке в Warning messages: Error in row(x) : a matrix-like object is required as argument to 'row'
Вот мои вопросы:
- Как правильно можно использовать
GA
пакет, чтобы решить мой проблема? - Как я могу убедиться, что случайно сгенерированных хромосома содержит одинаковое число
1
с, что соответствуетk
количеству кластеров (например, еслиk=3
то хромосома должен содержать ровно три1
S)?
Я не думаю, что этот подход имеет какой-то смысл. Вероятно, это не сработает, потому что k-значит слишком часто сходится к точному решению. –
Есть ли какие-либо предложения, которые вы можете предложить по такой проблеме? мой набор данных слишком мал? –
Я не думаю, что GA + k-означает * когда-либо * имеет смысл. –