Вопрос или проблема
Я хотел бы обучить свои данные с использованием HMM-GMM (метод Баум-Уэлча с гауссовской смесью)
, чтобы найти лучшие параметры, подходящие для моих данных.
Примечание : Мои данные непрерывные, а не дискретные.
Я попробовал использовать hmmlearn из scikit learn
, но считаю, что он не поддерживает модель непрерывного HMM-GMM, но я попробовал с дискретными данными, и все работает хорошо.
Я попытался использовать pomegranate
, но не смог понять документацию, также не уверен, использует ли он GMM для подгонки моих данных.
Я попробовал установить библиотеку hmms
, но при установке получил ошибку:
Команда “python setup.py egg_info” завершилась с ошибкой 1 в
C:\Users\eponr\AppData\Local\Temp\pycharm-packaging\hmms\
Установка hmms
Использование кэша https://files.pythonhosted.org/packages/e9/e4/c070c44ec8a391f6d5501316d1ed7615058f1fd365ff4ed65c9636d0bf62/hmms-0.1.tar.gz
Полный вывод команды python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\eponr\AppData\Local\Temp\pycharm-packaging\hmms\setup.py", line 22, in <module>
ext_modules=cythonize(glob.glob('hmms/*.pyx'), language_level=3, include_dirs=[numpy.get_include()]),
File "C:\Users\eponr\PycharmProjects\untitled1\venv\lib\site-packages\Cython\Build\Dependencies.py", line 955, in cythonize
c_options = CompilationOptions(**options)
File "C:\Users\eponr\PycharmProjects\untitled1\venv\lib\site-packages\Cython\Compiler\Main.py", line 563, in __init__
raise ValueError(message)
ValueError: got unknown compilation option, please remove: include_dirs
Пожалуйста, предложите несколько библиотек на Python, которые решают мою проблему?
Модель GMMHMM из hmmlearn поддерживает данные с непрерывными значениями.
Ответ или решение
Для тренировки модели скрытых марковских моделей с использованием смеси гауссовых распределений (HMM-GMM) в Python существует несколько библиотек. Вы упомянули, что ваши данные непрерывные, и у вас уже был опыт работы с библиотеками hmmlearn
, pomegranate
и hmms
. В данном ответе я подробно расскажу о лучших вариантах, которые могут помочь вам в решении вашей задачи.
1. hmmlearn
Библиотека hmmlearn
является одним из наиболее распространенных инструментов для работы с скрытыми марковскими моделями в Python. Хотя вы упомянули, что у вас были проблемы с непрерывными данными, в hmmlearn
есть возможность использовать модели, основанные на гауссовых суммарных функциях через класс GaussianHMM
. Эта реализация позволяет эффективно применять алгоритм Баум-Уэлча для нахождения оптимальных параметров модели при обработке непрерывных данных:
from hmmlearn import hmm
import numpy as np
# Генерация случайных данных или загрузка ваших данных
data = np.random.rand(100, 1) # замените вашу выборку
# Создание модели
model = hmm.GaussianHMM(n_components=3, covariance_type="full", n_iter=100)
model.fit(data)
# Предсказание скрытых состояний
hidden_states = model.predict(data)
Таким образом, hmmlearn
может быть хорошим вариантом для решения вашей задачи.
2. pomegranate
pomegranate
– это мощная библиотека, которая поддерживает не только скрытые марковские модели, но и смеси гауссовых распределений. Хотя вам было сложно разобраться с документацией, этот инструмент также подходит для работы с непрерывными данными:
from pomegranate import HiddenMarkovModel, GeneralMixtureModel, NormalDistribution
# Создание гауссовой смеси
gm = GeneralMixtureModel([NormalDistribution(0, 1), NormalDistribution(5, 1)])
# Определение скрытой марковской модели
model = HiddenMarkovModel.from_matrix(
[[0.7, 0.3], [0.3, 0.7]],
[[1, 1], [1, 1]],
[gm, gm]
)
# Подгонка модели под данные
model.fit(data)
Модель pomegranate
имеет хороший функционал и производительность, что делает ее отличным вариантом.
3. TensorFlow Probability
Если вы ищете более современные решения, то TensorFlow Probability
(TFP) также поддерживает работу с HMM и GMM. Эта библиотека предоставляет более гибкие механизмы для настройки и оптимизации моделей:
import tensorflow_probability as tfp
# Создание модели Гауссовой смеси
gmm = tfp.distributions.MixtureSameFamily(
mixture_distribution=tfp.distributions.Categorical(probs=[0.5, 0.5]),
components_distribution=tfp.distributions.MultivariateNormalDiag(
loc=[0., 0.],
scale_diag=[1., 1.]
)
)
# Обучение модели с использованием HMM
hmm = tfp.distributions.HiddenMarkovModel(
initial_distribution=tfp.distributions.Categorical(probs=[0.6, 0.4]),
transition_distribution=tfp.distributions.Categorical(probs=[[0.7, 0.3], [0.4, 0.6]]),
observation_distribution=gmm
)
TFP предлагает мощные инструменты для работы с вероятностными моделями и может быть полезным в случаях, когда нужны специфические адаптации.
Заключение
Для вашего сценария наилучшим выбором будет библиотека hmmlearn
, учитывая ее поддержку непрерывных данных и простоту использования. Библиотека pomegranate
также предоставляет хорошие возможности, но требует меньшего времени на изучение. Наконец, TensorFlow Probability
подходит, если вы хотите интегрировать HMM-GMM в более сложные нейросетевые архитектуры.
Рекомендуется протестировать каждый из вариантов на вашем наборе данных, чтобы определить, как они справляются с вашей конкретной задачей. Если возникнут проблемы с установкой библиотек или выполнение кода, не стесняйтесь обращаться за помощью на форумах, таких как Stack Overflow или соответствующие GitHub репозитории.