У меня есть набор датчиков, которые собирают данные временных рядов, и я хочу выбрать их подмножество для воспроизведения всего набора сигналов. Однако это сильно зависит от того, какие датчики отбираются. Поэтому я хотел оптимизировать подбор датчиков. Я использую технику Graph Signal Processing
Код, который я использую для вычисления ошибки после определения выборки:
def regression_tikhonov_minimized(G, y, mask):
# y = the signal
# G = the graph, of which G.L returns the laplacian matrix
# mask = the list of integers that act as a mask
indl = mask
indu = (mask == False)
Luu = G.L[indu, :][:, indu]
Wul = -G.L[indu, :][:, indl]
if sparse.issparse(G.L):
sol_part = sparse.linalg.spsolve(Luu, Wul.dot(y[indl]))
else:
sol_part = np.linalg.solve(Luu, np.matmul(Wul, y[indl]))
return rmse(y[indu], sol_part)
Поэтому я беру случайную выборку из 10 целых чисел ( в качестве маски) от 0 до 42 (целые числа обозначают позиции индекса сигнала, который выбирается). 42 - это количество датчиков, которые у меня есть.
signal = [signal at specific time point]
n = 42
recordings = []
sets = []
for i in range(0,5000):
ind = random.sample(range(N),10)
if set(ind) in sets:
continue
else:
sets.append(set(ind))
mask = np.zeros(signal.shape, bool)
mask[ind] = True
recordings.append([regression_tikhonov_minimized(adjG, signal, mask), ind])
Затем я мог бы выбрать наиболее эффективный набор датчиков. Но тогда мне нужно проверить каждую комбинацию из 10 целых чисел от 0 до 42 без замены, что невозможно. Есть ли другие методы?
Самое большое, что я сделал, - это создание распределения плотности между следующими результирующими фреймами данных, чтобы увидеть, какая комбинация целых чисел соответствует низким среднеквадратичным значениям. Однако это не так много информации:
rmse nodes
1 1.866433 [1, 6, 39, 20, 36, 3, 23, 40, 33, 26]
2 2.023630 [23, 41, 4, 28, 32, 9, 7, 34, 3, 20]
3 2.051780 [17, 11, 3, 41, 20, 19, 5, 21, 36, 8]
4 2.082243 [20, 3, 2, 6, 10, 4, 41, 8, 17, 15]
5 2.087589 [11, 21, 9, 13, 20, 5, 3, 41, 7, 12]
....
....
Кто-нибудь знает другие подходы? Могу ли я, например, применить какой-нибудь метод оптимизации, чтобы найти лучший набор целых чисел?
Заранее спасибо!