В этом уроке по Python мы узнаем о «Scipy Stats Multivariate_Normal», где мы создадим многомерное нормальное распределение или возьмем из него случайную выборку.
Многомерные распределения отображают сравнение двух или более переменных, а также их связи. Более широкое многомерное распределение существует для любого одномерного распределения, содержащего одну случайную величину.
В Python Scipy есть объект multivariate_normal() в модуле scipy.stats, который представляет собой обычную многомерную случайную величину для создания многомерного нормального распределения.
Ключевое слово «среднее» описывает среднее значение. Ковариационная матрица задается с помощью ключевого слова cov.
Синтаксис:
scipy.stats.multivariate_normal.method_name(x,mean,cov,allow_singular, random_state)
Где параметры:
- x (array_data): квантили, компоненты которых представлены последней осью x.
- mean (array_data): среднее значение распределения.
- cov (array_data): ковариационная матрица распределения.
- allow_singular (boolean): разрешать или нет использовать одну ковариационную матрицу.
- random_state (int): функция numpy.random используется, если начальное значение равно None(или np.random). Используется синглтон RandomState. Если начальное число является целым числом, оно используется для создания нового экземпляра RandomState. Этот экземпляр используется, если начальное число уже имеет экземпляр Generator или RandomState.
Давайте рассмотрим пример, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
import numpy as np from scipy import stats
- Создайте данные x, PDF-файл которых мы хотим найти, используя приведенный ниже код.
x_data = np.linspace(0, 10, 100, endpoint=False) y_pdf = stats.multivariate_normal.pdf(x_data, mean=4.5, cov=1.0) print(y_pdf)
Метод Cdf
При описании распределения вероятностей случайных величин используется кумулятивная функция распределения. С его помощью можно описать вероятность дискретной, непрерывной или смешанной переменной. Чтобы получить кумулятивную вероятность для случайной величины, функция плотности вероятности складывается.
Объект multivariate_normal имеет метод cdf для вычисления кумулятивного распределения многомерного нормального распределения.
Синтаксис:
scipy.stats.multivariate_normal.cdf(x,mean,cov,allow_singular, random_state)
Давайте рассмотрим пример, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
import numpy as np from scipy import stats
- Создайте данные x, cdf которых мы собираемся вычислить, используя приведенный ниже код.
x_data = np.linspace(0, 20, 200, endpoint=False) y_cdf = stats.multivariate_normal.cdf(x_data, mean=5.5, cov=2.0) print(y_cdf)
Метод Logpdf
Многомерная функция нормальной плотности, оцениваемая для данного вектора x, представлена ее натуральным логарифмом, который представляет собой логарифмическое правдоподобие для этого вектора. Функция логарифмической плотности также известна как функция логарифмической плотности вероятности(PDF), которая является стандартным сокращением для функции плотности вероятности.
Синтаксис:
scipy.stats.multivariate_normal.logpdf(x,mean,cov,allow_singular, random_state)
Давайте рассмотрим пример, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
import numpy as np from scipy import stats
- Создайте данные x, PDF-файл журнала которых рассчитывается с использованием приведенного ниже кода.
x_data = np.linspace(0, 10, 150, endpoint=False) y_logpdf = stats.multivariate_normal.logpdf(x_data, mean=1.5, cov=1.0) print(y_logpdf)
Метод Logcdf
Функция CDF логнормального распределения дает вероятность того, что наблюдение логнормального распределения с параметром логарифмического масштаба и параметром формы меньше или равно x. Та же концепция применима и к многомерному нормальному распределению.
Синтаксис:
scipy.stats.multivariate_normal.logcdf(x,mean,cov,allow_singular, random_state)
Давайте рассмотрим пример, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
import numpy as np from scipy import stats
- Создайте данные x, журнал cdf которых рассчитывается с использованием приведенного ниже кода.
x_data = np.linspace(0, 30, 300, endpoint=False) y_logcdf = stats.multivariate_normal.logcdf(x_data, mean=3.5, cov=2.0) print(y_logcdf)
Метод Rvs
Метод rvs() объекта multivariate_normal в модуле scipy.stats создает многомерное нормальное распределение и берет из него случайные выборки.
Синтаксис:
scipy.stats.multivariate_normal.rvs(mean,cov,size, random_state)
Где параметры:
- mean (array_data): среднее значение распределения.
cov (array_data): ковариационная матрица распределения. - size (int): это размер выборки.
- random_state (int): если начальное значение равно None, используется метод numpy.random(или np.random). Он использует единственный экземпляр RandomState. Если начальное число является целым числом, с использованием начального числа создается новый объект RandomState. Если начальное число уже имеет экземпляр Generator или RandomState, используется этот экземпляр.
Давайте возьмем случайную выборку из многомерного нормального распределения, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
import numpy as np from scipy import stats import matplotlib.pyplot as plt import seaborn as sns
- Создайте многомерное нормальное распределение, используя приведенный ниже код.
multi_norm = stats.multivariate_normal()
- Создайте данные топора и PDF-файл многомерного нормального распределения, используя приведенный ниже код.
xdata = np.linspace(-2, 2, 50000) multi_pdf = multi_norm.pdf(xdata)
- Нарисуйте случайную выборку из многомерного нормального распределения, используя приведенный ниже код.
samp_size = 100000 sample_data = multi_norm.rvs(samp_size)
- Постройте приведенный выше образец, используя приведенный ниже код.
fig, ax = plt.subplots(figsize=(12, 5)) sns.distplot(sample_data, kde=False, norm_hist=True, color='blue', ax=ax) ax.plot(xdata, multi_pdf, color='red') ax.set_title('Sampling Histogram Vs Normal Pdf', fontsize=24) ax.set_xlabel('x', fontsize=20) ax.set_ylabel('Density', fontsize=20);