Пусть есть набор спектров, заданных в виде набора точек. Количество точек и расстояние между ними могут быть различны для каждого спектра.
Нужно закодировать каждый спектр в виде последовательностей (чисел) одинакового размера и выделить в них наиболее существенные признаки.
Два варианта действия:
Первый: сначала привести данные к одному размеру, потом извлекать признаки. 1. Разделить интервал частот на фиксированное количество отрезков (разной длины для разных спектров) и для каждого отрезка взять наибольшую точку, которая в нем оказалась (если в отрезок попало несколько точек - ту, для которой интенсивность максимальна). 2. После этого, имея набор векторов одинаковой длины, применить для них анализ главных компонент.
Второй: сначала извлечь признаки, потом привести данные к одному размеру. 1. Аппроксимировать спектр набором гауссовых кривых. Получить набор параметров (по два параметра для каждой кривой). 2. Т.к. пиков может быть разное количество для разных спектров, то вопрос, как закодировать набор гауссовых кривых в виде последовательностей одинаковой длины, не ясен совершенно.
Первый вариант плох тем, что при переразбиении получаем искажения, а второй этап будет неприемлемо долгим, т.к. для большого набора спектров пакетные методы главных компонент не подходят. Зато ясно, что и как делать.
Второй этап сулит быстрое извлечение существенных признаков, но не ясно, как приводить после этого данные к одинаковой длине.
Может быть, у кого-нибудь есть идеи касательно последнего вопроса?
Кстати, есть ли какие-нибудь неитеративные алгоритмы апроксимации набора точек гауссовыми кривыми? То есть, итеративных методов много, но они долгие. Например, считать производную в окрестности центра каждого пика и из нее находить параметр функции...
|