Изучите последовательности символов, используя hmmlearn в Python
Вот моя проблема, я пытаюсь научить скрытых марковских моделей с помощью hmmlearn. Я новичок в языке, и у меня есть некоторые трудности, чтобы понять различия между списками и массивами. Вот мой код:
from hmmlearn import hmm
from babel import lists
import numpy as np
import unidecode as u
from numpy import char
l = []
data = []
gods_egypt = ["Amon","Anat","Anouket","Anubis","Apis","Atoum","Bastet","Bès","Gheb","Hâpy","Harmachis","Hathor","Heh","Héket","Horus","Isis","Ka","Khepri","Khonsou","Khnoum","Maât","Meresger","Mout","Nefertoum","Neith","Nekhbet","Nephtys","Nout","Onouris","Osiris","Ouadjet","Oupaout","Ptah","Rê","Rechef","Renenoutet","Satet","Sebek","Sekhmet","Selkis","Seth","Shou","Sokaris","Tatenen","Tefnout","Thot","Thouéris"]
for i in range(0, len(gods_egypt)):
data.append([])
for j in range(0, len(gods_egypt[i])):
data[i].append([u.unidecode(gods_egypt[i][j].lower())])
l.append(len(data[i]))
data = np.asarray(data).reshape(-1,1)
model = hmm.MultinomialHMM(20, verbose=True)
model = model.fit(data, l)
и полученный результат
Traceback (most recent call last):
File "~~~\HMM_test.py", line 17, in <module>
model = model.fit(data, l)
File "~~~\Python\Python36\site-packages\hmmlearn\base.py", line 420, in fit
X = check_array(X)
File "~~~\Python36-32\lib\site-packages\sklearn\utils\validation.py", line 402, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: setting an array element with a sequence.
Я видел в ValueError: установка элемента массива с последовательностью, что это может быть проблемой другой длины массива, но я не могу понять, как ее решить.
Любое предложение?
1 ответ
Сама ошибка происходит из-за того, что model.fit()
ожидает массив массивов числовых значений. Прямо сейчас ваш вклад data
это массив массивов списков списков строк. Это то, что вызывает ошибку, так как функция обнаруживает, что array element
что он ожидает is a sequence
т.е. список (списков строк).
Однако, даже если вы исправите проблему со списком, возникнет еще одна проблема: изучение HMM предполагает вычисление числовых величин с помощью некоторого набора уравнений. Входные данные для изучения HMM должны быть числовыми, а не набором букв. (Кроме случаев, если hmmlearn
есть особая опция для персонажей, о которых я не знаю.)
Вам нужно сначала преобразовать буквы в цифры, если вы хотите работать с HMM.
Я не знаю, какова ваша конечная цель. HMM предназначены для моделирования данных для генерации или классификации (если обучено несколько HMM). Что вы собираетесь делать, когда у вас есть обученная модель из букв, составляющих слова?
Что касается формата, в котором данные должны предоставляться различным функциям, я предлагаю вам взглянуть на документацию. Он включает в себя учебные пособия по использованию библиотеки.