model = HiddenMarkovModel.from_samples(NormalDistribution, n_components=n_comp, X=[normal_signal], labels=[labels], algorithm='labeled') # model = HiddenMarkovModel.from_samples(GeneralMixtureModel, n_components = n_comp, X = [normal_signal], # labels = [labels], algorithm='labeled') # fig = plt.figure(num = 1000, figsize=(15,4)) # plt.plot(normal_signal,'b') # plt.plot([x / 3 for x in sequence.path], 'r') # plt.savefig('Graphs/path.png') # plt.close('all') pool = Pool(N_pool) with open('model.txt', 'w') as file: out = print_model_distribution(model) file.write(out) params = [ (model, normal_signal, N_train, N, alpha, norm_params, mean, variance, an_params, anomal_mean, anomal_variance, n_comp, i + 1) for i in range(count_launch) ] start_time = time.time() res = pool.starmap(f, params) # print(res) pool.close() pool.join() print('Time ', time.time() - start_time)
def run(arg, k): np.random.seed(k) exp_type = arg['type'] N = arg['N'] alpha = arg['alpha'] n_comp = arg['n_comp'] norm_params = arg['norm_params'] an_params = arg['an_params'] save_dir = arg['dir'] mean = arg['mean'] variance = arg['varience'] anomal_mean = arg['anomal_mean'] anomal_variance = arg['anomal_varience'] norm_gen = generator.Sequence(N, alpha, type=exp_type, params=norm_params, mean=mean, variance=variance) norm_signal = norm_gen.sequence an_gen = generator.Sequence(N, alpha, type=exp_type, params=an_params, mean=anomal_mean, variance=anomal_variance) an_signal = an_gen.sequence # an_signal[180:200] = np.random.normal(2,0.02,20) an_labels = list(map(myutils.rename_state, an_gen.path)) labels = list(map(myutils.rename_state, norm_gen.path)) if exp_type == 'continue': model = HiddenMarkovModel.from_samples(NormalDistribution, n_components=n_comp, X=[norm_signal], labels=[labels], algorithm='labeled') an_model = HiddenMarkovModel.from_samples(NormalDistribution, n_components=n_comp, X=[an_signal], labels=[an_labels], algorithm='labeled') else: model = HiddenMarkovModel.from_samples(DiscreteDistribution, n_components=n_comp, X=[norm_signal], labels=[labels], algorithm='labeled') an_model = HiddenMarkovModel.from_samples(DiscreteDistribution, n_components=n_comp, X=[an_signal]) # model = HiddenMarkovModel.from_samples(DiscreteDistribution, n_components = n_comp, X = [norm_signal]) # an_model = HiddenMarkovModel.from_samples(DiscreteDistribution, n_components = n_comp, X = [an_signal]) l1 = model.log_probability(norm_signal) l2 = model.log_probability(an_signal) cdir = os.getcwd() path = cdir + '/' + arg['dir'] try: os.mkdir(path) except: pass with open(path + '/log_' + str(k) + '.txt', 'w') as file: out = myutils.print_model_distribution(model) file.write(out) out = myutils.print_model_distribution(an_model) file.write(out) file.write('l_normal = {} l_anomal = {}'.format(l1, l2)) # out = myutils.print_model_distribution(model_2) # file.write(out) # file.write(str(an_model.to_json())) # fig_sub = plt.figure(figsize = (18,5.9)) fig_sub = plt.figure(figsize=(16, 5.9)) ax2 = fig_sub.add_axes([0.12, 0.1, 0.07, 0.8]) ax2.plot([1] * len([l1]), l1, 'b.', markersize=12) ax2.plot([1] * len([l2]), l2, 'r.', markersize=12) # ax2.plot([1], normal_score, 'g*', markersize=12) ax2.set_ylabel('log probability') # ax2.set_xlim(0.9, 1.2) ax2.set_xticks([0.95, 1, 1.05]) ax2.set_xticklabels(['', '', '']) ax = fig_sub.add_axes([0.24, 0.1, 0.74, 0.8]) ax.plot(norm_signal, 'b', label='Normal') #Ошибка в цветах ax.plot(an_signal, 'r', label='Abnormal') ax.set_xlabel('Time', ) # ax.grid() plt.legend(loc=1) plt.tight_layout() plt.savefig(path + '/plot' + str(k) + '.png', dpi=180) plt.close() # ax.set_y print(' {}, {}'.format(l1, l2)) print('На аномальной') l1 = an_model.log_probability(norm_signal) l2 = an_model.log_probability(an_signal) print(' {}, {}'.format(l1, l2)) print(' Норма\n {}'.format(model.predict_proba(an_signal)))
from pomegranate import * import sequence_generator as generator import matplotlib.pyplot as plt import numpy as np import myutils test = generator.Sequence(10000, ['a', 'b'], type='continue', params={ 'a': { 'len': [1000, 1010], 'depend_on': False }, 'b': { 'len': [25, 35], 'depend_on': False } }, mean=[0, 0.2], variance=[0.03, 0.05]) fig = plt.figure(figsize=(20, 4)) plt.plot(test.sequence) # plt.plot(test.path) model = HiddenMarkovModel.from_samples( NormalDistribution, 2, [test.sequence], labels=[list(map(lambda x: myutils.rename_state(x), test.path))], algorithm='labeled') myutils.print_model_distribution(model)