gpt4 book ai didi

Python:如何在堆叠模型中产生可重现的结果

转载 作者:行者123 更新时间:2023-11-30 09:07:22 25 4
gpt4 key购买 nike

经过这么多次尝试和错误,我终于成功构建了自己的堆叠模型。但我无法每次都产生相同的(准确性)。我知道我必须将 random_state 参数初始化为任何值,但即使在调用类方法之前将 random_state 值显式写入某个值之后,我仍然会得到随机结果。

class Stacking(BaseEstimator, ClassifierMixin):
def __init__(self, BaseModels, MetaModel, nfolds = 3, seed = 1):
self.BaseModels = BaseModels
self.MetaModel = MetaModel
self.nfolds = nfolds
self.seed = np.random.seed(seed) <---- This fixed my error. thanks to foladev.

def fit(self, X, y):
self.BaseModels_ = [list() for model in self.BaseModels]
self.MetaModel_ = clone(self.MetaModel)
kf = KFold(n_splits = self.nfolds, shuffle = False, random_state = 6)
out_of_fold_preds = np.zeros((X.shape[0], len(self.BaseModels_)))

for index, model in enumerate(self.BaseModels_):
for train_index, out_of_fold_index in kf.split(X, y):
instance = clone(model)
self.BaseModels_[index].append(instance)
instance.fit(X[train_index], y[train_index])

preds = instance.predict(X[out_of_fold_index])
out_of_fold_preds[out_of_fold_index, index] = preds
#print(model, preds, out_of_fold_preds.shape)
self.MetaModel_.fit(out_of_fold_preds, y)
return self

我使用 LogisticRegression、SGDClassifier、RandomForestClassifer 作为我的基本模型,使用 XGBoost 作为我的元模型。 random_state 存在于所有模型中,但仅适用于基本模型。

当 random_state 放入 xgbclassifier 时,我收到错误“init() 获得了意外的关键字参数 'random_state'”。

请注意,我在调用类之前尝试初始化 random_state。尝试改变 KFold 中的随机播放。另外,如何初始化类方法中的参数?

最佳答案

从 API 来看,xgbclassifier 使用 seed

xgboost.XGBClassifier(
max_depth=3,
learning_rate=0.1,
n_estimators=100,
silent=True,
objective='binary:logistic',
booster='gbtree',
n_jobs=1,
nthread=None,
gamma=0,
min_child_weight=1,
max_delta_step=0,
subsample=1,
colsample_bytree=1,
colsample_bylevel=1,
reg_alpha=0,
reg_lambda=1,
scale_pos_weight=1,
base_score=0.5,
random_state=0,
seed=None,
missing=None,
**kwargs
)

请问为什么不设置类级别种子并将其应用于所有方法?

关于Python:如何在堆叠模型中产生可重现的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48691760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com