Как написать пользовательскую целевую функцию со сглаживанием меток в легких ГБМ? - PullRequest
0 голосов
/ 02 апреля 2019

Как я могу реализовать сглаживание меток в легких гбм?

Сглаживание меток упорядочивает модель на основе softmax с k выходными значениями, заменяя жесткие цели классификации 0 и 1 целевыми значениями eps / k и 1 - (k - 1) / k * eps соответственно. При глубоком обучении сглаживание меток всегда обеспечивает лучшую производительность модели классификации. Я пытался пометить сглаживание с помощью настройки целевой функции.

class smooth_label_loss(object):
    def __init__(self, eps=0.01,nof_class = 4,use_eps=True):
        self.eps = eps
        self.nof_class = nof_class
        self.use_eps= use_eps

    def _get_aligned_label(self,y_true):
        eps = self.eps
        nof_class=self.nof_class
        y_align = []
        for short_labl in y_true:
            short_labl=int(short_labl)
            onehot_label= np.eye(nof_class)[short_labl]
            if self.use_eps:
                labl = onehot_label*(1-eps) + (1-onehot_label)*eps/nof_class
            else:
                labl = onehot_label
            y_align.append(labl)
        return np.array(y_align)

    def __call__(self, y_pred,dtrain):
        y_true=dtrain.get_label()
        y_align = self._get_aligned_label(y_true)
        y_flat=y_align[:,0]
        for ii in range(1, self.nof_class):
            y_flat=np.concatenate([y_flat,y_align[:,ii]])

        prob = 1.0 / (1.0 + np.exp(-y_pred))
        #prob=pred_align
        grad = prob - y_flat
        hess = prob * (1.0 - prob)
        return grad, hess

Но результат хуже, чем исходная классификационная функция (просто используйте params {'target': 'multiclass'} в lightgbm). И если я установлю use_eps = False в моей пользовательской функции. У этого также есть различная работа с оригинальной функцией классификации. Может быть, есть некоторые ошибки в расчете града и гесс?

Работает ли сглаживание меток в легких гбм? или у меня ошибка в вычислении градуса и гесса в целевой функции.

Спасибо!

...