回归与分类的特征选择

feature selection for regression vs classification

机器学习新手,请多多包涵,谢谢!
我有3个问题想问,如果你在回答的时候说出题号会很有帮助。

所以我想在应用机器学习算法之前对我的训练数据执行特征选择。我将在许多不同的 ML 算法上使用相同的数据集 运行 来决定什么是最好的,因此如果我可以只进行一次特征选择并将新数据集传递给各种算法,效率会更高。
注意:我在 Python3 中编码,我将使用 BorutaPy 进行特征选择。 [https://github.com/scikit-learn-contrib/boruta_py]

问题 1)
在执行特征选择之前,我需要知道我使用的是什么算法吗?或者我可以只执行我的特征选择,然后使用任何算法,即;特征选择是否取决于所使用的算法类型?

问题 2)
我可以对回归和分类问题执行相同的特征选择吗?

问题 3)
除了上面提到的所有内容,是否最好对回归问题使用正则化并为分类问题执行特征选择?

谢谢!

我会回答您的问题 1 和 2,将第 3 点留给其他人。我将使用 R 来做一些例子。我知道您正在使用 python,但您的问题的答案不取决于实现。我希望您可以将它们翻译成 python 或者只看数学并看看发生了什么。

问题 1:特征选择取决于所使用的算法。

首先,一些数据。

set.seed(1234)
y  = runif(1000)
x1 = (1-y)^(1/6)
x2 = y + rnorm(1000, 0, 0.1)

在这里,y 正好是 1 - x1⁶ 和 y=x2 添加了一些噪声。这是一个有助于了解这一点的情节。

我们想根据 x1 或 x2 预测 y。哪一个更好?首先让我们使用线性模型。

LM1 = lm(y ~ x1)
LM2 = lm(y ~ x2)
summary(LM1)$r.squared
[1] 0.8454181
summary(LM2)$r.squared
[1] 0.9022076

用x2预测y的模型有更好的R²,所以x2比x1好。

现在让我们使用 kNN 回归(k=1)。

library(FNN)
NN1 = knn.reg(train=x1, y=y)
NN1$R2Pred
[1] 0.9999928
NN2 = knn.reg(train=x2, y=y)
NN2$R2Pred
[1] 0.8728359

使用 x1 的模型具有更好的 R²,接近完美。 最佳变量取决于算法。

问题 2:回归和分类可能需要不同的特征。

这个就简单多了。如果你在做回归,你就是在预测一个数值。如果你在做分类,你就是在预测一个分类变量——所以这里的任何比较都是关于预测不同的 y-values。当然,可以使 x1 与 y1 相关但与 y2 无关,使 x2 与 y2 相关但与 y1 无关。

一个简单的例子是:

x1 = runif(1000)
x2 = runif(1000)
y1 = x1
y2 = ifelse(x2<0.5, 1, 2)

y1 等于 x1,因此 x1 是 y1 的完美预测变量。但是 x2 是随机的,与 y1 无关,因此对 y1 的预测很差。相反,如果 x2<0.5 则 y2 为 1,否则为 2。 x2 是 y2 的完美预测变量。但是 x1 是随机的,与 y2 无关,因此对 y2 的预测很差。

更一般地说,最好的预测变量显然取决于您要预测的内容。如果您要预测两个不同的变量,则没有理由认为同一组预测变量应该对两者都是最好的。

希望对您有所帮助。