Математический форум Math Help Planet
Обсуждение и решение задач по математике, физике, химии, экономике Теоретический раздел |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
новый онлайн-сервис число, сумма и дата прописью |
|
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Страница 1 из 1 |
[ Сообщений: 8 ] |
|
Автор | Сообщение | |
---|---|---|
Maxersh |
|
|
Есть n вопросов с t вариантами ответов, из которых один правильный. Ai - человек набрал i баллов Bk - правильный ответ под номером k Нужно найти P(Bk | Ai) для каждого ответа для каждого вопроса [math]P(Bk | Ai) = P(Ai | Bk) | P(Ai) * P(Bk)[/math] - формула Байеса [math]P(Ai) = Pn(i)=C(i,n)*(1|t)^i*(1-1|t)^(n-i)[/math] - формула Бернули( не уверен что её можно использовать ) P(Bk) = 1/t - априорная вероятность( в следующей итерации заменяется на P(Bk | Ai) ) Вопрос, как найти P(Ai | Bk). Я нахожу также через формулу Бернули. P(Ai | Bk) = [math]\left\{\!\begin{aligned} & Pn-1(i) , otvet != k \\ & Pn-1(i-1) , otvet = k \end{aligned}\right.[/math] Когда i = 0 или n формулы : ▼
Написал код - работает только на первой итерации. Не могу понять как сделать правильно. Помогите пожалуйста. |
||
Вернуться к началу | ||
ipgmvq |
|
|
Я не совсем понимаю, это — заданная вам кем-то теоретическая задача или личная практическая задача.
Если последнее, и для вычисления подключается компьютер, я бы сделал следующее. Допустим, есть всего 15 вопросов, в каждом по 5 вариантов ответов, правильным может быть только один вариант, и в случае правильного ответа дается 1 балл. Также есть, допустим, 10 пройденных тестов. Это дает [math]5^{15} \approx 30,5[/math] миллиардов возможных правильных комбинаций. Делаем петлю на 30,5 миллиардов итераций (i). На каждой итерации запускаем внутреннюю петлю для 10 пройденных тестов (j). На каждой итерации внутренней петли проверяем, ответил ли респондент j на вопрос так, как предполагает итерация i. Если да, даем ему 1 балл. Так складываем баллы в течение итерации внутренней петли. И в конце каждой внутренней петли проверяем, соответствует ли рассчитанный балл реальному баллу. Если не соответствует, делаем break из внутреннего цикла и continue для внешнего. Если в рамках внешней итерации i не было ни одного брейка из внутренней итерации, помечаем её как возможную правильную комбинация ответов. Для такой проверки, например, в Python удобна синтаксическая конструкция for ... else. После завершения внешней петли все комбинации вариантов ответов, которые были помечены как возможно плавильные, можно считать равновероятными. |
||
Вернуться к началу | ||
Bloodhound |
|
|
Желательны полные данные: количество вопросов в тесте, количество вариантов в вопросе и количество имеющихся тестов. Без этого выбрать оптимальный вариант выбрать затруднительно.
|
||
Вернуться к началу | ||
Maxersh |
|
|
Bloodhound писал(а): Желательны полные данные: количество вопросов в тесте, количество вариантов в вопросе и количество имеющихся тестов. Без этого выбрать оптимальный вариант выбрать затруднительно. Количество вопросов, количество вариантов ответа не имеют значения и влияют только на необходимое количество решённых тестов для достижения максимального балла. Можете выбрать любые цифры. Если вам так будет удобнее, возьмите 20 вопросов в тесте в каждом по четыре ответа, а количество имеющихся тестов 30. |
||
Вернуться к началу | ||
Maxersh |
|
|
ipgmvq писал(а): Я не совсем понимаю, это — заданная вам кем-то теоретическая задача или личная практическая задача. Если последнее, и для вычисления подключается компьютер, я бы сделал следующее. Допустим, есть всего 15 вопросов, в каждом по 5 вариантов ответов, правильным может быть только один вариант, и в случае правильного ответа дается 1 балл. Также есть, допустим, 10 пройденных тестов. Это дает 515≈30,5 515≈30,5 миллиардов возможных правильных комбинаций. Делаем петлю на 30,5 миллиардов итераций (i). На каждой итерации запускаем внутреннюю петлю для 10 пройденных тестов (j). На каждой итерации внутренней петли проверяем, ответил ли респондент j на вопрос так, как предполагает итерация i. Если да, даем ему 1 балл. Так складываем баллы в течение итерации внутренней петли. И в конце каждой внутренней петли проверяем, соответствует ли рассчитанный балл реальному баллу. Если не соответствует, делаем break из внутреннего цикла и continue для внешнего. Если в рамках внешней итерации i не было ни одного брейка из внутренней итерации, помечаем её как возможную правильную комбинация ответов. Для такой проверки, например, в Python удобна синтаксическая конструкция for ... else. После завершения внешней петли все комбинации вариантов ответов, которые были помечены как возможно плавильные, можно считать равновероятными. Спасибо за развёрнутый ответ. Алгоритм выглядит не очень эффективным, но простым. Попробую реализовать. |
||
Вернуться к началу | ||
Bloodhound |
|
|
Числа нужны, хотя бы для того, чтобы понять подходит ли брутфорс, подобно приведённому выше, либо же действительно нужно искать что-то хитрое. Для приведённых цифр (20 по 4) брутфорс все еще возможен
|
||
Вернуться к началу | ||
Maxersh |
|
|
Это скорее академическая задача, поэтому брутфорс недопустим.
|
||
Вернуться к началу | ||
ipgmvq |
|
|
Если тот, кто сформулировал эту теоретическую задачу, не настаивает на том, что это задача по статистике, я бы тоже её такой не считал. Мне пока ещё кажется, это задача больше по информатике и вычислительной математике.
В предложенном в открывающем посте этой темы подходе предполагается, что вероятность P(Bk) для вопроса 1 независима от P(Bk) (с произвольным k) для вопроса 2, от P(Bk) (с произвольным k) для вопроса 3, от P(Bk) (с произвольным k) для вопроса 4 и т.д. И что человек принимая решение о том, какой из ответов выбрать на вопрос 1, будет делать это независимо от такого решения для вопросов 2, 3 и т.п. Т.е., например, если есть всего три вопроса, по три ответа на каждый, и полученное решение: Вопрос 1: ответ (a) — 0%, ответ (b) — 25%, ответ (c) — 75% Вопрос 2: ответ (a) — 10%, ответ (b) — 90%, ответ (c) — 0% Вопрос 3: ответ (a) — 40%, ответ (b) — 0%, ответ (c) — 60% то решающий будет выбирать ответ на 1-й вопрос независимо от того, какой он выберет ответ на 2-й и 3-й вопрос. А ситуация может быть такой (и наверняка такая), что ответ (с) в первом вопросе допустим только при условии ответа (a) в третьем. И чтобы просто описать эти взаимные условные вероятности нужен n-валентный тензор [math]m \times m\,\times\, ...\,\times\,m[/math] (где n — это количество вопросов, а m — количество ответов на каждый вопрос). Мне представляется, что в теоретическом решении самым простым выражением результата всё равно будет набор правильных равновероятных комбинаций. И упрощение брутфорса будет строится скорее всего за счёт предварительного более быстро исключения точно невозможных ответов и фиксацией точно правильных ответов. Например, если у нас есть два решения теста из 10 вопросов, по 5 ответов в каждом, каждый из которых набрал по 9 баллов, и ответы: 1-е решение: 1-a, 2-a, 3-a, 4-a, 5-a, 6-a, 7-a, 8-a, 9-a, 10-a 2-е решение: 1-a, 2-a, 3-a, 4-a, 5-a, 6-a, 7-a, 8-a, 9-a, 10-b То мы точно знаем, что решения 1-a, 2-a, 3-a, 4-a, 5-a, 6-a, 7-a, 8-a, 9-a правильные, а решения 10-a и 10-b неверные и наш брутфорс будет иметь три внешних цикла: 1-a, 2-a, 3-a, 4-a, 5-a, 6-a, 7-a, 8-a, 9-a, 10-c 1-a, 2-a, 3-a, 4-a, 5-a, 6-a, 7-a, 8-a, 9-a, 10-d 1-a, 2-a, 3-a, 4-a, 5-a, 6-a, 7-a, 8-a, 9-a, 10-e |
||
Вернуться к началу | ||
[ Сообщений: 8 ] |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |