递归特征消除

2025 年 6 月 25 日 | 阅读 8 分钟

递归特征消除(Recursive Feature Elimination, RFE)是一种著名且有效的特征选择策略,在机器学习中被广泛应用。RFE 的主要目标是在任何预测任务中收集最佳特征,同时去除其他无关特征。该技术通过减少过拟合和提高泛化能力来支持模型的性能。

递归特征消除的重要性

RFE 的重要性体现在以下几个方面:

  • 增强模型性能: 通过消除不必要或重复的特征来提高模型性能。另一方面,它能收集最相关的特征。
  • 增强避免过拟合: 模型通常基于更重要的特征进行训练,使其更具泛化能力,从而避免过拟合。
  • 提高模型可解释性: 拥有更少特征的模型更容易理解或解释,这在医疗保健和金融等实际应用中非常有用。
  • 提高效率: 使用更少特征进行训练更快、更有效,尤其是在处理大型数据集时。

让我们看看递归特征消除如何能够减少具有大量特征的数据,同时仍然生成与原始数据在各种 机器学习模型 上性能相当或更好的特征选择数据。

导入库和数据集

现在我们将导入所需的数据集。

代码

输出

Recursive Feature Elimination

我们需要处理“SeniorCitizen”(老年公民)和“TotalCharges”(总充电费用)的数据类型,使它们可用。

代码

输出

Recursive Feature Elimination

我们需要删除任何包含空数据的行。

代码

输出

Recursive Feature Elimination

“TotalCharges”有一些 NaN 值。我们需要删除它们。

代码

输出

Recursive Feature Elimination

现在,看起来很棒。

特征工程

在这里,我们将把原始数据转换为有用的信息,以提高机器学习模型的性能。它构成了数据处理流程中最重要的一步之一,常常区分了一个一般的模型和一个具有高准确率的模型。

代码

输出

Recursive Feature Elimination

现在我们将把选定的特征数量与 交叉验证 分数绘制成折线图。之后打印出理想的特征数量。

代码

输出

Recursive Feature Elimination
Recursive Feature Elimination

在原始数据 19 个特征中,经过上述阶段后,只剩下 9 个特征。现在让我们看看它们在不同机器学习模型上的表现如何。

划分数据

现在,我们将从特征选择后的 DataFrame 创建一个训练集和测试集,然后对原始 DataFrame 执行相同的操作。

代码

输出

Recursive Feature Elimination

模型

在测试以下分类器以创建机器学习模型时,我们将比较原始数据集和特征选择后数据集的性能。

代码

输出

Recursive Feature Elimination

我们的模型都在这两种类型的数据上进行了训练。

现在我们将暂时验证这两个模型的准确性。

代码

输出

Recursive Feature Elimination

正如我们所见,在大多数情况下,特征选择后的模型都有所提高。

为了查看准确性结果,我们还可以为每个模型创建一个条形图。

代码

输出

Recursive Feature Elimination

根据以上结果,特征选择后数据集的平均准确率比原始数据集的平均准确率高 0.3%。其中,支持向量机(准确率为 79.6%)是使用特征选择后数据训练出的准确率最高的模型。当使用特征选择后数据训练多层感知器时,准确率提高了 2.3%。然而,一些分类器(K-近邻、AdaBoost、随机梯度下降和朴素贝叶斯)并未从特征选择后的数据中受益。

现在,为了确保结果,我们还可以使用交叉验证来评估模型。

模型评估

我们将对整个数据集使用 k 折交叉验证(k=10)来确认准确性结果,并进一步评估这两个模型的性能。准确率和 ROC AUC 分数是用于验证的指标。

代码

输出

Recursive Feature Elimination

精度

让我们看看交叉验证准确性的结果。

代码

输出

Recursive Feature Elimination

根据准确性结果,特征选择后数据集的平均准确率比原始数据集的平均准确率高 0.75%。在此,使用特征选择后数据训练出的 Logistic Regression(逻辑回归)模型表现最佳(80.4%)。使用特征选择后数据训练的多层感知器准确率提升最大,为 2.8%。对于 SVM 和 AdaBoost,特征选择后数据的准确率略低于(仅低 0.1%)原始数据。请注意,原始数据包含 19 个特征,而特征选择后数据只有 9 个。

ROC-AUC 分数

让我们看看 ROC AUC 分数的结果。

代码

输出

Recursive Feature Elimination

AdaBoost 和 Logistic Regression 是 ROC AUC 值最高的模型,为 0.844。准确性结果和 ROC AUC 结果没有显著差异。然而,对于各种分类器(Logistic Regression、Naive Bayes 和 AdaBoost),特征选择后数据的 ROC AUC 分数比原始数据略差。

拟合时间

让我们看看拟合时间的结果。

代码

输出

Recursive Feature Elimination

在特征选择后数据上训练的所有模型的拟合时间都比在原始数据上训练的模型快。无疑,原因是模型所训练的特征数量不同。

特征重要性

现在,我们将确定已开发预测模型中每个特征的重要性。由于逻辑回归是所有模型中准确率最高的,因此在此情况下使用它。

代码

输出

Recursive Feature Elimination
Recursive Feature Elimination

两个 Logistic Regression 模型的前五个关键特征——“tenure”(任期)、“PhoneService”(电话服务)、“Contract”(合同)、“TotalCharges”(总充电费用)和“MonthlyCharges”(月度费用)是相同的。两个版本剩余的关键特征也是相同的。

为了进行比较,让我们检查 AdaBoost 分类器的特征重要性。

代码

输出

Recursive Feature Elimination
Recursive Feature Elimination

两个 AdaBoost 模型的前五个关键特征略有不同。尽管在 RFE 步骤中未被选中,但在原始数据上训练的 AdaBoost 分类器在其特征重要性中将“PaymentMethod”(付款方式)排在了第五位。两个模型共享剩余的关键特征。

也确定支持向量机特征的重要性。

代码

输出

Recursive Feature Elimination
Recursive Feature Elimination

两个支持向量机模型的前五个关键特征略有不同。在初始数据上训练的 SVM 分类器中,“tenure”排在第五位,而在另一个模型中,它排在第一位。在这三个模型中,“tenure”、“MonthlyCharges”和“TotalCharges”始终出现在每个模型最重要的前 5 个特征中。

结论

递归特征消除是减少训练时间、仅选择所需特征,并且仍然获得与原始数据性能相当或更好的准确性的绝佳方法。RFE 的受欢迎程度源于其易于使用和配置,以及它能够精确识别训练数据集中与目标变量预测最相关的特征(列)。基于上述发现,特征选择后数据的特征重要性也得以保持,并且与原始数据相同。