如何解决在执行 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"。如果将数据分成两半,而一半有问题,请再次拆分并继续,直到只有一小块文件有问题。问题可能出在不止一个地方,这意味着它可能需要一段时间,但如果不是我建议的那样,这似乎仍然是解决问题的最佳方法。
大家好, 我正在对文本文件中的数据执行 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"。如果将数据分成两半,而一半有问题,请再次拆分并继续,直到只有一小块文件有问题。问题可能出在不止一个地方,这意味着它可能需要一段时间,但如果不是我建议的那样,这似乎仍然是解决问题的最佳方法。