python实现e2lsh高维数据集k近邻搜索——实现流程(一)

  • lsh学习链接:
    LSH(Locality Sensitive Hashing)原理与实现
    对高维数据查询最近邻,推荐使用p-stable LSH;
    minLSH是针对文档查询最近邻得方法;
  • python学习与使用:
    python入门之类
  • 常用函数:
    random.gauss(mu, sigma):均值为mu且标准偏差为sigma的高斯分布
    random.uniform(x, y):将随机生成下一个实数,它在 [x, y] 范围内。
    numpy.inner():返回一维数组的向量内积。对于更高的维度,它返回最后一个轴上的和的乘积。
    字典(Dictionary) update() :函数把字典dict2的键/值对更新到dict里。
  • lsh参数计算学习链接:
    参考论文:2004 Locality-sensitive hashing using stable distributions
    E2LSH的原理与实现
    LSH在欧式空间的应用(1)–碰撞概率分析
    LSH在欧式空间的应用(2)–工作原理
    LSH在欧式空间的应用(3)–参数选择
    以上三个链接是用R语言举例;
    正态分布就是高斯分布;
  • knn搜索
    在使用lsh做近似近邻搜索后,得到近邻索引,通过近邻索引对近邻数据做k近邻检索,得到精确的k个最近邻。
    python做 knn可以调用库函数实现:
from sklearn.neighbors import NearestNeighbors
# 函数功能:对数据集x的前1000个数据做10近邻搜索;
# 搜索范围:数据集x内全体数据;
def knn_search(X):
    # 查询点y:x内前一千个数;
    Y = X[0:1000]
    # 查询范围:x内全体数据;查询11近邻;
    nbs = NearestNeighbors(n_neighbors=11, algorithm='ball_tree').fit(X)
    # distances:最近邻距离;indices:最近邻索引号;
    distances, indices = nbs.kneighbors(Y)
    # knn近邻搜索范围包含自己,返回结果去除自己(即去除查询结果第一列),得到查询点的十近邻;
    return indices[:, 1:]

综上,完成lsh对数据集k近邻查询;
查询结果(对数据集做两遍查询,一次e2lsh,一次knn,对比查询结果):
python实现e2lsh高维数据集k近邻搜索——实现流程(一)_第1张图片

你可能感兴趣的:(python实现e2lsh高维数据集k近邻搜索——实现流程(一))