Python框架

Python框架,python,cluster-analysis,orange,Python,Cluster Analysis,Orange,我计划使用kmeans集群。我已经阅读了教程,但我仍有几个问题想问: 我正在处理高维向量上的聚类。 1) 是否实现了余弦距离? 2) 我不想给空值加零。我尝试在空字段中不包含任何零,但得到错误: SystemError: 'orange.TabDelimExampleGenerator': the number of attribute types does not match the number of attributes 如何指示空值? 3) 有没有一种方法可以将“ID”合并到示例表中?

我计划使用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, ... ]
cluster1:[,…]
集群2:[,…]
而不仅仅是[1,2,3,1,2,…]

谢谢

一个问题有四个问题是非常尴尬的——为什么不把一个问题变成一个问题呢?这并不是说你会为此付出代价;-)。无论如何,请注意“如何指示空值?”,请参阅关于
Orange.value
实例的属性
value

如果值是连续的或未知的,则否 需要一个描述符。对于后者, 结果是字符串“?”、“~”或“.” 因为不知道,不在乎和其他, 分别

我不确定你说的空是指“不知道”还是“不在乎”,但不管怎样,你可以表示为“不知道”或“不在乎”。但是,请注意距离--从中的另一页开始:

正确处理未知值 只有欧几里得距离和浮雕距离。 对于距离的其他度量,a 未知与已知或未知之间的距离 在两个未知值之间总是 0.5

后一页中列出的距离是Hamming、Maximal、Manhattan、Euclidean和Relief(后者类似于Manhattan,但正确处理了未知值)——没有提供余弦距离:您必须自己编码

对于(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)

我认为原来的KMeans不适用于余弦距离。因为它不在欧几里德空间中,所以需要定义余弦距离的质心,并且不能保证收敛。但是如果你的特征向量都是正的,你可以试试。更多信息: