本文将介绍一款高效的工具,帮助用户快速构建机器学习工作流程。这款工具能够有效地执行特征选择,从而优化模型的性能。
特征选择是指在数据集中挑选最有效的特征,它是机器学习流程中的关键步骤。不必要的特征不仅会降低训练速度,还会降低模型的可解释性,最重要的是,它们会损害模型在测试集上的泛化能力。
在处理机器学习任务时,我发现自己反复使用特定的特征选择方法,这让我萌生了编写一个工具的想法。因此,我开发了一个名为 FeatureSelector 的 Python 类,它包含了多种常用的特征选择方法。这些方法包括: - 缺失值比例高的特征 - 高度相关的特征(共线性) - 基于树的模型中不重要的特征 - 低重要性的特征 - 单一唯一值的特征
我们将使用 Kaggle 上的 Home Credit Default Risk 数据集作为示例。该数据集包含许多缺失值、高度相关的特征和一些无关的特征,非常适合用于特征选择。
要使用 FeatureSelector 类,需要传入一个结构化的数据集,其中包括特征和标签。由于这是一个监督分类任务,我们需要同时传入特征和标签。
首先,我们可以通过查找缺失值比例超过某个阈值的特征来进行初步筛选。例如,设置阈值为 60%,可以识别出缺失值超过 60% 的特征。
python
fs.identify_missing(missing_threshold = 0.6)
接着,我们可以查看每个特征的缺失值比例,并绘制缺失值分布图。
共线性特征是指那些彼此高度相关的特征。这类特征会导致模型方差增大,降低模型的可解释性。我们可以通过设定相关系数阈值来识别这些特征。
python
fs.identify_collinear(correlation_threshold = 0.98)
我们还可以绘制热图来直观地展示这些特征之间的相关性。
零重要性特征是指那些在基于树的模型中不被使用的特征。这类特征不会影响模型的决策过程。FeatureSelector 使用 LightGBM 库来查找这些特征。
python
fs.identify_zero_importance(task = 'classification', eval_metric = 'auc', n_iterations = 10, early_stopping = True)
我们还可以通过绘制特征重要性图来查看这些特征的分布情况。
低重要性特征是指那些对模型整体重要性贡献较小的特征。通过设定累积重要性阈值,我们可以进一步筛选这些特征。
python
fs.identify_low_importance(cumulative_importance = 0.99)
单一唯一值的特征对机器学习没有实际意义,因为这些特征的方差为零。我们可以通过简单的函数来识别这些特征。
python
fs.identify_single_unique()
一旦确定了要删除的特征,我们可以通过手动删除或使用内置的 remove
函数来删除这些特征。
python
train_removed = fs.remove(methods = 'all')
FeatureSelector 类提供了一系列强大的特征选择工具,帮助用户快速构建高效的机器学习工作流程。这些方法可以帮助用户在训练模型前剔除不必要的特征,从而提高模型的性能和泛化能力。希望这些工具能对大家有所帮助!
英文原文链接:https://towardsdatascience.com/a-feature-selection-tool-for-machine-learning-in-python-b64dd23710f0