Расчет примеси Джини
С https://en.wikipedia.org/wiki/Decision_tree_learning у нас есть $I_G=1-\sum_{i=1}^j p_i^2$.
Однако из https://www.kaggle.com/batzner/gini-coefficient-an-intuitive-explanation мы имеем:
def gini(actual, pred):
assert (len(actual) == len(pred))
all = np.asarray(np.c_[actual, pred, np.arange(len(actual))], dtype=np.float)
all = all[np.lexsort((all[:, 2], -1 * all[:, 1]))]
totalLosses = all[:, 0].sum()
giniSum = all[:, 0].cumsum().sum() / totalLosses
giniSum -= (len(actual) + 1) / 2.
return giniSum / len(actual)
def gini_normalized(actual, pred):
return gini(actual, pred) / gini(actual, actual)
Почему эти два разные. Есть ли ссылка на второй код и что каждый из них пытается вычислить?