回归与分类的特征选择
Posted
技术标签:
【中文标题】回归与分类的特征选择【英文标题】:feature selection for regression vs classification 【发布时间】:2018-08-08 10:38:26 【问题描述】:机器学习新手,请多多包涵,谢谢! 我有三个问题要问,所以如果您在回答时提及问题编号会很有帮助。
所以我想在应用机器学习算法之前为我的训练数据执行特征选择。我将使用相同的数据集在许多不同的 ML 算法上运行,以决定什么是最好的,因此如果我可以只进行一次特征选择并将新数据集传递给各种算法,效率会更高。 注意:我在 Python3 中编码,我将使用 BorutaPy 进行特征选择。 [https://github.com/scikit-learn-contrib/boruta_py]
问题 1) 在执行特征选择之前我需要知道我正在使用什么算法吗?或者我可以只执行我的特征选择,然后使用任何算法,即;特征选择是否取决于所使用的算法类型?
问题 2) 我可以对回归和分类问题执行相同的特征选择吗?
问题 3) 除了上面提到的一切,最好对回归问题使用正则化并为分类问题执行特征选择?
谢谢!
【问题讨论】:
【参考方案1】:我将回答您的问题 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 值。当然,也可以使 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
更一般地说,最好的预测器显然取决于您要预测的内容。如果您要预测两个不同的变量,则没有理由认为相同的预测变量集合对两者都最好。
我希望这会有所帮助。
【讨论】:
谢谢! @G5W 你的回答清楚地回答了我的问题 1 和 2!以上是关于回归与分类的特征选择的主要内容,如果未能解决你的问题,请参考以下文章