2010-03-25 39 views
8

我有幾個數字數據集需要創建概念層次結構。目前,我一直在通過觀察數據(和相應的線圖)手動完成此操作。基於我的直覺,我創建了一些可接受的層次結構。生成數字概念層次結構的算法

這似乎是一個可以自動化的任務。 有誰知道是否有算法來生成數值數據的概念層次結構?


舉個例子,我有以下數據集:

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 

alt text http://i40.tinypic.com/fd7xxu.jpg

爲此我創建了以下層次結構:

  • 最低(< 1000)
  • LOW(1000 - 2500)
  • 介質(2501 - 7500)
  • HIGH(7501 - 30000)
  • 最高(> 30000)

回答

5

也許你需要clustering算法?

從鏈接引用:

聚類分析或聚類的 分配的一組觀察 的成子集(稱爲簇),使得在同一羣集中 觀測 在某種意義上相似。聚類分析是無監督學習的 方法和統計數據 分析在很多領域

+0

謝謝,這似乎是我所需要的。我正在閱讀它。 – 2010-03-25 17:06:26

+1

聚類這個數據集的問題(當然,任何實際上並不指向某個空間的數據集)都會選擇一個合適的距離度量標準,以適應任何算法。我猜測一個簡單的歐幾里得距離會導致問題,因爲你在一些距離更近的地方尋找小範圍(1000-2500),而在更遠的地方(7501-30000)尋找不到的地方。也許像日誌空間的歐幾里德?至少應該輕鬆一點。 – Dusty 2010-03-25 17:11:21

3

我認爲你正在尋找一個在data discretization一個類似於那是相當普遍的AI轉換連續數據時使用的 通用技術(或具有如此大量類別的不連貫數據以致難以使用)分類爲離散類別。

我知道Weka使用Fayyad &伊朗的MDL方法以及Kononeko的MDL方法,我會看看我是否可以挖掘一些參考。

+0

感謝您的信息。 – 2010-03-25 17:19:10

+2

+1的離散化思想,雖然你提到的基於MDL /熵的方法都是有監督的離散化,這裏不是這樣的。 – Amro 2010-03-26 02:35:52

+0

是的,這是一個很好的調用。上一次我需要做任何離散化,就是訓練一個樸素的貝葉斯分類器(很明顯,監督)。 – Dusty 2010-03-26 02:42:08

4

甄克思自然中斷是一個非常高效的單維聚類方案:http://www.spatialanalysisonline.com/OUTPUT/html/Univariateclassificationschemes.html#_Ref116892931

作爲意見已指出的那樣,這是非常相似的K均值。然而,我發現它更容易實現,尤其是在博登·登特的製圖發現了變化:http://www.amazon.com/Cartography-Thematic-Borden-D-Dent/dp/0697384950

+0

有趣。你知道是否有可用的實施? – 2010-03-25 17:17:20

+0

它已內置到ArcGIS中,如果您有權訪問它。 – 2010-03-25 17:18:30

+0

我不幸,但謝謝你的提示! – 2010-03-25 17:37:26

0

我想知道。

顯然你要找的是乾淨的休息時間。因此,在啓動自己的複雜算法之前,您可能會想到一種差異化方法。

[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似乎沒有多大意義。

1

這只是一維問題,所以可能會有一個動態編程解決方案。假設按照排序順序獲取點然後進行n-1個切割以生成n個集羣是有意義的。假設您可以記下每個羣集的懲罰函數f(),例如羣集內的方差或羣集中最小和最大值之間的距離。然後,您可以最小化每個羣集評估的f()的總和。一次從一個點開始工作,從左到右。在每個點上,對於1 ..#個簇 - 1,計算出將點過多地分割到多個簇中的最佳方法,並存儲該答案的成本和最右邊的分割的位置。您可以按如下方式處理點P和羣集大小c:考慮所有可能的割點在P的左側。對於每個割點,將f()對切點右側的點羣評估爲(存儲的)成本是在切割左側點的最佳羣集大小爲c-1的解決方案。一旦你完成了最右邊的工作,再次執行同樣的訣竅以找出羣集大小c的最佳答案,並使用最右邊分割的存儲位置來恢復出現最佳答案的所有分割。

這實際上可能比k-means變體更昂貴,但具有保證找到全局最佳答案的優勢(在這些假設下針對您選擇的f())。

+0

聽起來像詹克斯自然休息 – levi 2015-04-13 00:30:34