我有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?
最佳答案
假设我们有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
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
costx1<1 = FractionL Gini(8,4,0) + FractionR Gini(11,17,40) = 12/80 * 0.4444 + 68/80 * 0.5653 = 0.5417
之后,我们选择成本最低的拆分。这是拆分x1
您可以点击以下链接。...
http://dni-institute.in/blogs/gini-index-work-out-example/
http://stats.stackexchange.com/questions/95839/gini-decrease-and-gini-impurity-of-children-nodes