ELKI - k-means聚类。

时间:2014-06-04 08:47:26

标签: cluster-analysis data-mining k-means elki

我想在命令行中运行ELKI k-means聚类。

与R编程相比,运行时间似乎太短。我试图在R中运行k-means聚类,然后花了大约100秒。 而且,k = 5,k = 10等之间没有变化。

file.tsv有60,000行和25列。

START=$(date +%s)
k=5
java -jar elki.jar KDDCLIApplication \
     -dbc.in "file.tsv" \
         -dbc.parser NumberVectorLabelParser \
         -parser.colsep "\t" \
     -algorithm clustering.kmeans.KMeansLloyd \
         -kmeans.k $k \
         -kmeans.initialization KMeansPlusPlusInitialMeans \
         -kmeans.maxiter 9999 \
     -resulthandler ResultWriter -out.gzip false \
         -out output/k-$k \

END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

输出为"It took 5 seconds"

START=$(date +%s)
k=10
java -jar elki.jar ...
     ...

END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

此案例k=10也是"It took 5 seconds"

为什么群集大小没有变化?代码有问题吗?

1 个答案:

答案 0 :(得分:1)

5秒可能太快,无法让您获得可靠的测量结果。

此外,如果k越大,结果可能会以更少的迭代收敛。

您可能希望使用-time来查看运行实际算法所需的时间。使用您的方法,解析编写将产生不可忽视的影响。 -resulthandler DiscardResultHandler将禁用输出,这对于基准测试也是合理的。

您不需要设置-kmeans.maxiter 9999。默认情况下,ELKI将运行k-means直到收敛。

我认为k-Means ++初始化存在实施方面的弱点,这使得它比必要的成本更高。也许初始化,解析,写作对你的总运行时间有很大贡献。

还尝试使用-resulthandler LogResultStructureResultHandler -verbose来确保解析器按预期理解文件(检查维度!)使用-verbose,您还可以检查它是否进行了合理的迭代次数。