Сгенерировать подмножество данных с известным средним значением

#matlab #subset #mean

#matlab #подмножество #среднее

Вопрос:

У меня есть набор данных из n наблюдений (вектор nx1), и я хотел бы создать подмножество этих данных, среднее значение которых известно заранее, путем случайного выбора только n / 3 наблюдений (или в пределах некоторого ограничения, т. Е. Где среднее значение подмножества данных находится в пределах диапазона, близкого к известному среднему).

Может кто-нибудь, пожалуйста, помочь мне с кодом сделать это в matlab? Обратите внимание, я не хочу использовать функцию rand для создания случайных данных, поскольку у меня уже есть собранные данные.

Например, в меньшем масштабе: если бы у меня был следующий набор данных из 12 наблюдений:

 data =  [8;7;4;6;9;6;4;7;3;2;1;1];
  

но затем захотелось случайным образом выбрать подмножество этих данных, содержащее только 4 наблюдения со средним значением 4 (или, например, со средним значением 3,5-4,5):

Тогда ответ может быть datasubset=[7;3;2;4] но ответом также может быть datasubset=[6;4;2;4] или datasubset=[6;4;3;4] .

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

Комментарии:

1. В одном месте вы говорите «случайный выбор», а в другом вы говорите, что работает любой подходящий ответ, что вы подразумеваете под случайным выбором? алгоритм сопоставления пар значений вместе довольно прост, но случайный выбор подмножества — это еще один уровень сложности

2. 2^12 Возможны подмножества из 12 наблюдений. Вы можете сгенерировать их все и выбрать только те, у которых средние значения находятся в вашем диапазоне, затем выбрать случайное подмножество из них. Если размер вашего набора данных намного больше 12, вы можете видеть, что этот подход очень быстро становится несостоятельным.

3. На самом деле, если вы знаете точное количество наблюдений, которые вы хотите получить в своем подмножестве, есть только nchoosek подмножества, где n — количество наблюдений, а k — длина подмножества.

4. Это проблема с суммой подмножеств , которая является NP-полной. Возможно, вы захотите подумать о другом способе выбора ваших подмножеств. Фактически, в зависимости от того, сколько допустимых подмножеств вы ожидаете, что там будет, лучшим выбором может быть простой выбор случайного подмножества, пока вы не найдете его в пределах диапазона.

5. Ах да, хорошее предложение @beaker. Итак, в конце я использую randsample для случайного выбора подмножества из n наблюдений, а затем проверяю подмножество на соответствие всем моим ограничениям (у меня есть еще 4 ограничения, которым подмножество должно соответствовать помимо среднего) в цикле while, пока не будут выполнены требования. Кажется, работает именно так, как я хочу.