5

我正在训练一个有10个左右分类输入的神经网络。在对这些分类输入进行一次热编码后,我最终会向网络中输入大约500个输入。是否有可应用于分类数据输入的特征选择算法?

我希望能够确定每个分类输入的重要性。 Scikit-learn有numerous feature importance algorithms,但是这些可以应用于分类数据输入吗?所有的例子都使用数字输入。

我可以将这些方法应用于单热编码输入,但是如何在应用于二值化输入后提取含义?如何判断对分类投入的特征重要性?

+0

我已经成功地使用['mutual_info_score'](http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.mutual_info_classif.html#sklearn.feature_selection.mutual_info_classif)它支持'discrete_features = True '。 –

+0

查看http://scikit-learn.org/stable/modules/preprocessing.html#encoding-categorical-features –

+0

小心使用单热编码,因为[增加了维度](https:// en .wikipedia.org/wiki/Curse_of_dimensionality)的50倍。您也可以考虑使用随机森林而不是神经网络,因为随机森林方法具有内置的特征重要性表征。 –

回答

1

由于编码特征之间的关系,在一个热编码上使用特征选择算法可能会错过领先地位。例如,如果您将n个值的特征编码为n个特征,并且您选择了m个n-1,则不需要最后一个特征。

由于您的功能数量非常少(约10),功能选择对您无能为力,因为您可能在不丢失太多信息的情况下仅减少其中的几个功能。

您写道,一个热门编码将10个特征转换为500个,这意味着每个特征都有大约50个值。在这种情况下,您可能更关心离散算法,操纵数值本身。如果这些值存在隐含顺序,则可以使用连续的算法features。另一种选择是简单地省略罕见的价值观或价值观,而没有与概念强有力的关联。

如果您使用特征选择,大多数算法将对分类数据起作用,但您应该小心角落案例。例如,@Igor Raush建议的互信息是一个很好的衡量标准。然而,具有许多值的特征倾向于具有比具有较小值的特征更高的熵。这反过来可能导致更高的相互信息和对许多价值特征的偏见。解决这个问题的一种方法是通过将互信息除以特征熵来归一化。

另一组功能选择算法可能会帮助您的是wrappers。实际上,他们将学习委派给分类算法,因此只要分类算法能够应对,他们对表示无动于衷。