ELKI Kmeans clustering Task failed 高维数据报错

ELKI Kmeans clustering Task failed error for high dimensional data

我在 gensim 中处理了 60000 个文档,并得到了一个 60000*300 矩阵。我将其导出为 csv 文件。当我在 ELKI 环境和 运行 Kmeans 集群中导入它时,出现以下错误。

Task failed
de.lmu.ifi.dbs.elki.data.type.NoSupportedDataTypeException: No data type found satisfying: NumberVector,field AND NumberVector,variable
Available types: DBID DoubleVector,variable,mindim=266,maxdim=300 LabelList
    at de.lmu.ifi.dbs.elki.database.AbstractDatabase.getRelation(AbstractDatabase.java:126)
    at de.lmu.ifi.dbs.elki.algorithm.AbstractAlgorithm.run(AbstractAlgorithm.java:81)
    at de.lmu.ifi.dbs.elki.workflow.AlgorithmStep.runAlgorithms(AlgorithmStep.java:105)
    at de.lmu.ifi.dbs.elki.KDDTask.run(KDDTask.java:112)
    at de.lmu.ifi.dbs.elki.application.KDDCLIApplication.run(KDDCLIApplication.java:61)
    at [...]

以下是我使用过的ELKI设置

错误(当我第一次看到它时,我花了一点时间才明白)说你的数据有 "shape"

variable,mindim=266,maxdim=300

即有些行只有 266 列,有些有 300 列。这可能是文件格式问题,例如由于 NaN、缺失值或类似的错误字符。

如果您尝试 运行 假设数据来自 R^d 向量空间(即 NumberVector,field 要求)的算法,如 kmeans,则会出现该错误,因为输入数据是不符合这个要求。

这听起来很奇怪,但我通过打开导出的 CSV 文件并执行 Save As 并再次保存为 CSV 文件找到了解决此问题的方法。原始文件的大小为 437MB,而第二个文件为 163MB。我使用 numpy 函数 np.savetxt 来保存 doc2vec 向量。所以这似乎是一个 Python 问题而不是 ELKI 问题。


编辑:以上解决方案没有用。我改为导出使用 gensim 库创建的 doc2vec 输出,并且在导出值的格式时明确决定为 %1.22e。即导出的值采用指数格式,值的长度为 22。下面是整行代码。

textVect = model.docvecs.doctag_syn0
np.savetxt('D:\Backup\expo22.csv',textVect,delimiter=',',fmt=('%1.22e'))

CSV 这样创建的文件在 ELKI 环境中运行没有任何问题。