一 哈希的原理
字典: 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
# 可見處理後的結果與輸入的稀疏矩陣一一對應
處理的結果是,將數據表示在座標(以行和列索引的元素表示)的單元格值中。