为什么我的机器学习模型在批量训练时表现不佳?

Why does my machine learning model perform poorly with batch training?

我的机器学习模型 (xgboost regressor) 似乎在批量训练时表现更差(即 epochs > 1)。如果我将轮数更改为 1(即没有批次),我的模型分数接近 93%。太好了 但是,当我将批次数设置为 25 或 100 时,样本外模型分数会随着时期数的增加而变得非常糟糕。到最后一批,样本分数外的模型非常差,无法很好地预测任何东西!有人在下面看到我的代码有问题吗?提前致谢!

编辑:genSold 是我整个数据库的生成器。

epochs = 100
batchSize = (int)(nSold / epochs) 
print(batchSize)
print(batchSize * epochs)
model = xgboost.XGBRegressor()
for epoch in range(epochs):
    print(f"Epoch {epoch+1} of {epochs}")
    data = []
    count = 0
    for item in genSold:
        if(count == batchSize):
            break
        data.append(item)
        count += 1
    print(len(data))
    df = shuffle(pd.DataFrame(data))
    df2 = processData(df, numerical_features, categorical_features)
    df2.drop(columns=['house-id_listing'], inplace=True)
    df2 = df2.dropna(subset=prediction)
    Y = df2[prediction]
    X = df2.drop(columns=prediction)
    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.1)
    if epoch == 0:
        model.fit(X_train, Y_train)
    else:
        features = model.get_booster().feature_names
        print(len(features))
        model.fit(X_train[features], Y_train, xgb_model=model.get_booster())
    print(model.score(X_test, Y_test))

model.fit 使用 sklearn API 不会更新现有的树,只会让新的树适应新的数据集。你可以 using the python API, but as of 2018, batch training was not recommended by the devs。如果必须这样做,则需要至少多次遍历整个训练集,以复制单批训练的性能。

编辑:这个假设是错误的。

如果我对你的代码的理解正确,你正在对 genSold 中的前 batchSize 个样本进行重复训练,因为样本永远不会从 genSold 中删除。

但是,如果是这种情况,我希望您在最后一行中报告的分数会提高,因为您在拆分成训练和测试折叠之前对每批进行洗牌,在第一批之后,应该意味着您正在测试您之前训练过的样本。您是说它在单独的 hold-out 集上表现不佳吗?