Coeficiente de Gini ponderado más eficiente en Python
Porhttps://stackoverflow.com/a/48981834/1840471, esta es una implementación del coeficiente de Gini ponderado en Python:
import numpy as np
def gini(x, weights=None):
if weights is None:
weights = np.ones_like(x)
# Calculate mean absolute deviation in two steps, for weights.
count = np.multiply.outer(weights, weights)
mad = np.abs(np.subtract.outer(x, x) * count).sum() / count.sum()
rmad = mad / np.average(x, weights=weights)
# Gini equals half the relative mean absolute deviation.
return 0.5 * rmad
Esto es limpio y funciona bien para matrices de tamaño mediano, pero como se advirtió en su sugerencia inicial (https://stackoverflow.com/a/39513799/1840471$5, esta es una implementación del coeficiente de Gini ponderado en Python:6$
n = 20000 # Works, 30000 fails.
gini(np.random.rand(n), np.random.rand(n))
¿Se puede ajustar para que funcione para conjuntos de datos más grandes? El mío es ~ 150k filas.