Python KMeans Orange Framework

时间:2010-02-07 10:45:00

标签: python cluster-analysis orange

我打算将orange用于kmeans群集。我已经阅读了这些教程,但我仍然有几个问题要问:

我正在处理高维矢量的聚类。 1)是否实现了余弦距离? 2)我不想给空值赋零。我尝试在空字段中没有任何零,并且收到错误:

SystemError: 'orange.TabDelimExampleGenerator': the number of attribute types does not match the number of attributes

如何指示空值? 3)有没有办法在示例表中使用“ID”?我想用ID(非分类)标记我的数据,以便于参考。我不将ID列作为我数据的官方部分。

4)有没有办法以不同的方式输出kmeans聚类? 我更喜欢这种格式的东西:

cluster1: [ <id1>, <id2>, ...]
cluster2: [ <id3>, ... ]
rather than just [1, 2, 3,1 , 2, ... ]

谢谢!

2 个答案:

答案 0 :(得分:2)

一个问题中的四个问题非常尴尬 - 为什么不提出一个问题呢?这不像是要花费你;-)。无论如何,wrt“如何指示一个空值?”,请参阅the docs关于value实例的属性Orange.Value

  

如果值是连续的或未知的,则不   描述符是必需的。对于后者,   结果是字符串'?','〜'或'。'   对于不知道,不关心和其他,   分别

我不确定你是否意味着“不知道”或“不关心”,但无论如何你都可以指出。但要注意距离 - 从the docs中的其他页面开始:

  

正确处理未知值   只有欧几里德和救济距离。   对于其他距离测量,a   未知和已知或之间的距离   总是在两个未知值之间   0.5。

后一页中列出的距离是Hamming,Maximal,Manhattan,Euclidean和Relief(后者就像曼哈顿,但正确处理未知值) - 没有提供余弦距离:你必须自己编码。

对于(4),只需要一些Python代码,您就可以以任何您想要的方式显示结果。 KMeans对象的.clusters属性是一个列表,与数据实例的数量完全一样长:如果您想要的是数据实例列表的列表,例如:

def loldikm(data, **k):
  km = orange.KMeans(data, **k)
  results = [[] for _ in km.centroids]
  for i, d in zip(km.clusters, data):
    results[i].append(d)

答案 1 :(得分:0)

我认为原始的KMeans不适合余弦距离。因为它不在欧几里得空间,你需要定义余弦距离的质心,你不能保证收敛。但是如果你的特征向量都是正数,你可以试试。更多信息:Add API for user defined distance function in k-means

相关问题