[ PROMPT_NODE_26192 ]
similarity_search
[ SKILL_DOCUMENTATION ]
# 相似性搜索
Aeon 提供了用于在时间序列内部及跨序列查找相似模式的工具,包括子序列搜索、基序 (Motif) 发现和近似最近邻搜索。
## 子序列最近邻 (SNN)
在时间序列内查找最相似的子序列。
### MASS 算法
- `MassSNN` - Mueen 相似性搜索算法
- 用于相似性的快速归一化互相关
- 高效计算距离概况
- **适用场景**:需要精确最近邻距离,处理长序列时
### 基于 STOMP 的基序发现
- `StompMotif` - 发现重复模式 (基序)
- 查找前 k 个最相似的子序列对
- 基于矩阵概况计算
- **适用场景**:想要发现重复模式时
### 暴力搜索基准
- `DummySNN` - 穷举距离计算
- 计算所有成对距离
- **适用场景**:短序列,需要精确基准时
## 集合级搜索
在集合中查找相似的时间序列。
### 近似最近邻 (ANN)
- `RandomProjectionIndexANN` - 局部敏感哈希
- 使用带有余弦相似度的随机投影
- 构建索引以进行快速近似搜索
- **适用场景**:大型集合,速度比精确度更重要时
## 快速入门:基序发现
python
from aeon.similarity_search import StompMotif
import numpy as np
# 创建带有重复模式的时间序列
pattern = np.sin(np.linspace(0, 2*np.pi, 50))
y = np.concatenate([
pattern + np.random.normal(0, 0.1, 50),
np.random.normal(0, 1, 100),
pattern + np.random.normal(0, 0.1, 50),
np.random.normal(0, 1, 100)
])
# 查找前 3 个基序
motif_finder = StompMotif(window_size=50, k=3)
motifs = motif_finder.fit_predict(y)
# motifs 包含基序出现的索引
for i, (idx1, idx2) in enumerate(motifs):
print(f"基序 {i+1} 位于位置 {idx1} 和 {idx2}")
## 快速入门:子序列搜索
python
from aeon.similarity_search import MassSNN
import numpy as np
# 要搜索的时间序列
y = np.sin(np.linspace(0, 20, 500))
# 查询子序列
query = np.sin(np.linspace(0, 2, 50))
# 查找最近的子序列
searcher = MassSNN()
distances = searcher.fit_transform(y, query)
# 查找最佳匹配
best_match_idx = np.argmin(distances)
print(f"最佳匹配索引为 {best_match_idx}")
## 快速入门:集合上的近似 NN
python
from aeon.similarity_search import RandomProjectionIndexANN
from aeon.datasets import load_classification
# 加载时间序列