如何在字段感知分解机器中使用散列技巧

数据挖掘 scikit-学习 推荐系统 场感知因式分解机 散列技巧
2021-10-11 16:03:33

现场感知分解机(FFM) 已被证明在点击率预测任务中很有用。它们的优势之一来自散列技巧(特征散列)。

当使用来自 sci-kit-learn 的散列技巧时,最终会得到一个稀疏矩阵。

那么如何使用这样一个稀疏矩阵来实现场感知分解机器呢?SKLearn 没有 FFM 的实现。

编辑 1:我想确定执行特征散列/散列技巧,以便能够将 FFM 扩展到数百万个特征。

编辑 2:Pandas 无法扩展到许多领域。我还想将任意 CSV(包含数字和分类特征)转换为 LIBFFM(字段:索引:值)格式并同时执行散列技巧(最好不使用 Pandas)。Pandas2FFM 即使在执行散列技巧之后也无法扩展。

2个回答

一种选择是使用xLearn,这是一个适用于 FFM 的 scikit-learn 兼容包,它会自动处理该问题。

如果您需要特征哈希,您可以编写自定义特征哈希函数

import hashlib

def hash_str(string: str, n_bins: int) -> int:
    return int(hashlib.md5(string.encode('utf8')).hexdigest(), 16) % (n_bins-1) + 1

我通常不使用 sklearn 进行编码,而是使用“类别编码器包”:

您是否考虑使用他们的哈希编码器?:

这个编码器的优点是它不维护观察类别的字典。因此,编码器的大小不会增长,并且在设计数据评分期间接受新值。

输出是 int64 特征。类别编码器 API 易于使用,可以在转换器中实现