回归与分类的特征选择

时间:2018-02-28 14:06:35

标签: python-3.x machine-learning classification regression feature-selection

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

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

我会回答您的问题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,并添加了一些噪音。这是一个帮助看到这一点的情节。

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²,近乎完美。 最佳变量取决于算法。

问题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 <0.5则y2为1,否则为2。 x2是y2的完美预测因子。但是x1是随机的,与y2没有关系,因此是y2的不良预测因子。

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

我希望这会有所帮助。