Я пытаюсь найти разреженную основу, которую я могу использовать для представления сигнала ЭКГ. Я больше всего заинтересован в том, чтобы научиться находить основу для разреженного представления данных через словарное обучение.
При использовании основы 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, однако это совсем не позволяет мне реконструировать.
Какие-либо предложения или неправильные представления, которые могут помочь мне добиться успеха?