首页 文章

回归与分类的特征选择

提问于
浏览
1

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

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

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

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

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

谢谢!

1 回答

  • 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的不良预测因子 .

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

    我希望这个对你有用 .

相关问题