我试图用RFECV
进行特征选择,但每次都会给出不同的结果,交叉验证是将样本X划分为随机块还是顺序确定块?
此外,为什么grid_scores_
和score(X,y)
的得分不同?为什么分数有时是负数?
交叉验证将样本X划分为随机块还是顺序确定块
默认情况下,CV将数据划分为确定性块。您可以通过将shuffle参数设置为True来更改此行为。
但是,如果y是二进制或多类,则RFECV使用sklearn.model_selection.StratifiedKFold
。
这意味着它将拆分数据,使每个折叠具有相同(或几乎相同的类比例)。为了做到这一点,在CV的不同迭代中,每个折叠中的确切数据可能会略有变化。然而,这不应导致数据发生重大变化。
如果使用CV参数传递CV迭代器,则可以通过指定随机状态来修复拆分。随机状态与算法做出的随机决策相关联。每次使用相同的随机状态将确保相同的行为。
此外,为什么grid_scores_和score(X,y)的分数不同
grid_scores是交叉验证分数的数组。grid_scores[i]是第i次迭代的交叉验证分数。这意味着第一个分数是所有特征的分数,第二个分数是删除一组特征时的分数,依此类推。每个特征中删除的特征数量等于步长参数的值。默认情况下,该值为=1。
score(X。
为什么分数有时是负数
这取决于您使用的估计器和记分器。如果您没有设置评分器,RFECV将使用估计器的默认评分函数。一般来说,这是准确的,但在您的特定情况下,可能会返回负值。