Scikit learn 为什么sklearn.feature_selection.RFECV每次运行都会给出不同的结果

Scikit learn 为什么sklearn.feature_selection.RFECV每次运行都会给出不同的结果,scikit-learn,cross-validation,Scikit Learn,Cross Validation,我尝试用RFECV进行特征选择,但每次都会给出不同的结果,交叉验证是将样本X划分为随机块还是顺序确定块 另外,为什么网格分数和scoreX,y的分数不同?为什么分数有时是负数?交叉验证是将样本X划分为随机组块还是顺序确定组块 默认情况下,CV将数据划分为确定性块。您可以通过将shuffle参数设置为True来更改此行为 但是,如果y是二进制或多类,则使用sklearn.model_selection.StratifiedKFold 这意味着它将分割数据,使每个折叠具有相同或几乎相同的类比率。为了

我尝试用RFECV进行特征选择,但每次都会给出不同的结果,交叉验证是将样本X划分为随机块还是顺序确定块

另外,为什么网格分数和scoreX,y的分数不同?为什么分数有时是负数?

交叉验证是将样本X划分为随机组块还是顺序确定组块

默认情况下,CV将数据划分为确定性块。您可以通过将shuffle参数设置为True来更改此行为

但是,如果y是二进制或多类,则使用sklearn.model_selection.StratifiedKFold

这意味着它将分割数据,使每个折叠具有相同或几乎相同的类比率。为了做到这一点,每个折叠中的精确数据可以在CV的不同迭代中稍微改变。但是,这不应导致数据发生重大变化

如果使用CV参数传递CV迭代器,则可以通过指定随机状态来修复拆分。随机状态与算法做出的随机决策相关联。每次使用相同的随机状态将确保相同的行为

另外,为什么网格分数和scoreX,y的分数不同

网格分数是交叉验证分数的数组。grid_scores_[i]是第i次迭代的交叉验证分数。这意味着第一个分数是所有特征的分数,第二个分数是删除一组特征时的分数,依此类推。每个步骤中删除的特征数等于步骤参数的值。默认情况下,该值为=1

scoreX,y选择最佳数量的功能并返回这些功能的分数

为什么分数有时是负数

这取决于您使用的估计器和记分器。如果未设置计分器,RFECV将为估计器使用默认计分函数。一般来说,这是准确度,但在您的特定情况下,可能返回负值。

交叉验证是否将样本X划分为随机块或顺序确定块

默认情况下,CV将数据划分为确定性块。您可以通过将shuffle参数设置为True来更改此行为

但是,如果y是二进制或多类,则使用sklearn.model_selection.StratifiedKFold

这意味着它将分割数据,使每个折叠具有相同或几乎相同的类比率。为了做到这一点,每个折叠中的精确数据可以在CV的不同迭代中稍微改变。但是,这不应导致数据发生重大变化

如果使用CV参数传递CV迭代器,则可以通过指定随机状态来修复拆分。随机状态与算法做出的随机决策相关联。每次使用相同的随机状态将确保相同的行为

另外,为什么网格分数和scoreX,y的分数不同

网格分数是交叉验证分数的数组。grid_scores_[i]是第i次迭代的交叉验证分数。这意味着第一个分数是所有特征的分数,第二个分数是删除一组特征时的分数,依此类推。每个步骤中删除的特征数等于步骤参数的值。默认情况下,该值为=1

scoreX,y选择最佳数量的功能并返回这些功能的分数

为什么分数有时是负数


这取决于您使用的估计器和记分器。如果未设置计分器,RFECV将为估计器使用默认计分函数。一般来说,这是准确的,但在你的特殊情况下,可能是返回负值的内容。

请共享您的代码,以便我们能够具体回答这些问题。请共享您的代码,以便我们能够具体回答这些问题。还请在StratifiedFold中添加关于random_state参数的信息,该参数可用于修复拆分。请在中添加关于random_state参数的信息层状褶皱,可用于固定裂缝