我想在Matlab中实现相似性搜索。我想知道这是不是可能的?
我的计划是使用两种流行的相似性度量方法:欧几里得距离和动态时间规整。这两种方法都将应用于时间序列数据集。此时我的问题是,我如何评估这两种度量方法的性能和准确性?我看到一些文献说我应该使用K-NN算法。
然后,我计划对时间序列数据集进行降维处理。在降低数据集的维度后,我需要使用R树或任何可用的索引技术对数据集进行索引。
然而,我的难题在于,要做到这一点,我需要R树的Matlab代码,而我在互联网上几乎找不到任何相关代码…
我确实意识到,大多数相似性搜索的实现都是用C++、C和Java编写的…但我不熟悉这些语言。我希望能在Matlab中实现这些…有哪位大师能帮我解决这个问题吗?
另外,我可以进行哪些评估来评估每种算法的性能呢?
谢谢
回答:
最近(我认为是R2010a版本),MATLAB在统计工具箱中添加了新的函数,用于使用KD树(一种类似于R树的空间索引方法)进行k-最近邻(kNN)搜索。例如:
load fisheriris % 鸢尾花数据集Q = [6 3 4 1 ; 5 4 3 2]; % 查询点% 构建kd树knnObj = createns(meas, 'NSMethod','kdtree', 'Distance','euclidean');% 查找Q的k=5个最近邻[idx Dist] = knnsearch(knnObj, Q, 'K',5);
请参考此页面以获取详细描述。
另外,如果你有图像处理工具箱,它包含了(已经很长时间了)kd树和kNN搜索的实现。不过它们是私有函数:
[matlabroot '\images\images\private\kdtree.m'][matlabroot '\images\images\private\nnsearch.m']
为了比较你的两种方法(动态时间规整和欧几里得距离),你可以设计一个经典的分类问题;给定一组标记的训练/测试时间序列,任务是通过使用kNN找到最相似的序列来预测每个测试序列的标签,然后预测多数类别。要评估性能,可以使用分类标准度量,如准确率/错误率等。