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