RFECV不会为相同的数据返回相同的功能

时间:2015-08-06 16:40:51

标签: python scikit-learn

我有一个数据帧X,它包含60个功能和~450k结果。我的反应变量y是绝对的(生存,没有生存)。

我想使用RFECV来减少我在Xtrain上的估算器(现在,逻辑回归)的重要特征的数量,我想在ROC曲线下得到准确度。 "选择的功能"是所有功能的列表。

from sklearn.cross_validation import StratifiedKFold
from sklearn.feature_selection import RFECV
import sklearn.linear_model as lm

#  Create train and test datasets to evaluate each model
Xtrain, Xtest, ytrain, ytest = train_test_split(X,y,train_size = 0.70)
# Use RFECV to reduce features

#  Create a logistic regression estimator 
logreg = lm.LogisticRegression()

# Use RFECV to pick best features, using Stratified Kfold
rfecv =   RFECV(estimator=logreg, cv=StratifiedKFold(ytrain, 10), scoring='roc_auc')

# Fit the features to the response variable
X_new = rfecv.fit_transform(Xtrain[features_selected], ytrain)

我有几个问题:

a)X_n​​ew在不同的场合运行时返回不同的功能(一次返回5个功能,另一次运行返回9.一个不是另一个的子集)。为什么会这样?

b)这是否意味着不稳定的解决方案?虽然使用StratifiedKFold的相同种子可以解决这个问题,这是否意味着我需要重新考虑整体方法?

c)一般来说,我如何进行调整?例如,在我当前的实现中调整之前选择了功能。调整是否会影响某些功能的重要性?或者我应该同时调整?

1 个答案:

答案 0 :(得分:0)

在k倍交叉验证中,原始样本随机划分为k个相等大小的子样本。因此,每次执行算法时都会得到不同的结果并不奇怪。 Source

有一种方法,即所谓的 Pearson相关系数。通过使用此方法,您可以计算每两个要素之间的相关系数,并旨在删除具有高相关性的要素。该方法可以被认为是解决这种问题的稳定方法。 Source