Python 如何计算最佳最大深度来训练具有大量特征的ML模型?

Python 如何计算最佳最大深度来训练具有大量特征的ML模型?,python,machine-learning,scikit-learn,xgboost,Python,Machine Learning,Scikit Learn,Xgboost,我的数据帧中每天有N个功能,可以追溯到20天(时间序列):我有大约400个功能x 100k行 我试图确定最重要的功能,因此我通过以下方式培训了我的XGBoost模型: model = xgb.XGBRegressor(learning_rate=0.01, n_estimators=1000, max_depth=20) eval_set = [(X_test, y_test)] model.fit(X_train, y_train, eval_metric="rmse", eval_set=

我的数据帧中每天有N个功能,可以追溯到20天(时间序列):我有大约400个功能x 100k行

我试图确定最重要的功能,因此我通过以下方式培训了我的XGBoost模型:

model = xgb.XGBRegressor(learning_rate=0.01, n_estimators=1000, max_depth=20)

eval_set = [(X_test, y_test)]
model.fit(X_train, y_train, eval_metric="rmse", eval_set=eval_set, verbose=True, early_stopping_rounds=20)
然后:

def plot_fimportance(xgbmodel, df_x, top_n=30):
    features = df_x.columns.values
    mapFeat = dict(zip(["f"+str(i) for i in range(len(features))],features))
    ts = pd.Series(xgbmodel.booster().get_fscore())
    ts.index = ts.reset_index()['index'].map(mapFeat)
    ts.order()[-top_n:].plot(kind="barh", x = 'Feature', figsize = (8, top_n-10), title=("feature importance"))

plot_fimportance(model, df.drop(['label']))
我听说参数max_depth应该这样计算:

最大深度=特征数量/3

我认为这可能适用于小数据集,但如果我用
max_depth=133
训练我的模型,我的电脑可能会爆炸,可能也会过度拟合


有这么多的特征,我怎么能计算出最大深度的最佳值呢?

这个公式并没有给出最佳深度;这只是一种启发。如果你想要最佳深度,那么你必须从经验上找到它:找到一个功能起点,并在每个方向上变化。应用梯度下降法来接近最佳答案


如果您想要的只是在您的机器上运行的最大限制,那么您可以繁琐地计算存储需求并找到最大值。为了平衡这一点,过度安装。。。你需要选择你的折衷方案,但你仍然停留在实验中。

你能解释一下或给出一个应用梯度下降的例子吗?谢谢!:)这就进入了“教程”领域,这超出了堆栈溢出的目的范围。在这种情况下,可以将其视为求解方程的牛顿-拉斐逊方法。非常简单地说,您可以通过几个深度选项来运行它。看看哪个最适合你。调整深度,然后再次跑步。重复这个过程,适当地调整以找到最佳点,直到你足够接近,你可以宣布你已经完成了。那么,你通常如何检测过度装配?这里没有区别,一般来说是的。深入研究会促进过度拟合;实际上,任何改进训练过程的方法都可能导致过度拟合。根本原因在于您的培训数据如何忠实地表示所有可用输入的集合。如果你在覆盖范围上有差距,那么艰苦的训练将适应这些差距,结果模型将无法很好地处理来自这些差距的输入;将过度装配留到以后。