python – 具有有限内存的kmeans聚类
发布时间:2020-12-20 13:35:54 所属栏目:Python 来源:网络整理
导读:我正在App Engine上开发一个应用程序,并且正在使用SciPy的kmeans2. 群集运行时,我收到此错误: 服务1个请求后,超出159.852 MB的软私有内存限制 这是我正在做的,color_data将是大约500万x,y,z点: def _cluster(color_data,k): """ Clusters colors and retur
我正在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,z points x,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,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以下的内存中做到这一点? 编辑: 解决方法
不要使用所有像素.
如果你只使用10%或更少的像素,K-Means通常会返回几乎相同的结果.因为它计算均值,并且平均值不再有太大变化,如果添加更多信息,除非数据的分布不同. 仅使用10%的像素应该可以使您的应用程序使用更少的内存. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |