Как рассчитать коэффициенты Джини для кластеризации - PullRequest
2 голосов
/ 24 марта 2019

У меня 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?

1 Ответ

2 голосов
/ 25 марта 2019

Давайте предположим, что у нас есть 3 класса и 80 объектов.19 объектов в классе 1, 21 объект в классе 2 и 40 объектов в классе 3 (обозначается как (19,21,40)).

Индекс Джини будет: 1- [(19/80) ^ 2 + (21/80) ^ 2 + (40/80) ^ 2] = 0,6247, то есть costbefore = Gini (19,21,40) = 0,6247

Чтобы решить, где разделить, мыпроверить все возможные расколы.Например, разделение на 2.0623, что приводит к разделению (16,9,0) и (3,12,40):

После тестирования x1 <2.0623: </p>

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: </p>

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. </p>

Вы можете перейти по этим ссылкам ниже .... http://dni -institute.in / blogs / gini-index-work-out-пример / http://stats.stackexchange.com/questions/95839/gini-decrease-and-gini-impurity-of-children-nodes

...