【问题标题】:How to use tqdm in the cross validtion when using folds.split(train.values, target.values)使用 folds.split(train.values, target.values) 时如何在交叉验证中使用 tqdm
【发布时间】:2019-06-05 11:18:46
【问题描述】:

我正在对我的 lightgbm 模型进行如下交叉验证。
我想在 for 循环中使用tqdm,以便检查进程。

folds = KFold(n_splits=num_folds, random_state=2319)
oof = np.zeros(len(train))
getVal = np.zeros(len(train))
predictions = np.zeros(len(target))
feature_importance_df = pd.DataFrame()

print('Light GBM Model')
for fold_, (trn_idx, val_idx) in enumerate(folds.split(train.values, target.values)):

    X_train, y_train = train.iloc[trn_idx][features], target.iloc[trn_idx]
    X_valid, y_valid = train.iloc[val_idx][features], target.iloc[val_idx]


    print("Fold idx:{}".format(fold_ + 1))
    trn_data = lgb.Dataset(X_train, label=y_train, categorical_feature=categorical_features)
    val_data = lgb.Dataset(X_valid, label=y_valid, categorical_feature=categorical_features)

    clf = lgb.train(param, trn_data, 1000000, valid_sets = [trn_data, val_data], verbose_eval=5000, early_stopping_rounds = 4000)
    oof[val_idx] = clf.predict(train.iloc[val_idx][features], num_iteration=clf.best_iteration)
    getVal[val_idx]+= clf.predict(train.iloc[val_idx][features], num_iteration=clf.best_iteration) / folds.n_splits

    fold_importance_df = pd.DataFrame()
    fold_importance_df["feature"] = features
    fold_importance_df["importance"] = clf.feature_importance()
    fold_importance_df["fold"] = fold_ + 1
    feature_importance_df = pd.concat([feature_importance_df, fold_importance_df], axis=0)

    predictions += clf.predict(test[features], num_iteration=clf.best_iteration) / folds.n_splits

print("CV score: {:<8.5f}".format(roc_auc_score(target, oof)))

我曾尝试使用tqdm(enumerate(folds.split(train.values, target.values))enumerate(tqdm(folds.split(train.values, target.values))),但不起作用。
我猜他们没有工作的原因是因为enumerate 没有长度。
但我想知道如何在这种情况下使用 tqdm。
谁能帮帮我?
提前致谢。

【问题讨论】:

    标签: python jupyter-notebook tqdm


    【解决方案1】:

    在k-fold迭代上做一个进度条(desc参数是可选的):

    from tqdm import tqdm
    for train, test in tqdm(kfold.split(x, y), total=kfold.get_n_splits(), desc="k-fold"):
       # Your code here
    

    输出将是这样的:

    k-fold: 100%|██████████| 10/10 [02:26<00:00, 16.44s/it]
    

    【讨论】:

    • 你给了我一个很好的答案,真诚地感谢!
    猜你喜欢
    • 2015-09-06
    • 2011-01-24
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2022-01-25
    • 2021-09-30
    相关资源
    最近更新 更多