Как выбрать группу чисел в векторе - PullRequest
4 голосов
/ 25 февраля 2009

У меня есть приложение с некоторыми вероятностями измеренных признаков. Я хочу выбрать n-лучшие функции из вектора. У меня есть вектор действительных чисел. Вектор нормализован, сумма всех чисел равна 1 (это вероятность некоторых признаков).

Я хочу выбрать группу из n меньше, чем N (предположим, около 8) самых больших чисел. Числа должны быть близко друг к другу без пробелов, и они также должны иметь большую сумму (сумма оставшихся чисел должна быть в несколько раз меньше).

Есть идеи, как этого добиться?

Я пытался использовать 80% квантиль (но он не чувствителен к относительно большим промежуткам, таким как [0,2, 0,2, 0,01, 0,01, 0,001, 0,001 ... len ~ 100]), я пробовал некоторый порог между двумя цифры, но ничего не работает слишком хорошо.

В данный момент у меня есть частичное решение, но мне просто интересно, есть ли какое-то простое решение, которое я упустил.

Ответы [ 3 ]

3 голосов
/ 25 февраля 2009

Джон хорошо ответил. Также вы можете попробовать

  • сортировка вероятностей
  • найти самый большой разрыв между последовательными вероятностями
  • работа оттуда

Оттуда это начинает звучать как проблема распознавания образов.
Мой любимый метод - markov-chain-monte-carlo (MCMC).

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

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

2 голосов
/ 25 февраля 2009

Звучит так, будто вы хотите выбрать n наибольшей вероятности, но число n является гибким. Если n было зафиксировано, скажем, n = 10, вы могли бы просто отсортировать ваш вектор и вытащить 10 лучших элементов. Но из вашего примера кажется, что вы хотели бы использовать меньшее значение n, если в данных есть естественный разрыв. Возможно, вы хотите начать с наибольшей вероятности и идти вниз по списку, выбирая элементы, пока сумма выбранных вами вероятностей не пересекает некоторый порог.

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

1 голос
/ 25 февраля 2009

Я не совсем уверен, что это то, что вы хотите, но, кажется, вы хотите сделать следующее.

Предположим, что вероятности x_1,...,x_N в порядке возрастания. Тогда вы должны попытаться найти 1<= i < j <= N такой, что функция

f(i,j)  =  (x_i + x_(i+1) + ... + x_j)/(x_j - x_i)

максимально. Это можно сделать наивно в квадратичное время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...