我正在进行一个项目,这是我课程的一部分。这是一个高级数据库管理系统的项目,内容如下。
1)下载大量图片(100万张) –> 已完成
2)根据它们的视觉相似性进行聚类
a)找出每张图片的直方图 –> 已完成
b)现在根据它们的视觉相似性对图片进行分组(聚类)。
现在,我在第2b部分遇到了问题。我做了以下工作:
A)我使用Matlab找到了每张图片的直方图,现在用一个1D向量(16 x 16 x 16)来表示它。单个向量中有4096个值。
B)我生成了一个ARFF文件。它的格式如下。有100万个直方图(每张图片一个,因此文件中有100万行),每行有4097个值(图片名称 + 4096个双精度值来表示直方图)
C)文件大小为34 GB。最大的问题是:我该如何聚类这个文件?
我尝试使用了Weka和其他在线工具。但它们都卡住了。Weka卡在“读取文件”上。
我的桌面电脑有8 GB的RAM。我没有访问任何集群。我尝试过谷歌搜索,但找不到关于聚类大数据集的有用信息。我该如何聚类这些条目?
这是我的想法:
方法一:
我应该以50,000为一批来做吗?比如,先聚类前50,000个条目。找出尽可能多的聚类,称它们为k1,k2,k3… kn。
然后选择接下来的50,000个,并将它们分配到这些聚类中的一个,依此类推?这是否能准确地代表所有图片。因为,聚类仅基于前50,000张图片!
方法二:
使用随机的50,000个条目进行上述过程?
有任何建议吗?
谢谢!
编辑1:
可以使用任何聚类算法。
回答:
Weka不是你处理这个的最佳工具。我发现ELKI在聚类方面更加强大(而且更快)。我处理过的最大数据集是大约300万个对象,128维度。
然而,请注意,在这种规模和维度下,你的主要关注点应该是结果质量。
如果你运行例如k-means,结果基本上是随机的,因为你使用了4096个直方图箱(太多了,特别是使用平方欧几里得距离时)。
为了获得好的结果,你需要退后一步,多思考一些。
-
是什么让两张图片相似。你如何衡量相似性?首先验证你的相似性度量方法。
-
哪个算法可以使用这种相似性概念?首先在小数据集上验证算法。
-
如何通过索引或并行处理来扩展算法?
根据我的经验,颜色直方图在色调8个箱 x 饱和度3个箱 x 亮度3个箱的范围内效果最好。超过这个范围,分箱过于细致。这会破坏你的相似性度量。
如果你运行k-means,增加更多数据不会带来任何好处。它寻找统计均值,增加更多数据不会找到不同的均值,只会增加一些精度的小数位。因此,你不妨只使用10,000或100,000张图片的样本,你将得到几乎相同的结果。