Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Calinski-Harabasz在R clusterCrit中的计算速度比Python sklearn慢_Python_R_Performance_Scikit Learn_Cluster Analysis - Fatal编程技术网

Calinski-Harabasz在R clusterCrit中的计算速度比Python sklearn慢

Calinski-Harabasz在R clusterCrit中的计算速度比Python sklearn慢,python,r,performance,scikit-learn,cluster-analysis,Python,R,Performance,Scikit Learn,Cluster Analysis,我想计算大量数据集的卡林斯基-哈拉巴斯指数。一个快速测试表明,这比传统方法慢得多。下面是测试用例(如果需要,我可以共享test.tsv) 运行它(使用Python 2.7) 在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 <-

我想计算大量数据集的卡林斯基-哈拉巴斯指数。一个快速测试表明,这比传统方法慢得多。下面是测试用例(如果需要,我可以共享test.tsv)

运行它(使用Python 2.7)

在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)
我还试着从中使用calinhara函数,但速度也很慢


有什么方法可以提高Calinski-Harabasz(可能还有其他集群有效性指标)R的速度吗?

您尝试过在的版本中运行代码吗?我相信你会看到进步的


此外,您似乎没有考虑到编译到python中间语言所需的时间,因为您的数据相对较小,并且只运行一次代码。当您多次运行它时,比较是否会改变?

由于解释器的原因,纯R通常非常慢

要了解这一点,请比较
fpc
dbscan
软件包中的dbscan

如果您想让R模块更快,可以用Fortran或C重写代码


这在很大程度上也适用于Python(尽管Python解释器似乎比R稍快)。但在许多情况下,主要任务是
numpy
code,这是低级别优化的。在其他情况下,sklearn包括
cython
模块,这是Python的一个子集,可以编译成C,然后再编译成本机代码。

谢谢您的建议。我没有试过微软的R(不知道)。我试过多次,结果速度差不多。
python CH.py
#CH: 482.766811373 time: 0.434059858322
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)
source('CH.R')
# CH: 482.7726 time: 1.770816