Я пытаюсь выполнить мультиклассовую классификацию с набором обучающих данных, который имеет неопределенность членства в классе для каждого класса для каждой точки. Я хотел бы распространить эти неопределенности через GP C аналогично тому, что можно сделать с Heteroscedasti c Regression.
Я считаю, что это потребует некоторой модификации встроенного GPflow Классы. Я использую модуль gpflow.likelihoods.multiclass
, который (косвенно) содержит класс gpflow.likelihoods.RobustMax
. В RobustMax
есть несколько строк:
class RobustMax(Module):
def __init__(self, num_classes, epsilon=1e-3, **kwargs):
"""
`epsilon` represents the fraction of 'errors' in the labels of the
dataset. This may be a hard parameter to optimize, so by default
it is set un-trainable, at a small value.
"""
super().__init__(**kwargs)
transform = tfp.bijectors.Sigmoid()
prior = tfp.distributions.Beta(to_default_float(0.2), to_default_float(5.0))
self.epsilon = Parameter(epsilon, transform=transform, prior=prior, trainable=False)
self.num_classes = num_classes
self._squash = 1e-6
def __call__(self, F):
i = tf.argmax(F, 1)
return tf.one_hot(
i, self.num_classes, tf.squeeze(1.0 - self.epsilon), tf.squeeze(self.eps_k1)
)
@property
def eps_k1(self):
return self.epsilon / (self.num_classes - 1.0)
Как лучше всего адаптировать определение epsilon
и eps_k1
, чтобы учесть разные значения для каждого класса для каждой точки данных?