Machine learning 每次都有不同结果的交叉验证

Machine learning 每次都有不同结果的交叉验证,machine-learning,scikit-learn,deep-learning,data-science,cross-validation,Machine Learning,Scikit Learn,Deep Learning,Data Science,Cross Validation,我的所有模型都使用以下参数进行初始化: def intiailize_clf_models(self): model = RandomForestClassifier(random_state=42) self.clf_models.append((model)) model = ExtraTreesClassifier(random_state=42) self.clf_models.append((model)) model = MLPClassi

我的所有模型都使用以下参数进行初始化:

def intiailize_clf_models(self):
    model = RandomForestClassifier(random_state=42)
    self.clf_models.append((model))

    model = ExtraTreesClassifier(random_state=42)
    self.clf_models.append((model))

    model = MLPClassifier(random_state=42)
    self.clf_models.append((model))

    model = LogisticRegression(random_state=42)
    self.clf_models.append((model))

    model = xgb.XGBClassifier(random_state=42)
    self.clf_models.append((model))

    model = lgb.LGBMClassifier(random_state=42)
    self.clf_models.append((model))
通过模型循环并执行k倍交叉验证:

def kfold_cross_validation(self):
    clf_models = self.get_models()
    models = []
    self.results = {}

    for model in clf_models:
        self.current_model_name = model.__class__.__name__
        cross_validate = cross_val_score(model, self.xtrain, self.ytrain, cv=4)
        self.mean_cross_validation_score = cross_validate.mean()
        print("Kfold cross validation for", self.current_model_name)
        self.results[self.current_model_name] = self.mean_cross_validation_score
        models.append(model)

每当我运行交叉验证时,即使在不同模型上设置了随机状态,我也会得到不同的结果。我想知道为什么交叉验证会得到不同的结果,以及可以做些什么这是因为您没有为k折叠生成器设置随机_状态。默认情况下,将cv的int值传递为

cross_val_score将使用不同的随机状态调用StratifiedKFold,每次调用都会导致模型参数不同,从而导致不同的结果

有关部分由

要解决这一问题,您可以通过您自己的交叉验证生成器,该生成器具有上述文档中所述的受控随机状态。例如:

# (code untested)
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=4, random_state=42)
cross_validate = cross_val_score(model, self.xtrain, self.ytrain, cv=skf)


这是因为您没有为k折叠生成器设置随机_状态。默认情况下,将cv的int值传递为

cross_val_score将使用不同的随机状态调用StratifiedKFold,每次调用都会导致模型参数不同,从而导致不同的结果

有关部分由

要解决这一问题,您可以通过您自己的交叉验证生成器,该生成器具有上述文档中所述的受控随机状态。例如:

# (code untested)
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=4, random_state=42)
cross_validate = cross_val_score(model, self.xtrain, self.ytrain, cv=skf)


我找到了问题的答案

使用以下选项设置随机种子解决了问题:

seed = np.random.seed(22)

我找到了问题的答案

使用以下选项设置随机种子解决了问题:

seed = np.random.seed(22)