递归特征消除(RFE)SKLearn

时间:2017-12-07 06:14:34

标签: machine-learning scikit-learn

我创建了一个表来测试我的理解

    F1  F2  Outcome
0   2   5        1
1   4   8        2
2   6   0        3
3   9   8        4
4  10   6        5

从F1和F2我试图预测结果

正如您所看到的,F1与结果有很强的相关性,F2是随机噪声

我测试了

pca = PCA(n_components=2)
fit = pca.fit(X)
print("Explained Variance")
print(fit.explained_variance_ratio_)
Explained Variance
[ 0.57554896  0.42445104]

这是我的预期,并表明F1更重要

然而,当我做RFE(递归特征消除)时

model = LogisticRegression()
rfe = RFE(model, 1)
fit = rfe.fit(X, Y)
print(fit.n_features_)
print(fit.support_)
print(fit.ranking_)
1
[False  True]
[2 1]

它要求我保留F2?它应该让我保持F1,因为F1是一个强预测器,而F2是随机噪音...为什么F2?

由于

1 个答案:

答案 0 :(得分:1)

您正在使用LogisticRegression型号。这是一个分类器,而不是一个回归器。所以这里的结果被视为标签(而不是数字)。为了良好的训练和预测,分类器需要每个类的多个样本。但是在您的数据中,每个类只有一行。因此,结果是垃圾,不应该被认真对待。

尝试用任何回归模型替换它,您将看到您认为的结果。

model = LinearRegression()
rfe = RFE(model, 1)
fit = rfe.fit(X, y)

print(fit.n_features_)
print(fit.support_)
print(fit.ranking_)

# Output
1
[ True False]
[1 2]
相关问题