sklearn scikit from ensemble ensambles classifier boosting bagging python scikit-learn

python - from - scikit voting classifier



Personalizar la función de pérdida sklearn (2)

Quiero hacer una predicción en un proyecto de ciencia de datos, y el error se calcula a través de una función asimétrica.

¿Es posible ajustar la función de pérdida del bosque aleatorio o el aumento de gradiente (de sklearn)?

He leído que es necesario modificar un archivo .pyx pero no puedo encontrar ninguno en mi carpeta sklearn (estoy en Ubuntu 14.04 LTS).

¿Tienes sugerencias?


No necesita cambiar nada de ningún archivo.

La modificación de un archivo .py generalmente es una mala idea y uno debe evitar hacerlo.

Si desea crear su propia función de puntuación, aquí hay un enlace a la documentación de sklearn que muestra cómo hacerlo.


Sí, es posible sintonizar. Por ejemplo:

class ExponentialPairwiseLoss(object): def __init__(self, groups): self.groups = groups def __call__(self, preds, dtrain): labels = dtrain.get_label().astype(np.int) rk = len(np.bincount(labels)) plus_exp = np.exp(preds) minus_exp = np.exp(-preds) grad = np.zeros(preds.shape) hess = np.zeros(preds.shape) pos = 0 for size in self.groups: sum_plus_exp = np.zeros((rk,)) sum_minus_exp = np.zeros((rk,)) for i in range(pos, pos + size, 1): sum_plus_exp[labels[i]] += plus_exp[i] sum_minus_exp[labels[i]] += minus_exp[i] for i in range(pos, pos + size, 1): grad[i] = -minus_exp[i] * np.sum(sum_plus_exp[:labels[i]]) +/ plus_exp[i] * np.sum(sum_minus_exp[labels[i] + 1:]) hess[i] = minus_exp[i] * np.sum(sum_plus_exp[:labels[i]]) +/ plus_exp[i] * np.sum(sum_minus_exp[labels[i] + 1:]) pos += size return grad, hess