【发布时间】:2019-10-01 09:02:08
【问题描述】:
我想计算大量数据集的 Calinski-Harabasz 指数。快速测试表明R's clusterCrit implementation in intCriteria 比corresponding function from Python' sklearn 慢得多。这是测试用例(如果需要,我可以分享 test.tsv)。
import numpy as np
import time
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabaz_score
d = np.loadtxt('test.tsv', delimiter='\t')
km = KMeans(n_clusters=2, max_iter=10000)
k = km.fit(d)
start = time.time()
ch = calinski_harabaz_score(d, k.labels_)
end = time.time()
print 'CH:',ch,'time:',(end - start)
运行它(使用 Python 2.7)
python CH.py
#CH: 482.766811373 time: 0.434059858322
在 R 中做同样的事情
library(clusterCrit)
d <- as.matrix(read.table('test.tsv', sep='\t'))
k <- kmeans(d, 2, iter.max = 10000, nstart=10)
start <- Sys.time()
ch <- intCriteria(d, k$cluster, 'Calinski_Harabasz')
end <- Sys.time()
cat('CH:', ch[[1]], 'time:',end-start)
在 R (3.4.4) 中运行它
source('CH.R')
# CH: 482.7726 time: 1.770816
我也尝试使用 fpc package 中的 calinhara 函数,但这也很慢。
有什么方法可以提高 Calinski-Harabasz(以及可能的其他集群有效性指标)R 的速度吗?
【问题讨论】:
标签: python r performance scikit-learn cluster-analysis