Esempio n. 1
0
    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)
Esempio n. 2
0
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)))
Esempio n. 3
0
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)