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 环境中运行没有任何问题。
我在 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 环境中运行没有任何问题。