1

我打算使用橙色进行 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, ... ]

谢谢!

4

2 回答 2

3

一题四题是极其尴尬的——何不一题一题呢?好像它不会花费你;-)。无论如何,wrt“我如何指示一个空值?”,请参阅有关以下实例属性的文档valueOrange.Value

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

我不确定空的意思是“不知道”还是“不在乎”,但无论如何你都可以指出。但是,请注意距离-来自文档中的其他页面:

只有欧几里得距离和浮雕距离才能正确处理未知值。对于其他距离度量,未知和已知之间或两个未知值之间的距离始终为 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)
于 2010-02-07T17:02:51.047 回答
0

我认为原来的 KMeans 不适合余弦距离。由于它不在欧几里得空间中,需要定义余弦距离的质心,不能保证收敛。但是如果你的特征向量都是正的,你可以试试。更多信息:在 k-means 中为用户定义的距离函数添加 API

于 2015-01-20T03:37:04.233 回答