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.
Hashing Trick的更多相关文章
- PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...
- GBDT原理及利用GBDT构造新的特征-Python实现
1. 背景 1.1 Gradient Boosting Gradient Boosting是一种Boosting的方法,它主要的思想是,每一次建立模型是在之前建立模型损失函数的梯度下降方向.损失函数是 ...
- [Localization] MobileNet with SSD
先来一波各版本性能展览: Pre-trained Models Choose the right MobileNet model to fit your latency and size budget ...
- Deep learning with Python 学习笔记(5)
本节讲深度学习用于文本和序列 用于处理序列的两种基本的深度学习算法分别是循环神经网络(recurrent neural network)和一维卷积神经网络(1D convnet) 与其他所有神经网络一 ...
- 2.keras实现-->字符级或单词级的one-hot编码 VS 词嵌入
1. one-hot编码 # 字符集的one-hot编码 import string samples = ['zzh is a pig','he loves himself very much','p ...
- 网络压缩论文整理(network compression)
1. Parameter pruning and sharing 1.1 Quantization and Binarization Compressing deep convolutional ne ...
- 网络压缩论文集(network compression)
Convolutional Neural Networks ImageNet Models Architecture Design Activation Functions Visualization ...
- what difference between libfm and libffm
https://www.kaggle.com/users/25112/steffen-rendle/forum Congratulations to Yu-Chin, Wei-Sheng, Yong ...
- scikit-learn:4.2.3. Text feature extraction
http://scikit-learn.org/stable/modules/feature_extraction.html 4.2节内容太多,因此将文本特征提取单独作为一块. 1.the bag o ...
随机推荐
- 老生常谈JavaScript闭包
闭包就是指一个有权访问另外一个函数作用域中的变量的函数.--<JavaScript高级程序第三版> 本人对于闭包初次的认识就来自<高三>,首先仅仅通过“有权”’两个字我们便可以 ...
- js如何实现继承
js继承有5种实现方式:1.继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = ...
- Java程序员的日常—— 《编程思想》关于类的使用常识
Java虽然利用JVM,让程序员可以放心大胆的使用,可是仍然会出现内存泄露等问题.世上没有绝对的银弹,因此也不能完全把所有的任务都交给JVM,了解Java中的初始化与垃圾回收还是必不可少的知识. 关于 ...
- 成功安装mysql后,为何服务管理器里找不到MYSQL服务名
1.打开cmd,切换到mysql的bin目录下 2. D:\Program Files\MySQL5.1\bin>mysqld.exe -installService successfully ...
- jQuery/javascript实现简单网页计算器
<html> <head> <meta charset="utf-8"> <title>jQuery实现</title> ...
- Leetcode 179 Largest Number 贪心
此题主要是讲给你一组数,如何将数连在一起能得到最大值(最小值反之),注意局部最优,就是说如果 123 234两个连在一起怎么样最大,显然是234123比123234大,对于3个数我们可以找到类似的性质 ...
- js模块方案
在浏览器环境中,模块的各个部分通常都是从网上获取的,有时无法知道js哪个模块会先加载,所以传入的返回函数除了返回函数本身,还可以返回为空对象. 自执行函数的处理方式: var module1 = (f ...
- 对TCP说三道四
夜朦胧,人方静,无聊的人打开了无聊的电脑看到了一张无聊的图,想着想着就睡着了,梦到了人a和人b的一次聊天. 有一天,a有事情想跟b商量就问b"有时间么,想和你聊一下天" ...
- 更改Windows系统的密码之后,SQL Server 2008服务无法启动
问题:更改Windows操作系统的密码之后,SQL Server 2008服务无法启动. 原因:SQL Server服务需要使用操作系统的某个登录账户. 解决:需要在服务的属性窗口中修改账户密码,然后 ...
- no sigar-amd64-winnt.dll in java.library.path 错误
需要维护别人写的一个WEB项目,还原数据库,从SVN中检出源码,运行,提示如下错误: 5526 [localhost-startStop-1] DEBUG Sigar - no sigar-amd6 ...