局部敏感哈希源代码-python

之前在研究lsh算法,糊里糊涂的,但是该算法的高速性能让我还是得把他搞懂。

借鉴之前阅读的各个大佬博客,从相思能推荐的角度完善了一版代码,花了两天时间才调试出来,看看以后能不能用得上。大家有需求的可以直接使用了,福利满满。嘎嘎嘎

功能:已知一个样本的二进制特征向量,从特征中心中找出特征相似的样本

源代码:

复制代码
import numpy as np

def lsh():
    T = 3  # 表个数
    m = 6   # hash函数个数
    M = np.array([[1,0,1,1,0,1],[1,1,0,1,1,1],[0,0,1,1,1,1],[1,1,1,0,1,1],[0,0,1,0,1,0],[1,1,1,0,0,1],[1,0,1,0,0,1]])
    users_size, items_size = M.shape
    # 建立hash表,维度:shape=(3, 11112, 0) 十进制数   [[] for _ in range(3)]:实现初始化的作用
    hashtables = [[[] for _ in range(int('1' * m) + 1)] for _ in range(T)]
    # print(hashtables)

    # 为每一个hash表构建一个随机矩阵
    random_matrixes = [np.empty((m, items_size)) for _ in range(T)]
    for i in range(T):
        random_matrixes[i] = np.random.uniform(-1, 1, (m, items_size))
    # 每一个用户
    for i, user_vec in enumerate(M):
        # print('当前用户向量:',user_vec)
        # 每一个hash表
        for j in range(T):
            # 每次构建随机矩阵
            v = random_matrixes[j]
            # print('哈希函数矩阵:',v)
            index = ''
            for k in range(m):
                index += '1' if np.dot(user_vec, v[k]) >0 else '0'
            # 存入哈希表
            t_index = int(index, 2)
            hashtables[j][t_index].append(i)
    print(hashtables)


    # 查找相似用户
    target_vec = [1,0,1,0,0,1]
    all_user = [[1,0,1,1,0,1],[1,1,0,1,1,1],[0,0,1,1,1,1],[1,1,1,0,1,1],[0,0,1,0,1,0],[1,1,1,0,0,1],[1,0,1,0,0,1]]
    similar_users = set()
    for i, hashtable in enumerate(hashtables):
        index = ''
        for j in range(m):
            index += '1' if np.dot(target_vec, random_matrixes[i][j]) > 0 else '0'
        target_index = int(index, 2)
        # x = hashtable[target_index]
        # print(x)
        similar_users |= set(hashtable[target_index])

    print('当前向量:',target_vec)
    print('当前向量的相似性向量:')
    for each in similar_users:
        print(each, M[each])
复制代码

 

posted @   今夜无风  阅读(1413)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2019-03-25 文本分类-TensorRT优化结果对比图
2019-03-25 TensorRT优化过程中的dropout问题
点击右上角即可分享
微信分享提示