Гауссовский процесс бинарной классификации: почему все образцы латентной функции пересекают 0 в одном и том же месте?

Вопрос или проблема

Я использую бинарный классификатор на основе гауссовского процесса на многомерном наборе данных с бинарными метками. Вероятность, как правило, монотонно увеличивается или уменьшается вдоль каждого признака/размерности. Для простоты и для лучшего понимания я воспроизвел игрушечную однородную одномерную задачу.

В игрушечном наборе данных вероятности должны монотонно увеличиваться вдоль (единственной) размерности. Общее ядро является суммой RBF и линейного ядра. Ниже я привожу скрипт на Python (с использованием библиотеки GPy) и соответствующий вывод. В дополнение к показу кривой прогнозирования вероятности я показываю образцы скрытой функции, преобразованные с помощью (пробитной) связующей функции.

Вопросы: почему кривая вероятности и все образцы пересекают уровень вероятности 0,5 примерно в одном и том же месте? (Это означает, что соответствующие кривые скрытой функции все пересекают f=0 в одном и том же месте – почему это так?) Возможно ли модифицировать ядро и получить образцы функции, которые не пересекаются в одном и том же месте?

Я задаю этот вопрос, потому что “истинное” пересечение вероятности 0,5 (которое могло бы быть оценено с помощью очень большого и плотного набора данных) на самом деле может находиться в другом месте. Я хотел бы иметь возможность генерировать образцы кривых вероятности, которые это отражают.

Скрипт:

import numpy as np
import GPy
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# Игрушечный одномерный набор данных
X = np.array([1, 2, 3, 4, 5, 6, 7, 28, 29, 30, 31, 32, 33]).reshape((-1,1))
t = np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]).reshape((-1,1))

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

X_test = np.linspace(0, 35, 50).reshape(-1, 1)

# Модель GPy
rbf = GPy.kern.RBF(input_dim=1, variance=1., lengthscale=1.)
lin = GPy.kern.Linear(input_dim=1, variances=1.)

m = GPy.core.GP(
    X=X_scaled,
    Y=t, 
    kernel=rbf + lin, 
    inference_method=GPy.inference.latent_function_inference.laplace.Laplace(),
    likelihood=GPy.likelihoods.Bernoulli())
m.optimize_restarts(num_restarts=10, optimizer="lbfgs", robust=True)

# Прогнозируемая кривая вероятности
pred = m.predict(scaler.transform(X_test))[0]

# Образцы кривых (образец скрытой функции, преобразованной с помощью связующей функции (пробит))
latent_f_samples = m.posterior_samples_f(scaler.transform(X_test), size=10)
proba_samples = m.likelihood.gp_link.transf(latent_f_samples)[:,0,:]

# Построение графика
fig, ax = plt.subplots(1,1)
ax.scatter(X[t==1], t[t==1], label="Класс 1", s=100, marker="x", color="red")
ax.scatter(X[t==0], t[t==0], label="Класс 0", s=100, marker="+", color="blue")

ax.plot(X_test, pred, color="k", label="Прогнозируемая", zorder=5)
ax.plot(X_test, proba_samples, alpha=0.3, color="gray", zorder=0)
ax.axhline(0.5, X_test.min(), X_test.max(), color="black", ls="--", lw=0.5)

ax.set_title(f"Прогнозируемые вероятности и образцы кривых вероятности")
ax.set_xlabel('X')
ax.set_ylabel('p(класс 1)')
ax.set_xlim(X_test.min(), X_test.max())
ax.legend()

Вывод:

введите описание изображения здесь

На что я хотел бы, чтобы образцы походили (если это когда-либо возможно):

введите описание изображения здесь

Ответ или решение

Вопрос, который вы подняли, касается особенностей работы гауссовских процессов (ГП) в контексте бинарной классификации. Рассмотрим более подробно, почему все образцы латентных функций пересекаются в одной и той же точке, а также возможные пути модификации ядра для достижения большего разнообразия в поведении этих функций.

Ответ на вопрос

Когда вы используете гауссовский процесс для бинарной классификации, вы фактически моделируете латентную функцию ( f(x) ), которая связывает входные данные ( x ) с вероятностями классов. Ваша модель, основанная на сумме радиально-базисного (RBF) и линейного ядра, приводит к тому, что все образцы латентной функции имеют общую структуру, что и обуславливает пересечение в одной и той же точке по оси ( f = 0 ).

Причины пересечения в одной и той же точке

  1. Значение Сигмовидной или Пробит-линзы:

    • При использовании пробит-функции, которая работает с нормальным распределением, значение 0 в латентной функции соответствует вероятности 0.5. Все образцы, проходя через эту функцию, будут иметь одно и то же значение для ( f = 0 ), поскольку фиксируются на одном уровне вероятности, что создает одинаковые точки пересечения.
  2. Однородность Ядра:

    • Композиция RBF и линейного ядра создает определенную регулярность в поведении латентной функции. Это может приводить к тому, что функции располагаются относительно входных данных подобным образом, а значит, пересечения остаются неизменными.
  3. Моделирование Одинарной Латентной Функции:

    • Гауссовый процесс берет множество возможных реализаций латентной функции, но когда они имеют общие характеристики ввиду натренированного ядра, их поведения в точках пересечения оказывается схожими.

Изменение ядра для различия пересечений

Чтобы получить разные точки пересечения для образцов функций, стоит рассмотреть следующие стратегии:

  1. Изменение Ядра:

    • Попробуйте использовать более сложные и разнообразные ядра (например, ядро Матерн) или комбинации, которые добавят в модель неровности и местные колебания, что позволит получить различное поведение в разных точках.
  2. Модели с Нелинейными Связями:

    • Внедрение повышенной степени полинома или дополнительных слагаемых в ядро может создать условия, при которых пересечения будут происходить в разных местах.
  3. Систематическое Введение Шума:

    • Добавление шума в латентные функции может помочь смягчить жесткие ограничения, создаваемые тепловым ядром и линейным компонентом, увеличивая вариабельность в точках пересечения.
  4. Параметрическая Настройка:

    • Экспериментируйте с длиной шкалы и другими параметрами ядра, чтобы изменить рост и затухание вероятностей. Это поможет не только разбить жесткие границы, но и позволит индивидуализировать поведение функции.

Заключение

Таким образом, в вашей аналитике вероятностей пересечения на уровне 0.5 функций латентного пространства связано с используемыми ядрами и методами трансформации. Увеличив разнообразие используемых моделей ядра и модифицируя их, можно добиться желаемой вариативности в результатах. В результате это улучшит общее понимание бинарной классификации и позволит более точно отражать реальную структуру данных.

Оцените материал
Добавить комментарий

Капча загружается...