web-dev-qa-db-fra.com

Personnalisation de la fonction de perte

Je veux faire de la prédiction dans un projet de science des données, et l'erreur est calculée à l'aide d'une fonction asymétrique.

Est-il possible d’accorder la fonction de perte de forêt aléatoire ou de renforcement de gradient (de sklearn)?

J'ai lu qu'il est nécessaire de modifier un fichier .pyx mais je ne trouve aucun fichier dans mon dossier sklearn (je suis sous Ubuntu 14.04 LTS).

Avez-vous des suggestions?

14
M.LTA

Oui, il est possible d'accorder. Par exemple:

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
6
Mark

Vous n'avez pas besoin de changer quoi que ce soit à partir d'un fichier.

Modifier un fichier .py est généralement une mauvaise idée et il faut éviter de le faire.

Si vous souhaitez créer votre propre fonction de scoring, ici est un lien vers la documentation de sklearn qui montre comment procéder.

0
MMF