【问题标题】:Algorithm to generate numerical concept hierarchy生成数值概念层次结构的算法
【发布时间】:2011-01-31 20:02:02
【问题描述】:

我有几个数字数据集,需要为其创建概念层次结构。目前,我一直通过观察数据(和相应的折线图)手动执行此操作。根据我的直觉,我创建了一些可接受的层次结构。

这似乎是一项可以自动化的任务。 有人知道是否有一种算法可以为数值数据生成概念层次结构吗?


举个例子,我有以下数据集:

Bangladesh     521
Brazil         8295
Burma          446
China          3259
Congo          2952
Egypt          2162
Ethiopia       333
France         46037
Germany        44729
India          1017
Indonesia      2239
Iran           4600
Italy          38996
Japan          38457
Mexico         10200
Nigeria        1401
Pakistan       1022
Philippines    1845
Russia         11807
South Africa   5685
Thailand       4116
Turkey         10479
UK             43734
US             47440
Vietnam        1042

我为此创建了以下层次结构:

  • 最低(
  • 低 (1000 - 2500)
  • 中等 (2501 - 7500)
  • 高 (7501 - 30000)
  • 最高 (> 30000)

【问题讨论】:

    标签: algorithm artificial-intelligence machine-learning


    【解决方案1】:

    Jenks Natural Breaks 是一种非常高效的单维聚类方案:http://www.spatialanalysisonline.com/OUTPUT/html/Univariateclassificationschemes.html#_Ref116892931

    正如 cmets 所指出的,这与 k-means 非常相似。然而,我发现它更容易实现,特别是在 Borden Dent 的制图中发现的变化:http://www.amazon.com/Cartography-Thematic-Borden-D-Dent/dp/0697384950

    【讨论】:

    • 有趣。你知道是否有可用的实现吗?
    • 它内置在 ArcGIS 中,如果您可以访问的话。
    • 对 Jenk 自然中断的描述让我想起了很多 k-means,因为您的数据只有一个维度。文章末尾en.wikipedia.org/wiki/K-means_clustering 给出了 k-means 实现的指针。
    【解决方案2】:

    这只是一个一维问题,因此可能存在动态规划解决方案。假设按排序顺序获取点然后进行 n-1 切割以生成 n 个簇是有意义的。假设您可以为每个集群写下一个惩罚函数 f(),例如集群内的方差,或者集群中 min 和 max 之间的距离。然后,您可以最小化在每个集群上评估的 f() 的总和。一次从一个点开始工作,从左到右。在每个点上,对于 1..# 个簇 - 1,找出将到目前为止的点拆分为那么多簇的最佳方法,并存储该答案的成本及其最右侧拆分的位置。您可以对点 P 和集群大小 c 进行如下计算:考虑 P 左侧的所有可能切割。对于每个切割,将在切割右侧的点组上评估的 f() 添加到(存储的)成本聚类大小 c-1 的最佳解决方案位于切口左侧的点。一旦你找到了最右边的方法,再次使用相同的技巧来计算出集群大小 c 的最佳答案,并使用存储的最右边拆分的位置来恢复所有给出最佳答案的拆分。

    这实际上可能比 k-means 变体更昂贵,但具有保证找到全局最佳答案的优势(对于您在这些假设下选择的 f())。

    【讨论】:

    • 听起来像詹克斯自然休息
    【解决方案3】:

    我认为您正在寻找类似于 data discretization 的东西,这在 AI 中很常见,用于将连续数据(或具有大量类的离散数据)转换为离散类。

    我知道 Weka 使用 Fayyad & Irani 的 MDL 方法以及 Kononeko 的 MDL 方法,我会看看我是否可以挖掘一些参考资料。

    【讨论】:

    • +1 表示离散化的想法,虽然你提到的基于 MDL/熵的方法都是有监督的离散化,但这里不是这种情况..
    • 是的,这是个好电话。上次我需要做任何离散化是为了训练一个朴素贝叶斯分类器(显然是有监督的)。
    【解决方案4】:

    我在想。

    显然你正在寻找的是干净的休息。因此,在开始研究复杂算法之前,您或许可以设想一种不同的方法。

    [1, 1.2, 4, 5, 10]
    
    [20%, 333%, 25%, 100%]
    

    现在,根据我们正在寻找的休息次数,选择它们是一个问题:

    2 categories: [1, 1.2] + [4, 5, 10]
    3 categories: [1, 1.2] + [4, 5] + [10]
    

    我不了解你,但我认为这确实很自然,你甚至可以使用阈值方法说小于 x% 的变化不值得考虑删减。

    例如,这里4 categories 似乎没有多大意义。

    【讨论】:

      【解决方案5】:
      【解决方案6】:

      也许您需要clustering 算法?

      引用链接:

      聚类分析或聚类是 一组观察的分配 成子集(称为集群),以便 同一簇中的观测值是 某种意义上类似。聚类是一种 无监督学习方法,以及 统计数据的常用技术 分析用于许多领域

      【讨论】:

      • 谢谢,这似乎是我需要的。我现在正在阅读它。
      • 聚类这个数据集的问题(嗯,任何实际上不是某个空间中的点的数据集)将是为你使用的任何算法选择一个合适的距离度量。我猜想一个简单的欧几里得距离会引起问题,因为您正在寻找一些区域的小范围(1000-2500),这些区域的距离更近,而它们不是更大(7501-30000)。也许像欧几里得之类的东西在日志空间上?至少应该很容易尝试一下。
      猜你喜欢
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 2014-12-12
      • 1970-01-01
      相关资源
      最近更新 更多