2013-07-31 32 views
0

我預計輸出稀疏矩陣FeatureHasher中的所有值都是非負的,因爲我認爲它應該只計算術語頻率並藉助哈希函數對術語進行索引。當碰撞發生時,我預計它只會加上'碰撞項'的頻率。然而,看起來我錯了,因爲它實際上輸出了一堆負值,給出了一個字典列表,其中字典的鍵和術語頻率都是值。FeatureHasher的輸出矩陣中的負值是什麼意思?

負值在此意味着什麼?

回答

3

如果輸入值都是正值(詞頻),那麼負值實際上並不意味着什麼。援引scikit-learn docs

由於散列函數可能(無關)的特點,使用簽名的散列函數和散列值的符號之間導致衝突判斷存儲在輸出矩陣的特徵值的符號。這樣,碰撞可能會抵消而不是累積誤差,並且任何輸出特徵值的預期平均值都爲零。

維基百科有一個little table顯示該方案的效果,這是由Weinberger et al.發明的。它不僅減輕了碰撞的影響,而且使你的特徵更像高斯,這有助於一些學習算法。

如果您想擺脫負值,請將non_negative=True傳遞給FeatureHasher構造函數。該選項的實施有點破綻,但它使得tf-idf和樸素貝葉斯再次運作。