回归与分类的特征选择

问题描述 投票:1回答:1

新机器学习所以请耐心等待,谢谢! 我有三个问题要问,所以如果你在回答时提到问题编号会有所帮助。

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

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

问题2) 我可以为回归和分类问题执行相同的功能选择吗?

问题3) 而不是上面提到的所有内容,最好是对回归问题使用正则化并对分类问题进行特征选择吗?

谢谢!

python-3.x machine-learning classification regression feature-selection
1个回答
2
投票

我会回答你的问题1和2,留下3号给别人。我将使用R来做一些例子。我知道您使用的是python,但问题的答案并不依赖于实现。我希望你可以将它们翻译成python,或者只看数学,看看发生了什么。

Question 1: Feature selection is dependent on the algorithm used.

首先,一些数据。

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

这里,y恰好是1 - x1⁶,y = x2,并添加了一些噪声。这是一个帮助看到这一点的情节。

y with x1 and x2 as predictors

我们想要从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²,几乎是完美的。最好的变量取决于算法。

Question 2: Different features may be required for regression and classification.

这更简单。如果您正在进行回归,则表示您正在预测数字量。如果您正在进行分类,那么您正在预测一个分类变量 - 因此,此处的任何比较都将是关于预测不同的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 <0.5则y2为1,否则为2。 x2是y2的完美预测因子。但是x1是随机的,与y2没有关系,因此是y2的不良预测因子。

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

我希望这个对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.