在本文中,188個國家基於這19個社會經濟指標彙集在一塊兒,使用Python實現的蒙特卡羅K-Means聚類算法。經過將相似國家分組在一塊兒並對其進行歸納,聚類能夠幫助減小識別有吸引力的投資機會所需的工做量。html
在討論聚類國家和得出結論的結果以前,本文詳細介紹了距離度量,聚類質量測量,聚類算法,K-Means聚類算法。 算法
聚類是將一組異構(不一樣)對象劃分爲同類(類似)對象的子集的過程。聚類分析的核心是假設給定任何兩個對象,您能夠量化這些對象之間的類似性或不類似性。在連續搜索空間中距離測量類似性。segmentfault
下面我寫了關於連續搜索空間的類似性度量。對於每一個我都包含公式(給定兩個向量, 和q)和Python代碼。用於編寫本文的全部Python代碼均可用。 框架
聚類算法的兩個主要類別是分層聚類和分區聚類。分層聚類經過將小聚類合併爲較大的聚類或將較大的聚類分紅較小的聚類來造成聚類。分區聚類經過將輸入數據集劃分爲互斥的子集來造成聚類。dom
分層和分區聚類之間的差別主要與所需的輸入有關。分層聚類僅須要類似性度量,而分區聚類可能須要許多額外的輸入,最多見的是簇的數量。通常而言,分層聚類算法也更適合於分類數據。函數
分層聚類測試
有兩種類型的層次聚類,即凝聚聚類和分裂聚類。凝聚聚類是一種自下而上的方法,涉及將較小的聚類(每一個輸入模式自己)合併爲更大的聚類。分裂聚類是一種自上而下的方法,從一個大型集羣(全部輸入模式)開始,並將它們分紅愈來愈小的集羣,直到每一個輸入模式自己都在集羣中。優化
分區聚類url
在本文中,咱們將重點介紹分區聚類算法。分區聚類算法的兩個主要類別是 基於質心的聚類[](http://en.wikipedia.org/wiki/... 和 基於密度的聚類。本文重點介紹基於質心的聚類; 特別是流行的K-means聚類算法。spa
K-Means聚類算法是一種基於質心的分區聚類算法,它使用均值漂移啓發式算法。K均值聚類算法包括三個步驟(初始化,分配和更新)。重複這些步驟,直到聚類已經收斂或已經超過迭代次數,即計算預算已用盡。
初始化
在搜索空間中隨機初始化一組質心。這些質心必須與聚類的數據模式處於同一數量級。換句話說,若是數據模式中的值介於0到100之間,則初始化值介於0和1之間的隨機向量是沒有意義的。
注意:確保跨每一個屬性規範化數據,而不是每一個模式
一旦質心在空間中被隨機初始化,咱們迭代數據集中的每一個模式並將其分配給最近的質心。嘗試並行執行此步驟,尤爲是在數據集中有大量模式的狀況下。
一旦將模式分配給它們的質心,就應用均值漂移啓發式。此啓發式替換每一個質心中的每一個值,並將該值的平均值替換爲已分配給該質心的模式。這將質心移向屬於它的圖案的高維平均值。均值漂移啓發式問題在於它對異常值敏感。爲了克服這個問題,可使用K-medoids聚類算法 ,也可使用 標準化數據來抑制異常值的影響,
重複這三個步驟進行屢次迭代,直到聚類已經收斂於解決方案。一個很是好的GIF顯示以下所示,
PYTHON代碼 - 聚類類的補充
下面的Python方法是Clustering類的擴展,它容許它執行K-means聚類算法。這涉及使用均值漂移啓發式更新質心。
假設您有必定的類似度和數據聚類,您仍然須要一個目標函數來衡量該聚類的質量。大多數羣集質量指標都嘗試根據羣集間和羣集內距離來優化羣集。簡單地說,這些指標試圖確保同一集羣中的模式緊密相連,不一樣集羣中的模式相距甚遠。
量化偏差
量化偏差測量由量化引入的舍入偏差,即將一組輸入值映射到有限的較小集合。這基本上是咱們經過將模式聚類到_k個_集羣中所作的事情。
注意:圖像還假設咱們使用曼哈頓距離。
在量化偏差的上述說明中,咱們計算每一個模式與其分配的質心之間的平方絕對距離之和。
戴維斯 - 布爾丁指數
戴維斯-爾丁標準是基於一個特定的聚類的簇內和簇間的距離比。
注意:圖像假設咱們使用曼哈頓距離。
在Davies-Bouldin指數的上圖中,咱們有三個由三個模式組成的集羣。第一步是計算每一個羣集的平均簇內距離d(A), d(甲),和 d(一)d(一個),d(一個),和 d(一個)。下一步驟是計算每一對的質心之間的距離d(A,B), d(乙,Ç),和 d(A,C)d(一個,乙),d(乙,C),和 d(一個,C)。最後,咱們返回任何一對簇內距離之和與這兩個質心之間距離的最大比率。
剪影指數
該 剪影指數)是衡量一個特定的聚類質量的最流行的方式之一。它衡量每一個模式與其自身集羣中的模式的類似程度,與其餘集羣中的模式進行比較。
高輪廓值表示 與其本身的簇很好地匹配,而且與相鄰簇很不匹配。人們應該致力於爲數據集中的每一個模式最大化小號一世小號一世。
注意:圖像還假設咱們使用曼哈頓距離。
在使用這些指標過去幾個月後,我得出的結論是,它們都不是完美的,
如下對不一樣指標的分析很好地證實了這些誤差; 儘管事實上他們應該測量相同的東西,但他們幾乎徹底是負相關的。
X
QE
D B
SI
QE
1.0
-0.965
-0.894
SB
-0.965
1.0
0.949
SI
-0.894
0.949
1.0
PYTHON代碼 - 聚類
在評估給定聚類的適應性以前,您須要實際聚類模式。Clustering類包含將模式分配給最近的質心的方法。
PYTHON代碼 - 目標函數
ClusteringQuality類測量給定輸入模式的聚類的質量。
K-Means聚類算法的兩個最大問題是:
因爲這些緣由,K-means聚類算法常常重啓屢次。由於初始化(一般)是隨機的,因此咱們基本上對質心的隨機高維起始位置進行採樣,這也稱爲蒙特卡羅模擬。爲了比較獨立模擬的解決方案,咱們須要衡量集羣質量,例如前面討論過的那些。
肯定性初始化
我說初始化一般是隨機的,由於K-Means聚類算法有肯定性初始化技術。
隨機初始化
不一樣之處在於僞隨機序列中的下一個隨機數與先前的隨機數_無關_,而在準隨機數序列中,下一個隨機數_取決於_先前的隨機數。相關隨機數覆蓋搜索空間的更大表面。
比較二維空間中的僞隨機序列(左)和準隨機序列(右)
選擇正確的K
除了測試不一樣的初始化以外,咱們還能夠在蒙特卡羅框架中測試不一樣的值。目前,沒有動態肯定正確數量的聚類的最佳方式,儘管_老是_正在研究用於肯定正確值的技術。我更願意只是憑經驗嘗試不一樣的_k_值並比較結果,儘管這很費時,特別是在大型數據集上。
下面提出的最終結果表示發如今範圍最好聚類 \= { 6 ,7 ,8 }={6,7,8}超過1000獨立每的每個值的模擬。歐幾里德距離和量化偏差是蒙特卡羅K均值聚類中使用的距離和質量度量。用於產生結果的數據集是2014年的標準化時間點數據集,其中包括19個被肯定爲與實際GDP增加正相關的社會經濟指標。
羣集細分和質心分析
下面的每一個標籤都將集羣分解爲屬於它的國家,並將質心與咱們彙集的19個社會經濟指標中的每個的中心質心進行比較。
2014年該羣組中的國家/地區
量化不是風險管理,衍生品訂價或算法交易; 它是關於挑戰事情的方式,並一般使用統計和計算方法找到更好的方法。
2004年,美國是一個異常值,而且本身佔據了一個集羣。該集羣的特色是PPP的匯率低,進口高,出口高,家庭支出高,工業生產高,政府收入相對較高,特別是在健康方面。在這個時間點,最大的差別仍然是中國發生的投資數量要大得多,並且人口(人口在15到64歲之間)人口更多(顯然)更大。在工業生產方面,中國也超過了美國。這些在下面的並排比較中顯示,
諸如東歐與西歐國家之類的俗語出如今地圖上,而且(由於缺少一個更好的詞)正確。然而,諸如金磚四國(巴西,俄羅斯,印度,中國和南非)之類的口語顯然更多地受到政治經濟的驅動,而不是實際經濟。如下是我對一些常見口語的見解,
還有更多的俗語,我爲不評論全部這些而道歉,這六個只是我平常生活中常常遇到的那些。若是您發現其餘有趣的關係,請評論。因爲咱們不知道每一個社會經濟指標的相對重要性,所以沒法量化在一個集羣與另外一個集羣中的有多好。在某些狀況下,咱們甚至沒法肯定大或小的價值是好仍是壞。例如,若是政府效率低下,政府的大筆支出是否仍然有效?儘管如此,我仍是試圖構建一個粗略的度量標準來對每一個集羣進行排名:
排名=出口+家庭支出+進口+改善衛生+改善水+人口+ 15歲至64歲人口增加+總投資+城市百分比+手機訂閱+政府收入+政府支出+醫療支出+工業生產+互聯網用戶 - PPP的匯率 - 失業率 - 年齡依賴率
根據此指標,每一個羣集的相對排名以下所示,
簇
排名值
秩
計數
6
10.238
1
2
8
5.191
2
22
1
5.146
3
20
5
3.827
4
20
2
3.825
5
45
4
3.111
6
32
3
3.078
7
4
7
1.799
8
43
這個排名並不完美,但它再次證明了咱們的觀點,即世界是一個不平等的地方。
那對投資者意味着什麼呢?我認爲這意味着應該在處於不一樣發展階段的國家之間做出區分。這是由於雖然大多數欠發達國家表明的是具備最大回報潛力的投資,但它們的風險也更大,可能須要更長的時間才能得到回報。理想狀況下,這些因素應相互權衡,並與投資者的風險回報偏好進行比較。