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,对比查询结果):
lsh近邻搜索

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值