如何比较特征选择方法的性能?

数据挖掘 特征选择 表现 模型选择
2021-10-02 01:52:48

有几种特征选择/变量选择方法(例如参见Guyon & Elisseeff, 2003 ; Liu et al., 2010):

  • 过滤方法(例如,基于相关性、基于熵、基于随机森林重要性),
  • 包装方法(例如,前向搜索、爬山搜索),以及
  • 嵌入式方法,其中特征选择是模型学习的一部分。

许多已发布的算法也在 R、Python 等机器学习工具中实现。

什么是比较不同特征选择算法并为给定问题/数据集选择最佳方法的合适方法?另一个问题是,是否有任何已知的衡量特征选择算法性能的指标?

4个回答

这是一个难题,研究人员正在取得很大进展。

如果您正在寻找有监督的特征选择,我推荐LASSO及其变体。使用监督学习对算法的评估非常简单:您在测试数据上选择的任何指标的性能。

LASSO 的两个主要警告是(1)所选特征不会自动检测交互,因此您必须先验地制作所有特征(即在通过模型运行它们之前)和(2)LASSO 不会识别非-线性关系(例如,二次关系)。

尝试克服这两个警告的一种方法是使用自动进行特征选择的Gradient Boosted Machines 。值得注意的是,GBM 的统计特性比 LASSO 的统计特性要模糊一些。

如果您正在寻找无监督的特征选择,这些研究人员似乎使用了类似的正则化方法,但在这种特殊情况下的评估变得不那么明显。人们尝试了很多不同的方法,例如 PCA/SVD 或 K-Means,最终将尝试找到数据的线性近似值。

在这种情况下,典型的性能度量是重建误差或集群的 RMSE。

在软件方面,R 和 Python 都有 GBM、LASSO、K-Means、SVD 和 PCA。R 中的 GLMNET 和 XGBoost 以及 Python 的 Sklearn 是相关的库。

我总是将特征选择视为最终结果的一个步骤。

下面,我以某种方式混合了特征选择和降维,这可能有一些目标并且可能会混淆。

一些典型用途:

  • 减少机器学习中的计算量:选择的质量是最终学习结果的一个因素,显然也是完成学习的速度

  • 数据的可视化/理解,最终结合多个维度。当它不隐藏有趣的东西时很好,当这是可以理解的

  • 简化学习结果,仍然使它们易于理解(例如根本原因分析)。如果简单的话很好,但在质量方面仍然足够

  • 正如之前的回复所建议的那样,控制拟合

  • ...

所以,我不认为有一般规则(在 ML 中总是如此),但这是一个个案问题。

只是个人信仰...

这非常取决于具体情况和您要解决的问题。存在一些通用规则,例如包装方法更灵活,也更容易过拟合。

特征选择性能可以通过学习任务的整体性能来评估,例如可以用不同的方法选择特征,然后使用这些不同的特征集进行分类,比较得到的分类器的精度。

在某些场景(如某些生物学应用)中,另一个重要因素是所选特征和结果的可解释性,例如在聚类问题中,所选特征和结果聚类的含义是衡量性能的一个非常重要的指标。

您必须运行一组人工测试,尝试使用不同的方法检测相关特征,同时提前知道哪些输入变量子集会影响输出变量。

好的技巧是保留一组具有不同分布的随机输入变量,并确保您的特征选择算法确实将它们标记为不相关。

另一个技巧是确保在排列行之后,标记为相关的变量不再被归类为相关。

以上所述适用于过滤器和包装器方法。

另外,如果单独(一个接一个)变量对目标没有任何影响,但联合起来显示出很强的依赖性,请务必处理这些情况。示例将是一个众所周知的 XOR 问题(查看 Python 代码):

import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_selection import f_regression, mutual_info_regression,mutual_info_classif

x=np.random.randn(5000,3)
y=np.where(np.logical_xor(x[:,0]>0,x[:,1]>0),1,0)

plt.scatter(x[y==1,0],x[y==1,1],c='r',marker='x')
plt.scatter(x[y==0,0],x[y==0,1],c='b',marker='o')
plt.show()
print(mutual_info_classif(x, y)) 

输出:

Python 3 XOR 插图

[ 0. 0. 0.00429746]

因此,可能强大(但单变量)的过滤方法(计算输出和输入变量之间的互信息)无法检测数据集中的任何关系。而我们肯定知道它是 100% 的依赖,并且我们可以在知道 X 的情况下以 100% 的准确率预测 Y。

好主意是为特征选择方法创建一种基准,有人想参与吗?