我有一个包含 50000 个观察值的数据框,我想执行分类任务。但我正在为功能选择而苦苦挣扎。我有 89 列,在去掉了一些冗余特性之后,我得到了 58 列。其中一些是分类的,一些是数字的。
任何建议将不胜感激。
我有一个包含 50000 个观察值的数据框,我想执行分类任务。但我正在为功能选择而苦苦挣扎。我有 89 列,在去掉了一些冗余特性之后,我得到了 58 列。其中一些是分类的,一些是数字的。
任何建议将不胜感激。
您可以使用带规则的逻辑回归(Lasso、Ridge、Elastic Net)来了解哪些特征是相关的。监管意味着,“不那么重要”的特征被缩小。在 Rglmnet中是一个很好的起点,它也可用于 Python。
R: https ://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html
蟒蛇: https ://web.stanford.edu/~hastie/glmnet_python/
有关一些背景和示例,请参阅统计学习简介(ISL) 中的第 6.2 节。您可以在网上找到该书的 PDF。http://www-bcf.usc.edu/~gareth/ISL/
Ridge 基于 L2 范数,因此模型系数被缩小,但不能为零。相比之下,Lasso 使用 L1 范数,因此可以将系数缩小到零。
模型选择的另一种方法是向前/向后逐步选择(参见:ISL,第 6.1 章)。
对于前向逐步选择,过程将是:
令 M0 为 NULL 模型,其中不包含预测变量。现在对于 k=0, ..., p-1:
向后逐步选择的工作方式相同,但您从完整模型开始,然后依次省略预测变量/特征。
对于 Python,sklearn 带有一个贪婪的逐步(向后)选择模块:https ://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
另请注意,许多方法/包都带有一个允许评估特征重要性的模块,例如在 catboost ( https://catboost.ai/docs/concepts/fstr.html ) 或 lightgbm ( https://lightgbm.readthedocs ) 中。 io/en/latest/Python-API.html)。然而,这里的一个缺点是,您需要首先实现一个合适的模型(通过一些超参数调整),这很耗时。
在我看来,特征选择纯粹是一个手动过程,尽管一些算法,如 Randomforest、decisiontree,为您提供了训练模型的特征重要性。
否则我们必须识别特征和目标值之间的关联关系。您可以绘制特征和目标值的图表,以分析关联关系。您还可以分析特征和目标之间的协方差。
JFI: PCA also internally sorts the values in decreasing order of co-variance.