python哈希与稀疏矩阵的处理

哈希的原理

 

字典: key  映射到  value

哈希: key  映射到   key的哈希值  映射到   value

 

例如查找《现代汉语字典》       拼音“an”     映射到页码55      映射到   安

 

二 自定义哈希函数

在NLP问题中,假设你想把一个字符串转换为一个数值型向量,可以使用one-hot-encoding也就是哈希函数的方法来产生词袋

input_string = "Python for data science" # 输入字符串

def hashing_trick(input_string):
    result= [0] * len(input_string) #初始化结果序列,长度同输入序列
    for word in input_string.split(" "):
        index = abs(hash(word)) % len(input_string) # 自定义哈希函数
        result[index] = 1
    return result


print(hashing_trick(input_string))

# 输出结果 [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

可见输出的结果向量中的 1 ,代表了输入字符串的四个单词。

结果向量中的1的位置,与单词的哈希值有关。

 

三 对稀疏矩阵的处理

由第二步的输出结果可知 序列 [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ,绝大部分的值为零,

因此称该序列为 稀疏矩阵

 

对稀疏矩阵的处理:

我们可以使用sklearn的csc_matrix方法,即一个基于行的压缩矩阵来进行处理。

a = [1,0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0]
from scipy.sparse import csc_matrix
print(csc_matrix(a))

# 输出结果为
#   (0, 0)	1       表示第零行,第零列 的元素为1。向量a可看作一个一行二十列的矩阵
#   (0, 5)	1
#   (0, 16)	1
#   (0, 18)	1
# 可见处理后的结果与输入的稀疏矩阵一一对应

处理的结果是,将数据表示在座标(以行和列索引的元素表示)的单元格值中。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章