回归作为一种确定变量重要性的方法

机器算法验证 回归 p 值 特征选择 k-最近邻 权重
2022-04-10 18:53:21

在我的工作中,我们使用最近邻算法对记录进行分类。当然,此过程的一部分包括确定在算法中将哪些特征用作辅助信息。此外,我们允许对我们选择的特征进行加权,以便更重要的特征在距离计算中具有更高的权重。

在选择要使用的特征以及如何对它们进行加权时,我的同事通常首先想到的是使用辅助信息对感兴趣的变量进行回归,然后使用从中获得的系数和/或 p 值该回归来决定在最近邻算法中使用哪些特征及其权重。

我最初的想法是,这种方法可能不是最好的方法,但我想不出任何具体的理由来反对它,除了说哪些特征在回归上下文中可能很好用,在最近邻上下文。

有人对这种方法的有效性有任何想法吗?这是一种适当的特征选择方法,还是我认为这不是最好的方法是正确的?

2个回答

有人对这种方法的有效性有任何想法吗?

我可以看到的主要问题是线性回归建议将样本空间分成两部分(超平面的两个“边”),而最近的邻居会将其分成区域(可能很多),具体取决于不同的类在样本空间上进行采样。

我能看到的最坏情况如下。您的数据显示了 KNN 可以很好地处理的分布,但是线性回归的表现会很糟糕,就像下图中的棋盘一样(代码在帖子的底部)。尽管这是漫画,但许多其他数据集将表现出相同的行为。

在此处输入图像描述

如果您根据 p 值选择特征,线性回归将丢弃这两个特征:

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.538955   0.041424  37.151   <2e-16 ***
x1          -0.037032   0.027543  -1.345    0.179    
x2          -0.006612   0.027526  -0.240    0.810    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

如果您决定根据线性回归的权重对特征进行加权,请注意权重可能会有数量级的不同,尽管没有理由让它们如此!这相当于将您的数据投影在单个轴上,KNN 无法在该轴上学习任何相关内容(如果您从单个维度查看点的颜色,请考虑它们的颜色)。

因此,我不会使用这种方法来校准 KNN 的权重(或选择属性)。

编辑

您可以增加任何拟合优度度量,添加显示相对于目标的线性相关性的变量。在这种情况下,拟合优度将不再是微不足道的,但您会丢失来自前两个变量的信息。

关于加权 KNN

但是,有可能将距离函数从欧几里德距离更改为维度具有不同权重的距离。这种方法的调整时间很长,因为每次更改一个属性的权重时都必须评估模型。如果是您的特征数量,并且您想,那么您有模型要评估(使用天真的策略)。pxx/2x×23p

请注意,如果您独立处理特征(不是它们的每个组合),您可能会有显着的改进,只运行模型。3×p

KNN 的其他改进

J. Wang、P. Neskovic 和 LN Cooper,“使用简单的自适应距离测量改进最近邻规则”,模式识别快报,卷。28,没有。2,第 207-213 页,2007 年 1 月。

“随机 KNN 特征选择 - 一种快速稳定的随机森林替代方案”Shengqiao Li、E James Harner 和 Donald A Adjeroh,生物信息学 2011 12:450

代码

N <- 2000

decision_function <- function(x){
  (((x[1]%%1-0.5)*(-x[2]%%1-0.5))>0)+1
}

x <- abs(matrix(runif(n = N, min = 0, max = 2), ncol = 2))
y <- apply(X = x, MARGIN = 1, FUN = decision_function)

plot(x, col=y)

model <- lm(y ~ x, data = cbind.data.frame(x,y))

summary(model)

在经典回归情况下,该问题已经产生了许多解决方案。在一篇文章中,概述了她用于计算这些方法的软件,标题为“R 中线性回归的相对重要性:relaimpo 包”,可在此处获得, Ulricke Grömping 提供了许多不同的指标,用于确定回归模型中预测变量的相对重要性。简单的包括:单独哪个变量做得最好,哪个变量对所有其他变量的影响最大。更复杂的包括一些依赖于标准化的第一和计算机密集型的,其中涉及优化变量进入模型的可能顺序。由于这篇文章是开放获取的,我不会在这里尝试更详细的总结。该软件是开源的。