如何解决在执行 K-Means 聚类时设置序列错误的数组元素?

How to resolve setting an array element with a sequence error while performing K-Means clustering?

大家好, 我正在对文本文件中的数据执行 k 均值聚类,该文本文件大约有 50k 个样本,每个样本的维度为 128。

我的输入示例:

[1,1,0,0,0,0,1,0,24,3,0,0,0,0,86,149,149,14,0,0,0,0,32,149,46,16,0,0,1,13,3,33,65,66,0,0,0,0,0,2,149,140,6,0,0,2,62,148,88,24,26,2,0,14,116,148,30,15,1,0,0,1,5,30,56,18,0,0,0,0,0,4,149,46,40,14,0,0,1,34,31,46,149,31,0,2,9,12,1,7,8,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,12,2,0,0,0,0,0,0,0,0,0,0,0,0]

(同样是 50k 个样本)

当我在此代码中使用大约 20-30 行输入时,

from sklearn.cluster import MiniBatchKMeans
import numpy 
import csv

f = open("sample_input.txt", "r") 
out = [eval(arr) for arr in f.readlines()]


mbkm = MiniBatchKMeans(init='k-means++', n_clusters=50, batch_size=50,
                       n_init=10, max_no_improvement=10, verbose=0)
mbkm.fit(out)
mbk_means_cluster_centers = mbkm.cluster_centers_

numpy.set_printoptions(threshold=numpy.nan)
print mbk_means_cluster_centers

我得到了输出。但是当我使用整个文件时(无论是文本还是 csv 扩展名),我都会收到错误消息“setting an array element with a sequence”。

当我的代码适用于 20-30 行时,为什么它不适用于 50k 行输入?我假设文本文件的 csv 转换只是通过将文件重命名为 .csv 扩展名。

主要的疑惑是50k行输入如何得到这个代码运行ning?只有解决了这个问题,我才能 运行 它用于另一个具有大约 3,00,000 行输入的数据。请帮忙。提前致谢!

PS:我在 ubuntu 平台的 python 2.7 中编码。

看起来您在某处的一行上有两个或多个列表,这意味着您正在尝试将两个或多个数组(一个序列)作为一个数组来计算。当我用逗号分隔的两个数组对此进行测试时,我得到了与您相同的错误。

试试这个找出错误:

f = open("sample_input.txt", "r") 
n = 1
for line in f.readlines():
    if len(eval(line)) is not 128:
        print "Error is on line %s" % n
    n += 1

否则,我建议"divide and conquer"。如果将数据分成两半,而一半有问题,请再次拆分并继续,直到只有一小块文件有问题。问题可能出在不止一个地方,这意味着它可能需要一段时间,但如果不是我建议的那样,这似乎仍然是解决问题的最佳方法。