Изучение основы для сжатого восприятия с помощью словарного обучения - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь найти разреженную основу, которую я могу использовать для представления сигнала ЭКГ. Я больше всего заинтересован в том, чтобы научиться находить основу для разреженного представления данных через словарное обучение.

При использовании основы DCT-II я могу реконструировать следующим образом:

import math
from sklearn.decomposition import MiniBatchDictionaryLearning
import numpy as np
import matplotlib.pyplot as plt
import os 
from scipy.fftpack import dct, idct
from sklearn.linear_model import Lasso
from sklearn.linear_model import OrthogonalMatchingPursuit
omp = OrthogonalMatchingPursuit(80)

N = 256
M = 200

sensing_matrix = np.random.randn(M,N)

y = sensing_matrix.dot(test_signal)

#DCT basis
basis = dct(np.eye(N))

#Reconstruct
omp.fit(sensing_matrix.dot(basis), y)

cs_reconstruction = basis.dot(omp.coef_)

Это обеспечивает очень разумные результаты. Поэтому сейчас я хочу использовать оптимизированную базу. Так как мое понимание словарного обучения заключается в итеративной оптимизации словаря, для минимизации нормы l_0 (l_1 на практике) выходных данных. Учитывая, что база, которую я требую, составляет 256x256, и что я не слишком переполняю базу, я решил, что могу сделать что-то вроде этого:

dico = MiniBatchDictionaryLearning(n_components=256, alpha=0.1,transform_algorithm='omp',transform_n_nonzero_coefs=60, n_iter=50,dict_init=dct(np.eye(N)))
dico.fit_transform(signal[:(len(signal)//256)*256].reshape(-1,256))
basis = dico.components_

Тогда я бы использовал базу точно так, как показано в DCT -II, однако это совсем не позволяет мне реконструировать.

Какие-либо предложения или неправильные представления, которые могут помочь мне добиться успеха?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...