2010-07-24 7 views
3

Je voudrais implémenter la recherche de similarité dans matlab. Je veux savoir si c'est possible?Recherche de similitude entre les séries temporelles de Matlab. Possible? Je ne peux pas trouver l'implémentation de R-tree dans matlab

Mon plan consiste à utiliser 2 mesures de similarité populaires qui sont la distance euclidienne et le déformation temporelle dynamique. Ces deux éléments seront appliqués à l'ensemble de données de séries temporelles. Ma question à ce stade est comment puis-je évaluer ces deux performances de mesure et la précision? J'ai vu une littérature disant que je devrais utiliser l'algorithme K-NN. Ensuite, je prévois d'appliquer une réduction de la dimensionnalité à l'ensemble de données de la série chronologique. Après avoir réduit la dimensionnalité de l'ensemble de données. Je devrai indexer l'ensemble de données en utilisant R-tree ou toute technique d'indexation disponible.

Cependant, mon problème est que pour ce faire, je besoin d'un code Matlab R-arbre que je peine à trouver dans Internet ...

Je réalisé que la plupart de la mise en œuvre de la recherche de similarité sont en C++, C et Java ... Mais je ne suis pas familier avec ceux-ci. J'espčre pouvoir les implémenter dans Matlab ... N'importe quel Guru pourrait m'aider avec ça?

De même, quel type d'évaluation puis-je faire pour évaluer la performance de chaque algorithme.

Merci

Répondre

3

Récemment (R2010a je crois), Matlab a ajouté de nouvelles fonctions pour k-Nearest Neighbor (kNN) recherche à l'aide KD-tree (une méthode similaire à spatial indexing R-tree) à la boîte à outils statistiques. Exemple:

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); 

Référez-vous à this page pour une description agréable.

De plus, si vous avez Image Processing Toolbox, il contient (depuis longtemps déjà) une implémentation de la recherche kd-tree et kNN. Ce sont des fonctions privées que:

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

Pour comparer vos deux approches (Dynamic Time Warping et Euclidean distance), vous pouvez concevoir un problème classique de classification; étant donné un ensemble de séries chronologiques de formation/tests étiquetés, la tâche consiste à prédire l'étiquette de chaque séquence de test en en trouvant les plus similaires en utilisant kNN puis à prédire la classe majoritaire. Pour évaluer les performances, utilisez l'une des mesures standard de classification comme précision/erreur, etc.

+0

Merci pour votre information answer.I suis à peu près un nouveau venu dans ce field.Thus s'il vous plaît ours avec moi. 1) Me recommandez-vous en utilisant matlab pour l'implémentation de la recherche de similarité ou devrais-je l'implémenter en utilisant java ou C++? 2) L'indexation est-elle obligatoire après réduction de la dimension? 3) Pouvez-vous m'aider en expliquant en détail l'évaluation que vous avez proposée?Le résultat de ma recherche de similarité sera un ensemble de séries chronologiques similaire à la série temporelle de la requête. Comment puis-je passer de ce point pour l'évaluation? Considérant que je veux l'appliquer sur quelques types de données telles que les données de stock, les données ECG. – Jaz

+0

1) Je vous recommande de rester dans la langue dans laquelle vous vous sentez le plus à l'aise. 2) Le but de l'indexation est d'accélérer la recherche, donc pour un grand nombre de séries chronologiques, nous n'aurons pas à comparer , à la place, nous obtenons un ensemble de candidats avec des arbres R. Une chose à garder à l'esprit est que pour les dimensions supérieures à 20, l'indexation spatiale se dégrade en une recherche linéaire. 3) Comme je l'ai expliqué, vous prenez simplement l'étiquette majoritaire de l'ensemble candidat de séries temporelles retournées, et vous le comparez à l'étiquette réelle; si cela correspond à une classification correcte, sinon une erreur. – Amro

+0

Merci, J'ai décidé de faire une simple recherche de similarité. J'ai l'intention d'utiliser la recherche de gamme où toute distance calculée dans l'erreur liée, e sera considérée comme similaire. Le problème est comment puis-je déterminer cette valeur de e? Tout code qui explique la recherche de plage/la recherche séquentielle? – Jaz

Questions connexes