我正在使用k-means的scipy实现,并且需要一种方法来循环计算n次,记录每个循环的质心的输出数组,并以最高的可能性计算输出。 编辑我设置k = 4,所以每个解决方案都有4个元素。我需要确定最频繁出现的质心数组(即4个元素的集合)。
我的质心数组看起来像:
[[ 75]
[115]
[163]
[ 16]]
在手动运行代码时,由于k-means的随机属性,有4-6个解决方案出现。基本上我想计算每个数组在n上的出现次数并返回最可能的数组。
根据Jblasco对问题的解释,EDIT 澄清。
每次算法运行时,它都会返回一个像上面那样的质心数组。运行算法3次,我有类似的东西:
[[ 75] [[ 73] [[ 75]
[115] [112] [115]
[163] [167] [163]
[ 16]], [ 14]], [ 16]]
我想完成两件事:
1)循环生成这些质心的代码
2)确定最可能的(频繁的,常见的)解决方案,在这种情况下将是:
[[ 75]
[115]
[163]
[ 16]]
答案 0 :(得分:0)
如果我理解正确的话,你会得到一个看起来像你所展示的数组的n次,并且你想要计算75在数组中的次数,115在数组中等等,依此类推。如果这是正确的,我会想到:
keep_count = {}
for attempt in range(n):
get_one_of_those_arrays <-- sorry, no idea how the function of k-means work
for result in array:
if keep_count.has_key(result):
keep_count[result] +=1
else:
keep_count[result] = 1
现在keep_count包含每个结果数字的所有出现次数。稍微优雅一点的方法是使用defaultdict:
import collections
keep_count = collections.defaultdict(int) # initializes dict to int 0, no more if
for attempt in range(n):
get_one_of_those_arrays
for result in array:
keep_count[result] += 1
答案 1 :(得分:0)
好的,现在我明白了你的意思,让我们重新开始,好吗?对类似问题的思考方式类似。我承认这不是最优雅的可能性,但我认为它有效且直观:
keep_count = {}
for attempt in range(n):
array = get_one_of_those_arrays <-- sorry, no idea how the function of k-means work
array = tuple(array.reshape(4))
if keep_count.has_key(array):
keep_count[array] +=1
else:
keep_count[result] = 1
现在我们只需找到最大值的位置:
max_value = max(keep_count.values())
max_pos = keep_count.values().index(max_value)
most_frequent = keep_count.keys()[max_pos]