在本文中,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
这个排名并不完美,但它再次证明了咱们的观点,即世界是一个不平等的地方。
那对投资者意味着什么呢?我认为这意味着应该在处于不一样发展阶段的国家之间做出区分。这是由于虽然大多数欠发达国家表明的是具备最大回报潜力的投资,但它们的风险也更大,可能须要更长的时间才能得到回报。理想状况下,这些因素应相互权衡,并与投资者的风险回报偏好进行比较。