Поиск сходства между временными рядами в Matlab. Возможный ? Я не могу найти реализацию R-дерева в Matlab

Я хотел бы реализовать поиск сходства в Matlab. Я хочу знать, возможно ли это?

Мой план состоит в том, чтобы использовать 2 популярных измерения сходства: евклидово расстояние и динамическое искажение времени. Оба они будут применяться к набору данных временных рядов. На данный момент мой вопрос заключается в том, как я могу оценить производительность и точность этих двух измерений? Я видел некоторую литературу, в которой говорилось, что я должен использовать алгоритм K-NN.

Затем я планирую применить уменьшение размерности к набору данных временных рядов. После уменьшил размерность набора данных. Мне нужно будет проиндексировать набор данных с помощью R-дерева или любых доступных методов индексирования.

Однако моя проблема в том, что для этого мне нужен код Matlab R-tree, который я едва ли могу найти в Интернете...

Я понял, что большая часть реализации поиска по сходству находится на C ++, C и Java ... Но я с ними не знаком. Я надеюсь, что смогу реализовать это в Matlab... Любой гуру может помочь мне с этим?

Также какую оценку я могу сделать, чтобы оценить производительность для каждого алгоритма.

Спасибо


person Jaz    schedule 24.07.2010    source источник


Ответы (2)


Недавно (кажется, R2010a) MATLAB добавил новые функции для k-Nearest Neighbor (kNN) поиск с использованием KD-tree (метод пространственного индексирования, аналогичный R-дереву) в панель инструментов статистики. Пример:

load fisheriris                            % Iris dataset
Q = [6 3 4 1 ; 5 4 3 2];                   % query points

% build kd-tree
knnObj = createns(meas, 'NSMethod','kdtree', 'Distance','euclidean');

% find k=5 Nearest Neighbors to Q
[idx Dist] = knnsearch(knnObj, Q, 'K',5);

Обратитесь к этой странице за подробным описанием.

Также, если у вас есть Image Processing Toolbox, он содержит (уже давно) реализацию поиска kd-tree и kNN. Однако они являются частными функциями:

[matlabroot '\images\images\private\kdtree.m']
[matlabroot '\images\images\private\nnsearch.m']

Чтобы сравнить два ваших подхода (Динамическое искажение времени и Евклидово расстояние), вы можете разработать классическую задачу классификации; учитывая набор размеченных временных рядов обучения / тестирования, задача состоит в том, чтобы предсказать метку каждой тестовой последовательности, найдя наиболее похожие, используя kNN, а затем предсказать класс большинства. Для оценки производительности используйте любые стандартные меры классификации, такие как точность/ошибка и т. д.

person Amro    schedule 26.07.2010
comment
Спасибо за ваш информативный ответ. Я в значительной степени новичок в этой области. Поэтому, пожалуйста, потерпите меня. 1) Вы рекомендуете мне использовать Matlab для реализации поиска по сходству или мне следует использовать Java или C++? 2) Обязательно ли индексирование после уменьшения размерности? 3) Можете ли вы помочь мне, подробно объяснив предложенную вами оценку? Результатом моего поиска сходства будет набор временных рядов, похожих на временные ряды запроса. Как мне перейти от этой точки к оценке? Учитывая, что я хочу применить ее к нескольким типам данных, таким как биржевые данные, данные ЭКГ. - person Jaz; 02.08.2010
comment
1) Я рекомендую вам придерживаться того языка, на котором вы чувствуете себя более комфортно. 2) Весь смысл индексации заключается в том, чтобы ускорить поиск, поэтому для большого количества временных рядов нам не придется сравнивать их все, вместо этого мы получаем набор кандидатов с R-деревьями. Следует иметь в виду, что для размерностей больше 20 пространственная индексация ухудшится до линейного поиска. 3) Как я объяснил, вы просто берете метку большинства возвращаемого набора временных рядов-кандидатов и сравниваете ее с фактической меткой; если это соответствует, это правильная классификация, в противном случае ошибка. - person Amro; 02.08.2010
comment
Спасибо, я решил просто сделать простой поиск сходства. Я планирую использовать поиск по диапазону, где любое расстояние, вычисленное в пределах ошибки, будет считаться аналогичным. Проблема в том, как определить это значение e? Любой код, который объясняет поиск по диапазону/последовательный поиск? - person Jaz; 17.08.2010

Оказывается, как для ED, так и для DTW НАМНОГО быстрее выполнить последовательное сканирование с использованием пакета UCR.

Посмотрите это видео https://www.youtube.com/watch?v=d_qLzMMuVQg.

или это

https://www.youtube.com/watch?v=c7xz9pVr05Q

код бесплатный http://www.cs.ucr.edu/~eamonn/UCRsuite.html

person user2313186    schedule 29.10.2014