jac*_*ode 8 optimization r sparse-matrix k-means genetic-algorithm
我正在使用GA包,我的目标是找到k-means聚类算法的最佳初始质心位置.我的数据是TF-IDF得分中的稀疏矩阵,可以在这里下载.以下是我实施的一些阶段:
0.库和数据集
library(clusterSim) ## for index.DB()
library(GA) ## for ga()
corpus <- read.csv("Corpus_EnglishMalay_tfidf.csv") ## a dataset of 5000 x 1168
Run Code Online (Sandbox Code Playgroud)
1.二进制编码并生成初始种群.
k_min <- 15
initial_population <- function(object) {
## generate a population to turn-on 15 cluster bits
init <- t(replicate(object@popSize, sample(rep(c(1, 0), c(k_min, object@nBits - k_min))), TRUE))
return(init)
}
Run Code Online (Sandbox Code Playgroud)
2.健身功能最小化Davies-Bouldin(DB)指数.我在哪里评估生成的每个解决方案的DBI
initial_population.
DBI2 <- function(x) {
## x is a vector of solution of nBits
## exclude first column of corpus
initial_centroid <- corpus[x==1, -1]
cl <- kmeans(corpus[-1], initial_centroid)
dbi <- index.DB(corpus[-1], cl=cl$cluster, centrotypes = "centroids")
score <- -dbi$DB
return(score)
}
Run Code Online (Sandbox Code Playgroud)
3.运行GA.有了这些设置.
g2<- ga(type = "binary",
fitness = DBI2,
population = initial_population,
selection = ga_rwSelection,
crossover = gabin_spCrossover,
pcrossover = 0.8,
pmutation = 0.1,
popSize = 100,
nBits = nrow(corpus),
seed = 123)
Run Code Online (Sandbox Code Playgroud)
4.问题.kmeans中的错误(语料库[-1],initial_centroid):初始中心不是明显的.
我在这里发现了类似的问题,用户还必须使用参数动态传递要使用的簇数.它通过硬编码簇的数量来解决.但是对于我的情况,我真的需要动态传递簇的数量,因为它来自随机生成的二进制向量,其中那些1's将代表初始质心.
检查kmeans() 代码,我注意到错误是由重复的中心引起的:
if(any(duplicated(centers)))
stop("initial centers are not distinct")
Run Code Online (Sandbox Code Playgroud)
我编辑了该kmeans函数trace以打印出重复的中心.输出:
[1] "206" "520" "564" "1803" "2059" "2163" "2652" "2702" "3195" "3206" "3254" "3362" "3375"
[14] "4063" "4186"
Run Code Online (Sandbox Code Playgroud)
这显示随机选择没有重复,initial_centroids我不知道为什么这个错误不断发生.还有什么会导致这个错误吗?
P/S:我知道有些人可能会建议GA + K-means不是一个好主意.但我确实希望完成我的开始.最好将此问题视为K均值问题(至少在解决initial centers are not distinct错误时).
从问题的本质来看,遗传算法不太适合优化 k 均值 - 初始化种子相互作用太多,ga 不会比对所有可能的种子进行随机采样更好。
所以我的主要建议是不要在这里使用遗传算法!
如果你坚持,你需要做的是检测坏参数,然后简单地返回坏初始化的坏分数,这样它们就不会“生存”。
| 归档时间: |
|
| 查看次数: |
1546 次 |
| 最近记录: |