Voici mon problème, j'essaie d'enseigner un Hidden Markov Models en utilisant hmmlearn. Je suis nouveau à la langue, et j'ai quelques difficultés à comprendre les différences entre les listes et les tableaux. Voici mon code:Apprendre les séquences de caractères en utilisant hmmlearn en Python
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)
et la sortie résultante
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.
Je l'ai vu à ValueError: setting an array element with a sequence qu'il pourrait être un problème de longueur différente du tableau, mais je ne peux pas comprendre comment le résoudre .
Une suggestion?
Nous vous remercions de votre réponse. En effet, j'ai supposé ici que le HMM dans 'hmmlearn' était capable de générer n'importe quel type de symboles, pas seulement des nombres, mon mauvais. Ne serait-ce pas un problème de générer des nombres ordinaux plutôt que des lettres cardinales? Je vais essayer d'enquêter sur ce problème. Pour répondre à votre question, le but de ce code est d'apprendre les séquences de lettres dans un dictionnaire de noms afin d'obtenir un modèle qui me permettrait de générer des noms aléatoires ayant la même construction intrinsèque que les savants. – Kahsius
Oui, attribuer un numéro à chaque lettre pourrait être une première idée à essayer. 1 -> A; 2-> B, ... et ainsi de suite, en sautant les lettres que vous ne voulez pas voir apparaître. – Eskapp