sklearn中的RFECV,来自grid_scores_的分数

时间:2019-09-06 00:48:58

标签: python scikit-learn linear-regression cross-validation rfe

我正在使用sklearn.feature_selection.RFECV

ref = RFECV(lr, step=1, cv =5, scoring="r2")
ref.fit(X_ndarr, y_ndarr)
print(ref.grid_scores_)

我得到:

[0.9316829 0.93472609 0.79440118 -2.37744438 -1.20559428  -1.35899883 -0.90087801 -1.02047363 -0.54169276 -0.08116821  -0.00685128 0.1561999 -0.26433411 -0.27843449 -0.32703359  -0.32782641 -0.30881354 0.11878835 0.08175137 0.04300757
 0.0378917 0.04534877]

RFECV在每个步骤中都删除了最不重要的功能,因此得分例如10个功能应该是任何10个功能中得分最高的,而当我使用选定的10个功能(使用另一种方式)运行以下代码时:

from sklearn.model_selection import cross_val_score
lr = linear_model.LinearRegression()
scores = cross_val_score(lr, X_top10_ndarr, y_ndarr, cv=5) # top10 features

然后我得到:

交叉验证得分:[0.96706997 0.9653103 0.96386666 0.96017565 0.96603127]

所有得分都在 0.96 左右,而RFECV中具有10个功能的得分是 -0.08

这里到底发生了什么?

EDIT1 :所选功能的数量为2,而ranking_如下:

[4 7 1 6 3 2 8 11 5 10 21 9 12 14 13 15 16 19 18 17 1 20]

1 个答案:

答案 0 :(得分:0)

ref.grid_scores_表示交叉验证得分,以使grid_scores_ [i]对应于第i个特征子集的CV得分。

请参阅this答案以进一步了解这些值。

根据该说明,该模型的10个功能的简历得分将为 -0.26433411

话虽如此,该分数确实很差,因为它为负数,可能线性模型可能对您的数据集不利。

还有一点要注意的是,即使将所有功能都包括在内,您也只能得到0.9316829,小于0.96。

可以使用StratifiedKFold设置random_state并将其作为简历参数值输入。