def aroBW(self,iter,func,pA,pB,ppi): inst = hmm() alpha=func(*[self.O, pA, pB, ppi]) landa=[pA,pB,ppi,[]] probs=np.zeros((iter,1)) P=alpha[-1] probs[0]=[alpha[-1]] for i in range(1,iter): landa=inst.baum_welch(self.O, landa[0], landa[1], landa[2],5) if (landa[-1].mean()<=P+1e-20): landa=self.aro(100,func,landa[0], landa[1], landa[2]) P=landa[-1].mean() probs[i]=landa[-1].max() if (probs[i]>=1): print(str(i)+ "inja boodeh "+ str(probs[i])) return [landa[0], landa[1], landa[2],probs] return [landa[0], landa[1], landa[2],probs]
def training_single(file_path, file_names): """ training hmm models for all 6 gestures respectively, each using one observation sequence :param file_path: path :param file_names: list of 6 files, one for each gesture :return: models, a dictionary containing 6 hmm models """ models = {} for i, gesture in enumerate(gesture_names): print("\nTraining model for gesture \"{}\"...".format(gesture)) label = parse_label(gesture) model = hmm(N[i], M) # initialize model for file_name in file_names: if parse_label(file_name) == label: data = np.load(file_path+file_name) _ = model.baum_welch(data['Z']) models[gesture] = model break return models
def training_multi(file_path, file_names): """ training hmm models for all 6 gestures respectively, each using multiple observation sequence :param file_path: path :param file_names: list of 6 files, one for each gesture :return: models, a dictionary containing 6 hmm models """ models = {} for i, gesture in enumerate(gesture_names): print("Training model for gesture \"{}\"...".format(gesture)) label = parse_label(gesture) file_names_of_gesture = [name for name in file_names if name.startswith(gesture)] obs_seq_set = [] model = hmm(N[i], M, use_scaling=True) for file_name in file_names_of_gesture: # if file_name in train_name_bank: data = np.load(file_path + file_name) obs_seq_set.append(data['Z']) model.baum_welch_multi(obs_seq_set) models[gesture] = model return models
import gc gc.collect() import numpy as np import matplotlib.pyplot as plt from HMM import HMM as hmm #test sequence test_sequence = [ 0, 1, 2, 1, 0, 3, 4, 4, 1, 3, 5, 5, 6, 2, 7, 8, 1, 0, 4, 7, 4, 4, 9, 5, 3, 2, 7, 10, 0, 0, 9, 6, 8, 6 ] O = np.asarray(test_sequence).reshape(len(test_sequence), 1) inst = hmm(6, 11) A, B, pi = inst.initializer() iter = 500 landa_BW = inst.baum_welch(O, A, B, pi, iter) landa_ARO = inst.aro(O, A, B, pi, iter) landa_AROBW = inst.aroBW(O, A, B, pi, iter) # multiple line plot plt.plot(range(iter), landa_BW[-1], marker='', markerfacecolor='blue', markersize=3,
qlg_train_pred, post_train_pred = [], [] qlg_train_actual, post_train_actual = [], [] qlg_test_pred, post_test_pred = [], [] qlg_test_actual, post_test_actual = [], [] numkc = 10 # change number of kc for different data set for train_index, test_index in kf.split(qlg_y): qlg_y_train, qlg_y_test = qlg_y[train_index], qlg_y[test_index] post_y_train, post_y_test = post_y[train_index], post_y[test_index] # symbols here refers to four differnt observations: # fast-correct, fast-incorrect, slow-correct, slow-incorrect symbols = [['0', '1', '2', '3']] h = hmm(2, Pi=np.array([0.8, 0.2]), T=np.array([[0.8, 0.2], [0.1, 0.9]]), obs_symbols=symbols) # change parameters here F= T= nlg_train = [[] for x in range(numkc)] nlg_test = [[] for x in range(numkc)] for i in range(numkc): X = np.load(folder + "new_bkt_pertime_kc" + str(i) + ".npy") X_train, X_test = X[train_index], X[test_index] train = [each for each in X_train if each] test = [each for each in X_test if each] if train and test: h.baum_welch(train, debug=False) # training part nlg_train[i].extend(h.predict_nlg(X_train))
matrizIntermediate_train = matrizIntermediate[train_index] matrizIntermediate_test = matrizIntermediate[test_index] # Simbolos: 1 incorrecto, 2 correcto symbols = [['1', '2']] #Objeto HMM pasando como parámetro: # Probabilidad Inicial PI --> P(L0) 1-P(L0) # Calculada en base al número de aciertos de los puzzles de tutorial # Probabilidad de cambiar de un estado a otro T --> A # Probabilidad de Emission E --> B # Símbolos anteriores h = hmm(2, Pi=np.array([0.48, 0.52]), T=np.array([[1, 0], [0.4, 0.6]]), E=[np.array([[0.95, 0.05], [0.05, 0.95]])], obs_symbols=symbols) #h = hmm(2, Pi=np.array([0.8, 0.2]), T=np.array([[1, 0], [0.4, 0.6]]), obs_symbols=symbols) #Inicialización a vacío conjunto_train = [[] for x in range(numkc)] conjunto_test = [[] for x in range(numkc)] #Iteración para cada kc, en este caso 1 ya que no se ha hecho diferenciación de puzzles for i in range(numkc): #Matriz con lista de respuestas por alumno datosPuzzles = np.load(folder + "IntermediatePuzzlesResults.npy", allow_pickle=True) print(datosPuzzles)