用于产品数据分析的最佳Python集群库

时间:2011-02-15 10:57:55

标签: python cluster-analysis

我收集了各种产品的字母数字产品代码。类似的产品在其代码中没有内在的相似性,即产品代码“A123”可能意味着“Harry Potter Volume 1 DVD”和“B123”可能意味着“Kellogs Corn Flakes”。我实际上也没有产品的描述或标识。我所拥有的只是此代码的“所有者”。因此,我的数据(以非正常方式)看起来像这样:

Owner1:ProductCodes A123,B124,W555,M221,M556,127,102

所有者2:ProductCode D103,Z552,K112,L3254,223,112

Owner3:ProductCode G123

...

我有大量(即太字节)的数据集。

我认为,对于大多数人来说,拥有者会有不确定数量的类似产品组 - 即所有者可能只有2组 - 所有的哈利波特的DVD和书籍,还有“铁娘子”的集合“cds。我想分析这些数据并确定产品代码之间的距离函数,这样我就可以开始假设产品代码彼此之间的“接近程度”,并对产品代码进行聚类(因此我也可以确定所有者拥有的组数)。我已经开始对文本聚类算法进行一些研究,但有很多可供选择,我不确定哪种方法最适合这种情况。

有人能指出我最适合使用的基于python的群集功能/库吗?!

6 个答案:

答案 0 :(得分:8)

你拥有的是二分图。作为初始刺,听起来你将邻居列表视为零一向量,在这两个向量之间定义某种相似性/相关性。例如,这可以是标准化的汉明距离。根据您的方式,您将获得单个域的图表 - 产品代码或所有者。很快就会清楚为什么我用图形语言来演绎所有内容,请耐心等待。现在为什么你坚持Python实现?聚类大规模数据耗费时间和内存。为了将猫拉出袋子,我已经编写并仍然保持了图形聚类算法,在生物信息学中使用得相当广泛。是有线程的,接受加权图,并已用于具有数百万个节点和十亿边的图。有关更多信息,请参阅http://micans.org/mcl/。当然,如果你拖网stackoverflow和stackexchange,你可能会感兴趣的是很多线程。我也会推荐Louvain方法,除了我不确定它是否接受加权网络,你可能会产生加权网络。

答案 1 :(得分:1)

R语言has many packages for finding groups in data,并且有对R的python绑定,称为RPy。 R提供了这里已经提到的几种算法,并且在大型数据集上也具有良好的性能。

答案 2 :(得分:1)

答案 3 :(得分:0)

我对你的问题领域了解不多。但PyCluster是非常不错的集群包,适用于大型数据集: http://bonsai.hgc.jp/~mdehoon/software/cluster/software.htm

希望它有所帮助。

答案 4 :(得分:0)

我不知道一个现成的lib,对不起。全文搜索和相似性有很大的库, 但对于位组,你必须自己滚动(据我所知)。 无论如何,有几点建议:

  • bitset方法:首先得到10k所有者x 100k产品,或100k x 10k,在内存中,玩。 您可以使用bitarray创建一个10k x 100k位的大数组。 但那么,你想用它做什么? 要在N个对象(所有者或产品)中找到类似的对, 你必须看看所有N *(N-1)/ 2对,这很多;
    或者,数据中必须有一些允许早期修剪/层次相似的结构;
    或者,google“贪婪的聚类”Python - 看不到现成的lib。

  • 如何定义所有者/产品的“相似性”?有很多可能性 - 共同的数量,共同的比率,tf-idf ...

(已添加):您查看了Mahout的推荐系统API, 关于你在寻找什么? This那么问题 说没有Python等价物,留下两个选择:
a)询问是否有人使用过Jython的Mahout, 或者b)如果你不能舔他们,请加入他们。

答案 5 :(得分:0)

您可以尝试使用k-means clustering algorithm中提供的scikits.learn.cluster.KMeans及其scipy实现进行群集。