Как использовать python для разделения двух гауссовских кривых?

32-разрядная Java требует непрерывного свободного пространства в памяти. Если вы укажете большой размер кучи, в памяти может быть не так много свободного пространства, даже если у вас гораздо больше свободного места, чем необходимо.

Установка 64-разрядной версии Java помогает в этих случаях , требование непрерывной памяти относится только к 32-разрядной Java.

0
задан Steve Xu 13 July 2018 в 06:35
поделиться

1 ответ

В принципе, вам нужно вывести параметры для вашей смеси Гаусса. Я создам аналогичный набор данных для иллюстрации.

Получение смесей с известными параметрами

from itertools import starmap

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import mlab
sns.set(color_codes=True)
# inline plots in jupyter notebook
%matplotlib inline


# generate synthetic data from a mixture of two Gaussians with equal weights
# the solution below readily generalises to more components 
nsamples = 10000
means = [30, 120]
sds = [10, 50]
weights = [0.5, 0.5]
draws = np.random.multinomial(nsamples, weights)
samples = np.concatenate(
    list(starmap(np.random.normal, zip(means, sds, draws)))
)

Распределить распределение

sns.distplot(samples)

Infer Параметры

from sklearn.mixture import GaussianMixture

mixture = GaussianMixture(n_components=2).fit(samples.reshape(-1, 1))
means_hat = mixture.means_.flatten()
weights_hat = mixture.weights_.flatten()
sds_hat = np.sqrt(mixture.covariances_).flatten()

print(mixture.converged_)
print(means_hat)
print(sds_hat)
print(weights_hat)

Получаем:

True
[ 122.57524745   29.97741112]
[ 48.18013893  10.44561398]
[ 0.48559771  0.51440229]

Вы можете настроить гиперпараметры GaussianMixture для улучшения соответствия, но это выглядит достаточно хорошо. Теперь мы можем построить каждый компонент (я только рисую первый):

mu1_h, sd1_h = means_hat[0], sds_hat[0]
x_axis = np.linspace(mu1_h-3*sd1_h, mu1_h+3*sd1_h, 1000)
plt.plot(x_axis, mlab.normpdf(x_axis, mu1_h, sd1_h))

1
ответ дан Eli Korvigo 17 August 2018 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: