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)