Рубрики
Без рубрики

Нормальное распределение в Python

Даже если вы не находитесь в области статистики, вы, должно быть, нашли термин «нормальное распределение».

Автор оригинала: Pankaj Kumar.

Даже если вы не находитесь в области статистики, вы должны были настроить термин « Нормальное распределение ».

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

Распределение вероятностей может быть дискретным или непрерывным.

Предположим, в городе у нас есть высоты взрослых между возрастной группой в 20-30 лет от 4,5 футов до 7 футов.

Если бы нас попросили забрать 1 взрослых случайным образом и спросил, что его/ее (предполагая пол не влияет на высоту) высота? Там нет способа знать, что будет высота. Но если у нас есть распределение высот взрослых в городе, мы можем сделать ставку на наиболее вероятный результат.

Что такое нормальное распределение?

А Нормальное распределение также известен как Гауссовое распределение или отлично Кривая колокола Отказ Люди используют оба слова взаимозаменяемо, но это означает то же самое. Это непрерывное распределение вероятностей.

Функция плотности вероятности (PDF) для нормального распределения:

Функция плотности вероятности нормального распределения

Где, отклонение, ценность.

Терминология:

  • Среднее – Среднее это обычное среднее. Сумма общих точек, разделенных на общее количество точек.
  • Стандартное отклонениеСтандартное отклонение Рассказывает нам, как «распространяется» данные. Это мера того, как далеко каждая наблюдаемая стоимость из среднего.

Выглядит непростой, не так ли? Но это очень просто.

1. Пример реализации нормального распределения

Давайте посмотрим на код ниже. Мы будем использовать numpy и matplotlib для этой демонстрации:

# Importing required libraries

import numpy as np
import matplotlib.pyplot as plt

# Creating a series of data of in range of 1-50.
x = np.linspace(1,50,200)

#Creating a Function.
def normal_dist(x , mean , sd):
    prob_density = (np.pi*sd) * np.exp(-0.5*((x-mean)/sd)**2)
    return prob_density

#Calculate mean and Standard deviation.
mean = np.mean(x)
sd = np.std(x)

#Apply function to the data.
pdf = normal_dist(x,mean,sd)

#Plotting the Results
plt.plot(x,pdf , color = 'red')
plt.xlabel('Data points')
plt.ylabel('Probability Density')
Нормальная кривая

2. Свойства нормального распределения

Обычная функция плотности распределения просто принимает точку данных, а также среднее значение и стандартное отклонение и выбрасывает значение, которое мы называем плотность вероятности Отказ

Мы можем изменить форму кривой колоколов, изменив среднее и стандартное отклонение.

Изменение среднего смещения изменится к тому, что означает среднее значение, это означает, что мы можем изменить положение кривой, изменяя среднее значение, в то время как форма кривой остается неповрежденной.

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

Некоторые отличные свойства нормального распределения:

  • Среднее, режим и медиана все равно.
  • Общая площадь под кривой равна 1.
  • Кривая симметрична вокруг среднего.
Процентное распределение данных вокруг среднего

Эмпирическое правило говорит нам, что:

  • 68% данных падают в течение одного стандартного отклонения среднего.
  • 95% данных падают в течение двух стандартных отклонений среднего.
  • 99,7% данных падают в течение трех стандартных отклонений среднего.

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

Расчет вероятностей с нормальным распределением

Чтобы найти вероятность значения, происходящего в пределах диапазона в обычном распределении, нам просто нужно найти область под кривой в этом диапазоне. I.e. Нам нужно интегрировать функцию плотности.

Поскольку нормальное распределение является непрерывным распределением, площадь под кривой представляет вероятности.

Прежде чем перейти к деталям, сначала давайте просто узнаем, какое стандартное нормальное распределение.

Стандартное нормальное распределение просто похоже на нормальное распределение с и стандартным.

Z = (x-μ)/Σ

Значение Z выше также известно как z-счет Отказ Z-оценка дает вам представление о том, как далеко от среднего является точка данных.

Если мы намерены рассчитать вероятности вручную, нам нужно будет посмотреть наше Z-значение в Z-таблица чтобы увидеть совокупное процентное значение. Python предоставляет нам модули для этой работы для нас. Давайте попадаем в это.

1. Создание нормальной кривой

Мы будем использовать Scipy.normorm Классная функция для расчета вероятностей из нормального распределения.

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

Эта информация достаточно, чтобы сделать обычную кривую.

# import required libraries
from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sb

# Creating the distribution
data = np.arange(1,10,0.01)
pdf = norm.pdf(data , loc = 5.3 , scale = 1 )

#Visualizing the distribution

sb.set_style('whitegrid')
sb.lineplot(data, pdf , color = 'black')
plt.xlabel('Heights')
plt.ylabel('Probability Density')
Распределение высот

norm.pdf () Метод класса требует loc и масштаб Наряду с данными в качестве входного аргумента и дает значение плотности вероятности. loc это не что иное, кроме среднего и масштаб это стандартное отклонение данных. Код аналогичен тому, что мы создали в предыдущем разделе, но намного короче.

2. Расчет вероятности определенного возникновения данных

Теперь, если нас попросили выбирать одного человека случайным образом из этого распределения, то какова вероятность того, что высота человека будет меньше 4,5 футов.

Площадь под кривой как вероятность

Площадь под кривой, как показано на рисунке выше, будет вероятность того, что высота человека будет меньше 4,5 футов, если он выбран случайным образом из распределения. Посмотрим, как мы сможем рассчитать это в Python.

Район под кривой – это не что иное, как только интеграция функции плотности с ограничениями, равна -∞ до 4,5.

norm(loc = 5.3 , scale = 1).cdf(4.5)
0.211855 or 21.185 %

Единая строка кода выше находит вероятность того, что существует шанс на 21,18%, что если человек случайно выбран из нормального распределения со средним уровнем 5.3 и стандартным отклонением 1, то высота человека будет ниже 4,5 фута Отказ

Мы инициализируем объект класса Норма С средним и стандартным отклонением, затем используя .cdf () Способ, передавающий значение, до которого нам нужно найти совокупное значение вероятностей. Суммативная функция распределения (CDF) рассчитывает совокупную вероятность для заданного значения X.

Совокупное значение вероятностей из -∞ до ∞ будет равно 1.

Теперь, опять же, нас попросили выбрать один человек случайным образом из этого распределения, то какова вероятность того, что высота человека будет от 6,5 до 4,5 футов.

Площадь под кривой как расчет вероятности
cdf_upper_limit = norm(loc = 5.3 , scale = 1).cdf(6.5)
cdf_lower_limit = norm(loc = 5.3 , scale = 1).cdf(4.5)

prob = cdf_upper_limit - cdf_lower_limit
print(prob)
0.673074 or 67.30 %

Приведенный выше код сначала рассчитал совокупное значение вероятностей из -∞ до 6,5, а затем совокупное значение вероятностей от -∞ до 4,5. Если мы вычитаем CDF 4,5 от CDF 6,5, результатом мы получаем область под кривой между пределами 6,5 и 4.5.

Теперь, что, если нас спросили о вероятности того, что высота избранного человека, выбранного случайным образом, будет выше 6,5 фута?

Площадь под кривой между ценностью и бесконечности

Это просто, как мы знаем общую площадь под кривой, равным 1, и если мы рассчитаем совокупное значение вероятностей из -∞ до 6,5 и вычте его от 1, результат будет вероятность того, что высота избранного человека случайным образом будет выше 6,5 фута.

cdf_value = norm(loc = 5.3 , scale = 1).cdf(6.5)
prob = 1- cdf_value
print(prob)
0.115069 or 11.50 %.

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

Полный код из указанного выше реализации:

# import required libraries
from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sb

# Creating the distribution
data = np.arange(1,10,0.01)
pdf = norm.pdf(data , loc = 5.3 , scale = 1 )

#Probability of height to be under 4.5 ft.
prob_1 = norm(loc = 5.3 , scale = 1).cdf(4.5)
print(prob_1)

#probability that the height of the person will be between 6.5 and 4.5 ft.

cdf_upper_limit = norm(loc = 5.3 , scale = 1).cdf(6.5)
cdf_lower_limit = norm(loc = 5.3 , scale = 1).cdf(4.5)

prob_2 = cdf_upper_limit - cdf_lower_limit
print(prob_2)

#probability that the height of a person chosen randomly will be above 6.5ft

cdf_value = norm(loc = 5.3 , scale = 1).cdf(6.5)
prob_3 = 1- cdf_value
print(prob_3)

Заключение

В этой статье мы получили некоторую идею о нормальном распределении, как выглядит нормальная кривая, а главное ее реализация в Python.

Счастливое обучение!