特征哈希(Feature Hashing)

特征哈希是一种降维技术,常用于大规模数据集的特征处理。它通过使用hash函数将特征映射到固定维度的空间,解决了基于词表特征向量化方法中的空间复杂度和扩展性问题。虽然存在哈希冲突可能导致的信息丢失,但实验证明其对模型性能的影响很小。特征哈希可以用于在线学习和并行训练,同时在处理新特征和高维数据时表现出良好的效果。
摘要由CSDN通过智能技术生成

基于词表的特征向量化

分类问题中,一种常见的方法是构造一个特征词典,如文本分类,会给每个词(可能还有ngram,词性等)设置一个feature_id(向量化(vectorize)),并记录在一个词典({feature: feature_id})里,从而抽取特征权重的过程通常是这样的:text => feature => feature_id => feature_value
其中第二步的空间复杂度是 O ( d ) \mathcal{O}(d) O(d) d d d是词典的大小,会有这样的问题:

  • 训练时需要把词典提前准备好,包括确定维数 d d d和特征的顺序(id),这样就要求需要提前做一次遍历
    • 扩展性差:当引入新数据时,如果存在新特征,需要重新设定特征维度和词表,无法做到online learning,也不利于并行训练时的同步
    • 对于邮件过滤这类问题,攻击者可以采用新词(如:异体字,火星文),这些对于模型来说就是unknown特征,而模型可能不会激进地标为垃圾邮件
  • 当特征维度非常大时,词表也变得很大,导致查找速度显著下降,甚至加载不进内存

特征哈希

考虑到以上的问题,以下paper中介绍了一种方法,叫做特征哈希(Feature Hashing/Hashing trick)
Feature Hashing for Large Scale Multitask Learning

具体方法如下:

def feature_hashing(features, m):
	"""
	Args:
		features: 输入特征序列,可以是数字,字符串(本质还是数字)
		m: 输出的特征维度,通常是2**26(vw),2**20(scikit-learn)
	Returns:
		m维的(稀疏)向量
	"""
	# 这里的x一般是稀疏表示的(如:scipy.sparse.csr_matrix),这里是为了方便说明
    x = np.zeros(m)
    for feature in features:
        idx = hash_func_1(feature) % m
        sign = hash_func_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值