Рассчитать апостериорное распределение неизвестной неправильной классификации с помощью PRTools в MATLAB - PullRequest
2 голосов
/ 26 мая 2010

Я использую библиотеку PRTools MATLAB для обучения некоторых классификаторов, генерации тестовых данных и тестирования классификаторов.

У меня есть следующие данные:

  • N: Общее количество тестовых примеров
  • k: # из неправильная классификация для каждого классификатор и класс

Я хочу сделать:

Рассчитать и построить байесовские апостериорные распределения неизвестных вероятностей ошибочной классификации (обозначается как q), то есть как функция плотности вероятности над самим q (так что P (q) будет построена по q, от 0 до 1) .

У меня есть это (математические формулы, а не код Matlab!):

Posterior = Likelihood * Prior  / Normalization constant = 
P(q|k,N)  = P(k|q,N)   * P(q|N) / P(k|N)

Предыдущее значение равно 1, поэтому мне нужно только вычислить константу вероятности и нормализации.

Я знаю, что вероятность может быть выражена как (где B (N, k) - биномиальный коэффициент):

P(k|q,N) = B(N,k) * q^k * (1-q)^(N-k)

... так что константа нормализации - это просто интеграл от апостериорного значения выше, от 0 до 1:

P(k|N) = B(N,k) * integralFromZeroToOne( q^k * (1-q)^(N-k) )

(Биномиальный коэффициент (B (N, k)) может быть опущен, хотя он появляется как в вероятности, так и в константе нормализации)

Теперь я слышал, что интеграл для константы нормализации должен быть рассчитан как ряд ... что-то вроде:

k!(N-k)! / (N+1)!

Это правильно? (У меня есть некоторые лекционные заметки с этой серией, но я не могу понять, если это для интеграла константы нормализации или для общего распределения неправильной классификации (q))

Кроме того, приветствуются подсказки, как практически рассчитать это? (факториалы легко создают ошибки усечения, верно?) ... И как практически рассчитать окончательный график (апостериорное распределение по q от 0 до 1).

Ответы [ 2 ]

1 голос
/ 26 мая 2010

Я действительно мало что сделал с байесовскими апостериорными распределениями (и ненадолго), но я постараюсь помочь с тем, что вы дали. Во-первых,

k!(N-k)! / (N+1)! = 1 / (B(N,k) * (N + 1))

и вы можете вычислить биномиальные коэффициенты в Matlab с помощью nchoosek (), хотя в документации сказано, что могут быть проблемы с точностью для больших коэффициентов. Насколько велики N и k?

Во-вторых, согласно Mathematica,

integralFromZeroToOne( q^k * (1-q)^(N-k) ) = pi * csc((k-N)*pi) * Gamma(1+k)/(Gamma(k-N) * Gamma(2+N))

, где csc() - косекансная функция, а Gamma() - гамма-функция . Однако Гамма (х) = (х-1)! который мы будем использовать через минуту. Проблема в том, что у нас есть функция Gamma (k-N) снизу и k-N будет отрицательным. Тем не менее, формула отражения поможет нам в этом, так что в итоге мы получим:

= (N-k)! * k! / (N+1)!

Видимо, ваши записи были правильными.

0 голосов
/ 26 мая 2010

Пусть q - вероятность ошибочной классификации. Тогда вероятность того, что вы будете наблюдать k неправильную классификацию в N прогонах, определяется как:

P (k | N, q) = B (N, k) q ^ k (1-q) ^ (N-k)

Затем необходимо принять подходящий априорный коэффициент для q, который ограничен между 0 и 1. Сопряженным априорным для указанного выше является бета-распределение Если q ~ Beta(a,b), то апостериор также является бета-распределением. Для вашей информации, апостериор:

f (q | -) ~ бета (a + k, b + N-k)

Надеюсь, это поможет.

...