python - 内存有限的kmeans聚类

标签 python google-app-engine scipy cluster-analysis k-means

我正在 App Engine 上开发应用程序,并使用 SciPy 的 kmeans2。

当集群运行时,我得到这个错误:

服务 1 个请求后超过 159.852 MB 的软专用内存限制

这是我正在做的,color_data 将是大约 500 万个 x、y、z 点:

def _cluster(color_data, k):
  """ Clusters colors and return top k 

      Arguments:
      ----------
        color_data
          TYPE: list
          DESC: The pixel rgb values to cluster
        k
          TYPE: int
          DESC: number of clusters to find in the colors

      Returns:
      --------
        sorted_colors
          TYPE: list
          DESC: A list of rgb centroids for each color cluster
  """

  # make rgbs into x,y,z points
  x,y,z = [],[],[]
  for color in color_data:
    x.append(color[0])
    y.append(color[1])
    z.append(color[2])

  # averaged_colors are points at center of color clusters
  # labels are cluster numbers for each point
  averaged_colors, labels = kmeans2(array(zip(x,y,z)), k, iter=10)

  # get count of nodes per cluster
  frequencies = {}
  for i in range(k):
    frequencies[i] = labels.tolist().count(i)

  # sort labels on frequency
  sorted_labels = sorted(frequencies.iteritems(), key=itemgetter(1))

  # sort colors on label they belong to
  sorted_colors = []
  for l in sorted_labels:
    sorted_colors.append(tuple(averaged_colors[l[0]].tolist()))

  return sorted_colors

如何在 128MB 的内存中执行此操作?

编辑: 在我的本地计算机上,运行我的应用程序显示我的事件监视器中使用了大约 500 MB 的内存

最佳答案

不要使用所有像素。

如果您只使用 10% 或更少的像素,K-Means 通常会返回几乎相同的结果。因为它计算均值,并且均值不再有太大变化,如果您添加更多信息,除非数据分布不同。

仅使用 10% 的像素应该会使您的应用程序使用更少的内存。

关于python - 内存有限的kmeans聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17689672/

相关文章:

python - 如何通过 Pandas 中的多级索引执行 'groupby'

python - 在 vs code 中导入的 python 模块中设置断点

java - Google App Engine 服务器将数据发送到云数据存储,即使它通过本地主机运行 :8080

python - scipy 最小化(SLSQP)的限制结果

python - 给定一个表示二维分布的二维 Numpy 数组,如何借助 Numpy 或 Scipy 函数从该分布中采样数据?

python - 奇数计数python

python - 将两列等长合并为一列

google-app-engine - 应用引擎 : Get current serving application version

java - 在哪里可以找到有关数据存储行为的更多诊断信息?

python - 乘以稀疏矩阵的列元素