Hashing Trick


本博客已經遷往http://www.kemaswill.com/, 博客園這邊也會繼續更新, 歡迎關注~

在機器學習領域, kernel trick是一種非常有效的比較兩個樣本(對象)的方法. 給定兩個對象$x_i, x_j \in \mathcal{X}$, 用$k(x_i, x_j) :=\left <\phi(x_i), \phi(x_j)\right>$來比較兩個對象的特征$\phi(x_i), \phi(x_j)$. kernel trick通過定義一個半正定核矩陣$k$, 可以在不得到$\phi(x_i)$的情況下隱式的得到高維向量$\phi(x_i)$和$\phi(x_j)$的內積, 大大減少計算時間. 但是Weinberger[1]等人提出, 在實際中, 尤其是文本分類領域, 原始的輸入空間幾乎是線性可分的, 但是, 訓練集太大, 特征維度太高. 在這種情況下, 沒必要把輸入向量映射到一個高維的特征空間. 相反的, 有限的內存可能存不下核矩陣. 為此, Langford[2], Qinfeng Shi[3]等人提出了hashing trick, 把高維的輸入向量哈希到一個低維的特征空間$\mathbb{R}^m$.

1. Hashing Trick

最簡單的hashing trick是將原始的每個特征名(或者特征索引)hash到一個低維向量的索引上, 然后將該特征的值累加到該低維向量的索引上:

$\bar{\phi}_j(x) = \sum_{i\in \mathcal{J}; h(i) = j}\phi_i(x)$

其中$\phi(x) \in \mathbb{R}^{\mathcal{J}}$為原始的輸入向量, $h: \mathcal{J} \to {1,..,n}$為哈希函數. 算法偽代碼為:

 function hashing_vectorizer(features : array of string, N : integer): x := new vector[N] for f in features: h := hash(f)     # f 是特征名, 也可以是特征的索引
         x[h mod N] += 1  # 此處累加的是1, 也可以是特征的值
     return x

 

2. Signed Hash Trick

Weinberger等人提出了一個新的變種, 可以稱作signed hash trick.  做法是累加的值不再是固定的1或者特征值, 而是由另外一個哈希函數確定: $\xi : \mathbb{N} \to {\pm 1}$, 這樣的好處是可以得到一個無偏的估計.

$\bar{\phi}_j(x) = \sum_{i\in \mathcal{J}; h(i) = j}\xi(i)\phi_i(x)$

算法偽代碼為:

 function hashing_vectorizer(features : array of string, N : integer): x := new vector[N] for f in features: h := hash(f) idx := h mod N if ξ(f) == 1: x[idx] += 1  # 此處累加的是1, 也可以是特征值
         else: x[idx] -= 1  # 此處累加的是-1, 也可以是特征值 * -1
     return x

 

3. Multiple Hashing

為了防止哈希沖突(亦即不同的特征被哈希到了相同的索引上)帶來的負面影響, 可以對那些特征值比較大的特征哈希多次, 如果哈希$c$次, 則每個索引需要累加的值為$\frac{1}{\sqrt{c}}\phi_i(x)$[1].

 

參考文獻:

[1]. Feature Hashing for Large Scale Multitask Learning. K. Weinberger, A. Dasgupta, J. Attenberg, J. Longford, A.Smola. ICML, 2010.

[2]. Vow- pal wabbit online learning project (Technical Report). http://hunch.net/?p=309. Langford, J., Li, L., & Strehl, A. (2007).

[3]. Hash kernels. AISTATS 12. Shi, Q., Petterson, J., Dror, G., Langford, J., Smola, A., Strehl, A., & Vishwanathan, V. (2009).

[4]. Wikipedia: Feature Hashing

[5]. Mahout in Action, page 261. Section 14.3.1 Representing data as a vector: Feature Hashing.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM