Вероятность в Python: перестановки и сочетания | by Iuliia Averianova | NOP::Nuances of Programming
Теория вероятности не сложная, по крайней мере, на уровне, необходимом для начала работы в науке о данных. Возможно, прошло какое-то время с тех пор, как вы познакомились с этой темой, и, если ваши знания немного ослабли, эта статья поможет вам вернуться в русло.
Быстрый поиск в Google выявляет 4 основные математические темы, на которых основана вся область:
- Линейная алгебра
- Анализ
- Статистика
- Вероятность
Сегодня я расскажу о двух важнейших концепциях из теории вероятности: сочетаниях и перестановках.
Начнем с базового определения самой вероятности:
Вероятность — степень (относительная мера, количественная оценка) возможности наступления некоторого события. В теории вероятностей вероятность принимает значения от 0 до 1. Значение 1 соответствует достоверному событию, невозможное событие имеет вероятность 0. Чем выше значение, тем больше вероятность события.
Вероятность как область научного знания важна, потому что неопределенность и случайность встречаются повсеместно, соответственно, знание о вероятности помогает принимать более информированные решения и осмыслять неопределенности.
Перед погружением в перестановки и сочетания, нужно понять еще один термин — факториал.
Хороший вопрос. Согласно Википедии:
Факториал — функция, определённая на множестве неотрицательных целых чисел. Факториал натурального числа n определяется как произведение всех натуральных чисел от 1 до n включительно.
Факториал вычисляется по следующей формуле:
Вот пример:
Теперь вы, возможно, задумались, как вычислять факториалы в Python. Во многих библиотеках есть готовые функции, но создать собственную функцию тоже очень легко, и именно это мы и сделаем.
Вот простая рекурсивная функция, которая справится с задачей:
Теперь можно использовать эту функцию для проверки примера выше:
Хорошо, но где факториалы используются в реальном мире?
Скажем, в гонке участвуют пять человек, и вы хотите узнать количество способов, по которым эти пятеро могут финишировать первыми, вторыми или третьими. Можно взять листок бумаги и просто записать все возможные варианты, но зачем? Что если участников 100?
Вот как эта задача решается с помощью факториалов:
Это называется перестановка.
И снова начнем с определения:
В математике перестановка — это упорядочение членов набора в последовательность или, если последовательность уже определена, перестановка (изменение порядка) ее элементов.
Существует два способа вычисления перестановок. Выбор способа зависит от того, разрешается повторение или нет. Давайте рассмотрим на примере.
У вас есть веб-сайт, на котором могут регистрироваться пользователи. Им нужно вводить пароль длиной строго в 8 символов, которые не должны повторяться. Сперва нужно определить, сколько букв и цифр в английском алфавите:
- количество букв: 26
- количество цифр: 10
То есть всего 36. Тогда n = 36, а r = 8, потому что пароль должен быть длиной в 8 символов. Зная это, мы легко можем рассчитать количество уникальных паролей, используя формулу:
Если вы поспешили и посчитали вручную:
В Python это тривиальная задача:
Здорово, но я хочу разрешить пользователям повторно использовать символы. Нет проблем, в данном случае это перестановки с повторениями, формула еще проще:
Мы уже знаем, что n (36) и r (8), так что вот решение:
И снова реализация на Python тривиальна:
Это действительно большое число. Попробуйте произнести его вслух!
Далее на повестке дня — сочетания. Вам наверняка любопытно, что это такое и в чем их отличие от перестановок. Начнем с определения:
Сочетание— это выбор значений из набора, в котором (в отличие от перестановок) порядок выбора не имеет значения.
Чтобы понять это определение, разберем следующий пример: группа людей, выбранных в команду — это та же самая группа, независимо от порядка участников. Вот и вся идея сочетаний. Если выбрать 5 членов команды, можно упорядочить их по имени, росту или другому параметру, но команда останется прежней — порядок не имеет значения.
Давайте запишем это формулой. Количество сочетаний C набора из n объектов, взятых по r, рассчитывается так:
С этим уравнением мы можем решить следующую задачу: сколькими способами можно выбрать в футбольную команду 5 человек из 10?
Группа будет той же, порядок значения не имеет. Значит, n = 10, а r = 5:
И это можно легко сделано в Python:
Великолепно! Но интересно, существует ли версия сочетаний с повторениями? Да!
Представьте, что готовите сэндвич и по какой-то причине вам нужно использовать только 4 ингредиента из 10. Однако ингредиенты не должны быть уникальны, например, можно положить 3 куска сыра и 1 кусок салями. Как это здорово, я тоже обожаю сыр, вот спасибо!
Но как сформулировать эту идею математически? Ответ снова прост:
Давайте применим формулу к примеру выше. n снова равно 10 (потому что 10 возможных ингредиентов), а r = 4 (потому что выбрать можно только 4):
Используем Python для проверки:
Превосходно.
Сочетания и перестановки математически просты, однако сложность заключается в том, как представить в такой форме реальные проблемы. Иногда бывает трудно выделить значения n и r в повседневной жизни. Я не могу решить для вас подобные задачи, но надеюсь, что данная статья поможет вам разобраться.
Читайте также:
- Как организовать код в Python
- Превращаем сценарии Python в инструменты МО
- Создаем чат-бот в Python с помощью nltk
Читайте нас в телеграмме, vk и Яндекс. Дзен
Перевод статьи Dario Radečić: Essential Probability in Python: Permutations and Combinations
Как оценивать вероятности
Мы уже упоминали, что оценивать вероятности классов как $softmax(f_w(x_i))$ для какой-то произвольной функции $f_w$ – это дело подозрительное. В этом разделе мы поговорим о том, как это делать хорошо и правильно.
Что же такое вероятность класса, если объект либо принадлежит этому классу, либо нет?
Ограничимся пока случаем двуклассовой классификации с классами 0 и 1. Пожалуй, если утверждается, что мы предсказываем корректную вероятность класса 1 (обозначим её $q(x_i)$), то прогноз «объект $x_i$ принадлежит классу 1 с вероятностью $\frac23$» должен сбываться в $\frac23$ случаев. То есть, условно говоря, если мы возьмём все объекты, которым мы предсказали вероятностью $\frac23$, то среди них что-то около двух третей действительно имеет класс 1. На математическом языке это можно сформулировать так: Если $\widehat{p}$ – предсказанная вероятность класса 1, то $P(y_i = 1 \vert q(x_i) = \widehat{p}) = \widehat{p}$.
К сожалению, в реальной жизни $\widehat{p}$ – это скорее всего вещественные числа, которые будут различными для различных $y_i$, и никаких вероятностей мы не посчитаем, но мы можем разбить отрезок $[0,1]$ на бины, внутри каждого из которых уже вычислить, каковая там доля объектов класса 1, и сравнить эту долю со средним значением вероятности в бине:
У модели, которая идеально предсказывает вероятности (как обычно говорят, у идеально калиброванной модели) жёлтые точки на диаграме калибровки должны совпадать с розовыми.
А вот на картинке выше это не так: жёлтые точки всегда ниже розовых. Давайте поймём, что это значит. Получается, что наша модель систематически завышает предсказанную вероятность (розовые точки), и порог отсечения нам, выходит, тоже надо было бы сдвинуть вправо:
Но такая картинка, пожалуй, говорит о какой-то серьёзной патологии классификатора; гораздо чаще встречаются следующие две ситуации:
Слишком уверенный (overconfident) классификатор: Такое случается с сильными классификаторыми (например, нейросетями), которые учились на метки классов, а не на вероятности: тем самым процесс обучения стимулировал их всегда давать как можно более близкий к 0 или 1 ответ.
Неуверенный (underconfident) классификатор:
Такое может случиться, например, если мы слишком много обращаем внимания на трудные для классификации объекты на границе классов (как, скажем, в SVM), в каком-то смысле в ущерб более однозначно определяемым точкам. Этим же могут и грешить модели на основе бэггинга (например, случайный лес). Грубо говоря, среднее нескольких моделей предскажет что-то близкое к единице только если все слагаемые предскажут что-то, близкое к единице – но из-за дисперсии моделей это будет случаться реже, чем могло бы. См. статью.
Вам скажут: логистическая регрессия корректно действительно предсказывает вероятности
Вам даже будут приводить какие-то обоснования. Важно понимать, что происходит на самом деле, и не дать ввести себя в заблуждение. В качестве противоядия от иллюзий предлагаем рассмотреть два примера.
- Рассмотрим датасет c двумя классами (ниже на картинке обучающая выборка)
Обучим на нём логистическую регрессию из sklearn безо всяких параметров (то есть $L^2$-регуляризованную, но это не так важно). k$ для $0\leqslant j,k\leqslant 5$ в качестве признаков, и обучив поверх этих данных логистическую регрессию. Снова нарисуем некоторые точки тестовой выборки и предсказания вероятностей для всех точек области:
Видим, что имеет место сочетание двух проблем: неуверенности посередине и очень уверенных ошибок по краям.
Нарисуем теперь калибровочные кривые для обеих моделей:
Калибровочные кривые весьма примечательны; в любом случае ясно, что с предсказанием вероятностей всё довольно плохо. Посмотрим ещё, какие вероятности наши классификаторы чаще приписывают объектам:
Как и следовало ожидать, предсказания слабого классификатора тяготеют к серединке (та самая неуверенность), а среди предсказаний переобученного очень много крайне уверенных (и совсем не всегда правильных).
Но почему же все твердят, что логистическая регрессия хорошо калибрована?!
Попробуем понять и простить её.
Как мы помним, логистическая регрессия учится путём минимизации функционала
$$l(X, y) = -\sum_{i=1}^N(y_i\log(\sigma(\langle w, x_i\rangle)) + (1 — y_i)\log(1 — \sigma(\langle w, x_i\rangle)))$$
Отметим между делом, что каждое слагаемое – это кроссэнтропия распределения $P$, заданного вероятностями $P(0) = 1 — \sigma(\langle w, x_i\rangle)$ и $P(1) = \sigma(\langle w, x_i\rangle)$, и тривиального распределения, которое равно $y_i$ с вероятностью $1$. n (1 — y_i)\right)\log(1 — \sigma(\langle w, x_1\rangle)) =$$
$$=-n\left(\vphantom{\frac12}p_0\log(\sigma(\langle w, x_1\rangle)) + p_1\log(1 — \sigma(\langle w, x_1\rangle))\right)$$
где $p_j$ – частота $j$-го класса среди истинных меток. В скобках также стоит кросс-энтропия распределения, задаваемого частотой меток истинных классов, и распределения, предсказываемого логистической регрессией. Минимальное значение кросс-энтропии (и минимум функции потерь) достигается, когда
$$\sigma(\langle w, x_1\rangle) = p_0,\quad 1 — \sigma(\langle w, x_1\rangle) = p_1$$
Теперь, если признаковое описание данных достаточно хорошее (то есть классы не перемешаны как попало и всё-таки близки к разделимым) и в то же время модель не переобученная (то есть, в частности, предсказания вероятностей не скачут очень уж резко – вспомните второй пример), то результат, полученный для $n$ совпадающих точек будет приблизительно верным и для $n$ достаточно близких точек: на всех них модель будет выдавать примерно долю положительных, то есть тоже хорошую оценку вероятности. N(\vphantom{\frac12}y_i\log(\sigma(q(x_i))) + (1 — y_i)\log(1 — \sigma(q(x_i))))\longrightarrow\min\limits_{a,b}$$
Для избежания переобучения Платт предлагал также заменить метки $y_i$ и $(1 — y_i)$ на регуляризованные вероятности таргетов:
$$t_0 = \frac1{\#\{i \vert y_i = 0\} + 2},\quad t_1 = \frac{\#\{i \vert y_i = 1\} + 1}{\#\{i \vert y_i = 0\} + 2}$$
Калибровка Платта неплохо справляется с выколачиванием вероятностей из SVM, но для более хитрых классификаторов может спасовать. В целом, можно показать, что этот метод хорошо работает, если для каждого из истинных классов предсказанные вероятности $q(x_i)$ распределы нормально с одинаковыми дисперсиями. Подробнее об этом вы можете почитать в этой статье. Там же описано обобщение данного подхода – бета-калибровка.
С большим количеством других методов калибровки вы можете познакомиться в этой статье
Как измерить качество калибровки
Калибровочные кривые хорошо показывают, что есть проблемы, но как оценить наши потуги по улучшению предсказания вероятностей? Хочется иметь какую-то численную метрику. N\left(\vphantom{\frac12}y_i\log{q(x_i)} + (1 — y_i)\log(1 — q(x_i))\right)$$
Это же и помогает высветить ограничения подхода, если вспомнить рассуждения о калиброванности логистической регрессии. Для достаточно гладких классификатора и датасета briar score и log-loss будут адекватными средствами оценки, но если нет – возможно всякое.
Вопрос на засыпку: а как быть, если у нас классификация не бинарная, а многоклассовая? Что такое хорошо калиброванный классификатор? Как это определить численно? Как заставить произвольный классификатор предсказывать вероятности?
Мы не будем про это рассказывать, но призываем читателя подумать над этим самостоятельно или, например, посмотреть туториал с ECML KDD 2020.
6.3: Использование стандартной ошибки для вероятности
- Последнее обновление
- Сохранить как PDF
- Идентификатор страницы
- 7109
- Foster et al.
- Университет Миссури, ул. Луи, Университет Райса и Университет Хьюстона, кампус в центре города через Инициативу Университета Миссури по доступным и открытым образовательным ресурсам
В главе 6 мы видели, что можно использовать \(z\)-показатели для разделения нормального распределения и вычисления доли площади под кривой в одном из новых регионов, что дает нам вероятность случайного выбора \( z\)-оценка в этом диапазоне. Мы можем следовать точному процессу выборки для выборочных средних, преобразовывая их в \(z\)-показатели и вычисляя вероятности. Единственное отличие состоит в том, что вместо деления необработанной оценки на стандартное отклонение мы делим выборочное среднее значение на стандартную ошибку.
\[z =\dfrac{\overline{X}-\mu}{\sigma_{\overline{X}}}=\dfrac{\overline{X}-\mu}{\frac {\overline{\sigma }}{\sqrt{n}}} \]
Допустим, мы берем выборки из совокупности со средним значением 50 и стандартным отклонением 10 (те же значения, что и на рис. 2). Какова вероятность того, что мы получим случайную выборку размера 10 со средним значением больше или равным 55? То есть при n = 10 какова вероятность того, что \(\overline{X}\) ≥ 55? Во-первых, нам нужно преобразовать средний балл этой выборки в \(z\)-балл:
\[z=\dfrac{55-50}{\frac{10}{\sqrt{10}}}=\dfrac{5}{3.16}=1,58 \nonumber \]
Теперь нам нужно заштриховать область под кривой нормали, соответствующую показателям больше \(z\) = 1,58, как показано на рисунке \(\PageIndex{1}\):
Рисунок \(\PageIndex{1}\): Площадь под кривой больше, чем \(z\) = 1,58Теперь мы переходим к нашей \(z\)-таблице и обнаруживаем, что площадь слева от \(z\ ) = 1,58 равно 0,9429. Наконец, поскольку нам нужна площадь справа (согласно нашей заштрихованной диаграмме), мы просто вычитаем ее из 1, чтобы получить 1,00 – 0,9.429 = 0,0571. Таким образом, вероятность случайного отбора выборки из 10 человек из населения со средним значением 50 и стандартным отклонением 10, среднее значение выборки которого составляет 55 или более, составляет \(p\) = 0,0571, или 5,71%. Обратите внимание, что мы говорим о средних значениях, равных 55 и более. Это связано с тем, что, строго говоря, невозможно рассчитать вероятность того, что оценка будет принимать ровно 1 значение, поскольку «заштрихованная область» будет просто линией без области для вычисления.
Теперь давайте сделаем то же самое, но предположим, что вместо выборки из 10 человек мы взяли выборку из 50 человек. Сначала находим \(z\):
\[z=\dfrac{55-50}{\frac{10}{\sqrt{50}}}=\dfrac{5}{1,41}=3,55 \]
Затем заштриховываем соответствующую область нормального распределения:
Рисунок \(\PageIndex{2}\): Площадь под кривой больше, чем \(z\) = 3,55Обратите внимание, что ни одна область рисунка \(\PageIndex{2}\) не затенена. Это связано с тем, что область под кривой, которая уходит далеко в хвост, настолько мала, что ее даже нельзя увидеть (красная линия была добавлена, чтобы показать, где именно начинается область). Таким образом, мы уже знаем, что вероятность должна быть меньше для \(N\) = 50, чем для \(N\) = 10, потому что размер области (доля) намного меньше.
Мы сталкиваемся с похожей проблемой, когда пытаемся найти \(z\) = 3,55 в нашей стандартной таблице нормального распределения. Таблица поднимается только до 3,09, потому что все, что выше этого, равно почти 0 и меняется так мало, что не стоит печатать значения. Самое близкое, что мы можем получить, это вычесть наибольшее значение, 0,9990, из 1, чтобы получить 0,001. Мы знаем, что технически фактическая вероятность меньше этой (поскольку 3,55 находится дальше в хвосте, чем 3,09), поэтому мы говорим, что вероятность \(p\) < 0,001, или меньше 0,1%.
В этом примере показано, какое влияние может оказать размер выборки. Из той же популяции, которая искала одно и то же, изменение только размера выборки увеличило вероятность примерно с 5% (или вероятность 1/20) до вероятности менее 0,1% (или менее 1 из 1000). По мере увеличения размера выборки n стандартная ошибка уменьшалась, что, в свою очередь, приводило к увеличению значения \(z\), что в конечном итоге приводило к значению \(p\) (термин для обозначения вероятности, который мы будем часто использовать в Unit 2) уменьшаться.
\[\mathrm{n} \uparrow \sigma_{\overline{X}} \downarrow \mathrm{z} \uparrow \mathrm{p} \downarrow\]
Давайте посмотрим на это еще с одной стороны. Для той же совокупности с размером выборки 50 и стандартным отклонением 10, какая доля выборочных средних попадает между 47 и 53, если они имеют размер выборки 10 и размер выборки 50?
Начнем снова с \(n\) = 10. Преобразовав 47 и 53 в \(z\)-баллы, получим \(z\) = -0,95 и \(z\) = 0,95 соответственно. Из нашей таблицы \(z\) мы находим, что соотношение между этими двумя оценками составляет 0,6578 (процесс здесь оставлен для того, чтобы учащийся попрактиковался в преобразовании \(\overline{X}\) в \(z\) и \(z\) в пропорции). Таким образом, 65,78% выборочных средних при размере выборки 10 попадут между 47 и 53. площадь как 0,9668, почти 97%! Заштрихованные области для каждого из этих распределений выборки показаны на рисунке \(\PageIndex{3}\). Распределения выборки показаны в исходной шкале, а не в виде z-показателей, поэтому вы можете видеть эффект затенения и то, какая часть тела попадает в диапазон, отмеченный пунктирной линией.
Рисунок \(\PageIndex{3}\): Области между 47 и 53 для выборочных распределений \(n\) = 10 и \(n\) = 50Эта страница под названием 6.3: Использование стандартной ошибки для вероятности находится в разделе лицензия CC BY-NC-SA 4.0, автором, ремиксом и/или куратором которой являются Foster et al. (Инициатива Университета Миссури по доступным и открытым образовательным ресурсам) через исходный контент, отредактированный в соответствии со стилем и стандартами платформы LibreTexts; подробная история редактирования доступна по запросу.
- Наверх
- Была ли эта статья полезной?
- Тип изделия
- Раздел или Страница
- Автор
- Фостер и др.
- Лицензия
- CC BY-NC-SA
- Версия лицензии
- 4,0
- Показать оглавление
- нет
- Теги
- источник@https://irl.umsl.edu/oer/4
Как рассчитать вероятность в Excel — Краткое руководство
Узнать как рассчитать вероятность в Excel с помощью функции ПРОБ с верхним пределом или без него.
Что такое вероятность
Вероятность измеряет вероятность того, что событие произойдет или насколько вероятно, что утверждение истинно. Чем выше вероятность события, тем больше вероятность того, что событие произойдет.
Как рассчитать вероятность в Excel
Мы измеряем вероятность через отношение благоприятных событий к общему количеству возможных событий. Excel использует статистическую функцию PROB для расчета вероятности.
Для простоты приведем простое определение.
= количество желаемых исходов / количество возможных исходов
В случае с шестигранными костями вероятность выпадения «6» = 1/6 = 16,67%.
Функция PROB
В этом разделе мы познакомимся с функцией Excel PROB. С его помощью вы можете рассчитать вероятность, используя встроенную функцию электронной таблицы.
Аргументы синтаксиса и функции
= PROB (диапазон, диапазон_проб, [нижний_предел], [верхний_предел])
где
- x _ диапазон : диапазон, содержащий числовые значения
- prob_range : диапазон, содержащий вероятности для каждого соответствующего значения
- верхний_предел [необязательно]; верхний предел значений
Базовый пример расчета вероятности в Excel
В следующем примере сначала подготовим нашу таблицу.
Диапазон C3:C6 содержит количество заказов за период. В диапазоне D3:D6 вы можете найти вероятности для каждого ордера. Наконец, нижний предел — 1500, а 2000 — верхний предел в ячейке G3.
В этом случае мы будем использовать все четыре аргумента функции PROB.
Введите формулу в ячейку G4:
=ПРОБ(C3:C6, D3:D6, G2, G3)
Результат равен 55%. Что это значит?
Вероятность того, что количество заказов между 1500 и 2000 равно 55%.
Совет: Если вы столкнулись с ошибками при расчете вероятности в Excel, внимательно посмотрите на свои данные. Подготовьте данные, чтобы избежать дальнейших проблем: сумма всех вероятностей должна равняться 1 (или 100%). В примере можно применить эту проверку для столбца D.
Стоит перепроверить наши данные: СУММ(D3:D6) = 1 = 100%
Рассчитать вероятность без верхнего предела
Следующий пример объяснит, что произойдет, если вы не используете верхние пределы для расчета вероятности в Excel.