我有5000个观测值,这些观测值分为10个类。每个群集具有1000个真实观察值。现实生活中的观察值在每个群集中为1000。但是,运行完聚类算法后,它看起来像这样:
Cluster #, true members, clustered members
0, 1000, 435
1, 1000, 234
2, 1000, 167
3, 1000, 654
4, 1000, 0
换句话说,集群0应该有1000个成员,但是其中只有435个通过我的算法正确地添加到了该集群。 5000和群集中的群集之间的差异被放在错误的群集中。
我想计算基尼系数,并找到以下代码:
def gini_ind(Number, Total):
return (1-(((Number/Total)**2)+(((Total-Number)/Total)**2)))
在我尝试过的测试中似乎工作正常。但是,我发现的数据集都不像我的。
所以我的问题是如何计算基尼系数?
如果执行以下操作,则将获得每个群集的这些基尼系数:
gini_ind(435,1000) -> 0.49155
gini_ind(234,1000) -> 0.3584
gini_ind(167,1000) -> 0.2782
gini_ind(654,1000) -> 0.4525
gini_ind(0,1000) -> 0
每个簇的基尼系数正确吗?
得到平均基尼系数;只是平均值: (0.49155 + 0.3584 + 0.2782 + 0.4525 + 0)/ 5吗?
答案 0 :(得分:3)
假设我们有3个类和80个对象。在第1类中有19个对象,在第2类中有21个对象,在第3类中有40个对象(表示为(19,21,40))。
基尼系数为:1- [((19/80)^ 2 +(21/80)^ 2 +(40/80)^ 2] = 0.6247,即costbefore =基尼(19,21,40)= 0.6247
为了确定拆分位置,我们测试了所有可能的拆分。例如,以2.0623进行拆分,结果将拆分为(16,9,0)和(3,12,40):
测试x1 <2.0623后:
costL =Gini(16,9,0) = 0.4608
costR =Gini(3,12,40) = 0.4205
然后我们通过经验分支概率加权分支杂质:
costx1<2.0623 = 25/80 costL + 55/80 costR = 0.4331
对于每个可能的分割,例如x1 <1:
costx1<1 = FractionL Gini(8,4,0) + FractionR Gini(11,17,40) = 12/80 * 0.4444 + 68/80 * 0.5653 = 0.5417
此后,我们选择了成本最低的拆分。这是x1 <2.0623的比例,成本为0.4331。
您可以点击以下链接。... http://dni-institute.in/blogs/gini-index-work-out-example/ http://stats.stackexchange.com/questions/95839/gini-decrease-and-gini-impurity-of-children-nodes