X_train = (((X_tr[:, None] & (1 << np.arange(8)))) > 0).astype(
        int)  # vector-> binary matrix
    Y_train = np.array(Y_train)
    # X_test = np.array(X_test).reshape(-1,1)
    X_te = np.array(X_test)
    X_test = (((X_te[:, None] & (1 << np.arange(8)))) > 0).astype(int)
    Y_test = np.array(Y_test)
    return [X_train, X_test, Y_train, Y_test]


data = load_dataset()
kf = SequenceKFold(seq_lengths(data[1]), 2)
for tuple in kf:
    train_len = tuple[1]
    test_len = tuple[3]
    split = dataset_split(tuple[0], tuple[2])

    #train the model
    clf = MultinomialHMM()
    clf.fit(split[0], split[2], train_len)

    #evaluate the model
    Y_pred = clf.predict(split[1], test_len)
    print('Accuracy:')
    print(clf.score(split[1], split[3], test_len))
    print('Confusion matrix:')
    labels = list(data[2].values())
    print(confusion_matrix(split[3], Y_pred, labels))
    print('Report:')
    target_names = list(data[2].keys())
    print(classification_report(split[3], Y_pred, target_names=target_names))