是否有可应用于分类数据输入的特征选择算法?
Posted
技术标签:
【中文标题】是否有可应用于分类数据输入的特征选择算法?【英文标题】:Are there feature selection algorithms that can be applied to categorical data inputs? 【发布时间】:2017-07-07 07:45:43 【问题描述】:我正在训练一个有 10 个左右分类输入的神经网络。在对这些分类输入进行一次热编码后,我最终将大约 500 个输入输入到网络中。
我希望能够确定我的每个分类输入的重要性。 Scikit-learn 有numerous feature importance algorithms,但是这些都可以应用于分类数据输入吗?所有示例都使用数字输入。
我可以将这些方法应用于 one-hot 编码输入,但在应用于二值化输入后,我将如何提取含义?如何判断分类输入的特征重要性?
【问题讨论】:
我已经成功使用了支持discrete_features=True
的mutual_info_score
。
看看scikit-learn.org/stable/modules/…
@A555h5 似乎它实际上并不需要是一个 Numpy 数组,您提供的列表作为输入就可以正常工作(尽管您可以使用带有 dtype=np.str
的 Numpy 数组,其中包含字符串和它也可以工作)。
一般来说,对于这样的情况,您会使用索引编码,其中分类特征的每个级别都映射到整数 0、1 等。看看 Scikit 中的LabelEncoder
-在 Pandas 中学习或 categorical series。
在回答您对 Vivek 的问题时,这取决于您要完成的工作。您可以使用重要性度量来修剪整个特征(“特征选择”),或者您可以对它们进行一次性编码并仅修剪某些级别(“值选择”)。两种方式我都见过。
【参考方案1】:
由于编码特征之间的关系,在一种热编码上使用特征选择算法可能会导致错误。例如,如果您将具有 n 个值的特征编码为 n 个特征,并且您选择了 m 个特征中的 n-1 个,则不需要最后一个特征。
由于您的特征数量非常少(约 10 个),特征选择对您没有太大帮助,因为您可能只能减少其中的几个而不会丢失太多信息。
您写道,一个热编码将 10 个特征转换为 500 个,这意味着每个特征大约有 50 个值。在这种情况下,您可能对离散化算法更感兴趣,对值本身进行操作。如果值有隐含顺序,您可以使用连续算法features。另一种选择是简单地省略稀有值或与概念没有强相关性的值。
如果您使用特征选择,大多数算法都适用于分类数据,但您应该注意极端情况。例如,@Igor Raush 建议的互信息是一个很好的衡量标准。然而,具有许多值的特征往往比具有较少值的特征具有更高的熵。这反过来可能导致更高的互信息和对许多价值特征的偏见。解决这个问题的一种方法是通过将互信息除以特征熵来进行归一化。
另一组可能对您有所帮助的特征选择算法是wrappers。他们实际上将学习委托给分类算法,因此只要分类算法能够处理,他们就对表示无动于衷。
【讨论】:
以上是关于是否有可应用于分类数据输入的特征选择算法?的主要内容,如果未能解决你的问题,请参考以下文章