Ответ 1
Итак, здесь нужно учесть пару вещей. сначала Вы правы, что априорные вероятности использования -.5 и .5 соответственно, потому что это то, как мы математически кодируем не зная, что происходит, но вы показываете три графика независимо друг от друга и записывая уравнения Байеса только с одной размерностью и нарушающие ваше предположение о зависимости. Также нет необходимости использовать ваш маргинальный P (D) в этой настройке, чтобы перейти к условным вероятностям, о которых вы спрашиваете.
То, чем вы на самом деле являетесь, является условной вероятностью того, что инструмент пройдет тест C, как он сделал на тесте A и /B > /p >
Если вы только сделали тест A, то Байес говорит:
P (C | A) = P (A | C) P (C)/P (A) или P (B | A) = P (A | B) P (B)/P (A)
Где A, B и C могут иметь значения pass или fail.
Если вы выполнили тесты A и B, то вы хотите узнать вероятность прохождения теста C, о котором говорит Байес:
P (C | A, B) = P (A, B | C) P (C)/P (A, B)
Что выглядит намного сложнее, но дело в том, что вам действительно не нужно делать байесовский вывод, чтобы получить условные вероятности, о которых вы просите:
Какова моя вероятность прохождения следующего теста, учитывая, что я уже прошел или не прошел этот тест?
У вас есть вся информация, необходимая для непосредственного вычисления. Как правило, байесовский вывод используется, когда у них нет такой роскоши.
Чтобы ответить на вопрос о том, как рассчитать вероятности прохождения будущего теста на основе того, прошел ли он уже один или несколько тестов, подумайте о том, какие значения вы хотите знать.
"Учитывая, что инструмент прошел (или не прошел) тест 1, какова вероятность того, что он пройдет тест 2 и проверит 3"
С вашими историческими данными вы можете напрямую ответить на этот вопрос.
В вашем вопросе говорится, что вы заботитесь о вероятности прохождения/сбоя, поэтому для каждого теста есть два возможных результата, означающих, что у вас действительно есть только 8 состояний для каждого набора тестов прибора
(Количество результатов TestA) * (Количество результатов TestB) * (Количество результатов TestC) = 2 * 2 * 2 = 8
Для вычисления вероятностей, которые вы хотите, рассмотрите 3D-матрицу, которую мы будем называть ProbabilityHistogram с ячейкой для каждого результата. Таким образом, матрица равна 2 * 2 * 2. Где матрица индексируется по тому, прошло или нет тест исторически. Мы собираемся использовать эту матрицу для построения гистограммы исторических данных о прохождении/сбое, а затем ссылаться на эту гистограмму для построения ваших вероятностей, представляющих интерес для кода ниже.
В нашем подходе количество раз, которое ранее тестировал любой инструмент, прошедший тест A, неудачный тест B и пройденный тест C, можно найти в ProbabilityHistogram [1,0,1], причем все три будут найдены в ProbabilityHistogram [ 1,1,1], сбой всех трех вероятностных гистограмм [0,0,0] и т.д.
Вот как вычислить нужные значения
Настройка необходимой гистограммы
- Начнем с определения матрицы 2 * 2 * 2 для хранения данных гистограммы.
- чтение ваших исторических данных
- Для каждого исторического теста, который у вас есть в вашем наборе данных, обновите ProbabilityHistogram с помощью кода UpdateProbHisto ниже
Рассчитайте интересующие вероятности:
- Вычислить условные вероятности после одного теста с использованием CProb_BCgA ниже
- Вычислить условные вероятности после двух тестов с использованием CProb_CgAB ниже
Код: (Извините, что на С#, потому что у меня ограниченный опыт работы на Python, если у вас есть вопросы, просто оставляйте комментарий, и я объясню далее)
Настройка 3D-матрицы
//Define Probability Histogram
double[, ,] ProbHisto = new double[2, 2, 2];// [A Test Outcome, B Test Outcome, C Test Outcome]
Обновить гистограмму
//Update Histogram based on historical data.
//pass in how the instrument did on each test as one dataset
void updateProbHisto(bool APassed, bool BPassed, bool CPassed) {
ProbHisto[Convert.ToInt16(APassed), Convert.ToInt16(BPassed), Convert.ToInt16(CPassed)]++;
}
Вычислить вероятности после одного теста
//calculate the conditional probability that test B and test C will Pass given A test reult
double[] CProb_BCgA(bool ATestResult) {
//Calculate probability of test B and test C success looking only at tests that passed or failed the same way this instrument did given the A test result
double[] rvalue = {0.0,0.0};//P(B|A), P(C|A)
double BPassesGivenA = ProbHisto[Convert.ToInt16(ATestResult),1,0] + ProbHisto[Convert.ToInt16(ATestResult),1,1];
double CPassesGivenA = ProbHisto[Convert.ToInt16(ATestResult),1,1] + ProbHisto[Convert.ToInt16(ATestResult),0,1];
rvalue[0] = BPassesGivenA /(BPassesGivenA+ProbHisto[Convert.ToInt16(ATestResult),0,0] + ProbHisto[Convert.ToInt16(ATestResult),0,1]); // BPasses over BPasses + BFailures
rvalue[1] = CPassesGivenA /(CPassesGivenA+ProbHisto[Convert.ToInt16(ATestResult),0,0] + ProbHisto[Convert.ToInt16(ATestResult),1,0]);// CPasses over CPasses + CFailures
return rvalue;
}
Вычислить вероятности после двух тестов
//Calculate the conditional probability that test C will pass looking only at tests that passed or failed the same way this instrument did given the A and B test results
double CProb_CgAB(bool ATestResult, bool BTestResult)
{
//Calculate probability of test C success given A and B test results
double rvalue = 0.0;// P(C|A,B)
double CPassesGivenAB = ProbHisto[Convert.ToInt16(ATestResult),Convert.ToInt16(BTestResult),1];
rvalue= CPassesGivenAB /(CPassesGivenAB + ProbHisto[Convert.ToInt16(ATestResult),Convert.ToInt16(BTestResult),0]);// CPasses over CPasses + CFailures
return rvalue;
}
Коды условной вероятности устанавливаются в предположении, что вы выполняете тест A, а затем тестируете B, а затем проверяете C (BCgA = вероятность прохождения B и C, передавая данный результат теста A), но в результатах теста прямо нет sub для B или C ins протектора результата для A, который просто имеет в виду, какой индекс вы помещаете в данные тестового прохода/сбоя.