我有一个数据帧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_new在不同的场合运行时返回不同的功能(一次返回5个功能,另一次运行返回9.一个不是另一个的子集)。为什么会这样?
b)这是否意味着不稳定的解决方案?虽然使用StratifiedKFold的相同种子可以解决这个问题,这是否意味着我需要重新考虑整体方法?
c)一般来说,我如何进行调整?例如,在我当前的实现中调整之前选择了功能。调整是否会影响某些功能的重要性?或者我应该同时调整?