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
# 可見處理後的結果與輸入的稀疏矩陣一一對應

處理的結果是,將數據表示在座標(以行和列索引的元素表示)的單元格值中。

 

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