回归与分类中的特征选择

我是机器学习的新手,请多包涵,谢谢!
我有三个问题要问,所以在回答时提到问题编号会很有帮助。

我想在应用机器学习算法之前对我的训练数据进行特征选择。我将使用相同的数据集在许多不同的机器学习算法上运行,以决定哪种算法最佳,因此,如果我能只进行一次特征选择并将新数据集传递给各种算法,将会更加高效。
注意:我使用的是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加上一些噪声。以下是帮助你看到这一点的图表。

y with x1 and x2 as predictors

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

LM1 = lm(y ~ x1)LM2 = lm(y ~ x2)summary(LM1)$r.squared[1] 0.8454181summary(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.9999928NN2 = 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 = x1y2 = ifelse(x2<0.5, 1, 2)

y1等于x1,因此x1是y1的完美预测因子。但x2是随机的,与y1没有关系,因此是y1的较差预测因子。相反,y2在x2小于0.5时为1,否则为2。x2是y2的完美预测因子。但x1是随机的,与y2没有关系,因此是y2的较差预测因子。

更一般地说,最佳预测因子显然取决于你试图预测什么。如果你在预测两个不同的变量,没有理由认为同一组预测因子对两者都是最佳的。

希望这对你有帮助。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注