实现Scikit Learn的FeatureHasher处理高基数数据

背景: 我正在进行健康保险索赔的二元分类工作。我处理的数据大约有100万行,包括数值特征和类别特征(所有类别特征都是名义离散的)。我面临的问题是我的几个类别特征具有高基数,包含许多非常罕见或独特的值。我已经绘制了以下8个类别特征,这些特征具有最高的唯一因子级别计数:enter image description here

虚拟变量的替代方案: 我一直在阅读关于特征哈希的内容,并了解到这种方法是一种快速且空间高效的特征向量化方法,特别适合处理高基数的类别数据。我计划使用Scikit Learn的FeatureHasher对超过100个唯一特征级别的类别特征进行特征哈希(对于少于100个唯一特征级别的剩余类别特征,我将创建虚拟变量)。在我实施之前,我有一些关于特征哈希的问题,以及它如何影响机器学习中的模型性能:

  1. 与仅对最常出现的因子级别进行虚拟化相比,使用特征哈希的主要优势是什么?我假设特征哈希方法的信息损失较少,但需要更多关于哈希在处理高基数时为机器学习算法提供的优势的澄清。

  2. 我对在评估几个独立的分类模型后评估特征重要性感兴趣。有没有办法在与原始类别级别相关联的背景下评估哈希特征?有没有办法逆转哈希,还是特征哈希不可避免地导致模型可解释性的损失?

抱歉发了这么长的帖子和问题。任何反馈/建议将不胜感激!


回答:

  1. 特征哈希可以在推理过程中支持训练时未见过的新类别。使用虚拟编码时,只能编码一组固定的先前见过的类别。如果遇到训练中未见过的类别,那就无能为力了。

  2. 对于特征重要性,有两种经典方法。

    a) 带和不带每个特征训练/评估你的模型,以查看其效果。这可能在计算上是昂贵的。

    b) 带有该特征以及该特征在所有样本中被打乱的训练/评估你的模型。

    对于特征哈希,每个特征扩展到多个列,因此b) 将会很棘手,我还没有找到任何包可以对特征哈希列进行置换重要性分析。

    因此,我认为考虑到你只有100万行,a) 可能是你最好的选择。

另外,你可能会在Cross Validated上获得更好的答案,对于stackoverflow上的机器学习问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注