如果我正确理解了基于树的方法,那么更重要的特征最好放在树的顶部。
有没有办法我可以在 xgboost 中指定这个?类似于我如何为每个样本/行分配权重,与其他特征相比,我是否可以以某种方式强制某些特征更可能被置于顶部?(或强制某些列在模型中发挥更重要作用的其他方式?)
我知道您希望数据来指导模型而不是强制执行它,但有一个合乎逻辑的情况是当您拥有有限的数据并希望尝试通过您的主题专业知识帮助该过程时。
如果我正确理解了基于树的方法,那么更重要的特征最好放在树的顶部。
有没有办法我可以在 xgboost 中指定这个?类似于我如何为每个样本/行分配权重,与其他特征相比,我是否可以以某种方式强制某些特征更可能被置于顶部?(或强制某些列在模型中发挥更重要作用的其他方式?)
我知道您希望数据来指导模型而不是强制执行它,但有一个合乎逻辑的情况是当您拥有有限的数据并希望尝试通过您的主题专业知识帮助该过程时。
您可能会在数据框中复制某些功能。正如您所提到的,我当然在寻找两件事,其中之一是将一些特征放在更靠近根节点的位置,并且还希望一些特征更多地出现在分支上。我了解您的担忧是让您的树木更加了解某些功能。我可能会在那里提出一些建议。XGBoost 对每个特征进行统一采样,如果我们可以说某些特征更重要,应该更多地使用,那就更好了。简短的技巧将在降低 colsample_bytree 比率的同时复制列。XGBoost 目前不支持加权特征,因为它统一绘制特征。我在另一个地方看到过,文档中没有针对特征(XGBoost 中的列)的特定采样技术。检查 colsample_bytree :https://xgboost.readthedocs.io/en/latest/parameter.html (学分:从https://www.kaggle.com/aerdem4的网络研讨会上听说过这种技术)
一般来说,像我这样的新手开始通过工程创建很多特征,但也可能会丢弃重要特征成为少数。尽管 XGBoost 参数可以在超参数搜索时处理它,但创建没有降雨数据的树似乎真的没有好处,因为当问题预测干旱时,大量工程风数据占主导地位。
如果您关心的是指定领域知识,您还可以通过 XGBoost 文档中的“特征交互约束”来定义领域知识。我希望当我成为 %100 确定我在用功能交互做什么时编辑答案:https ://xgboost.readthedocs.io/en/latest/tutorials/feature_interaction_constraint.html#:~:text=Feature% 20interaction%20constraints%20are%20expressed,but%20with%20no%20other%20variable。
我知道这些不能回答您的主要问题,目前似乎不可能。另外,我不确定放在顶部的功能更重要,这似乎并不总是正确的。
编辑: XGBoost 在 1.3.0 中向 DMatrix 添加了 feature_weights!但是,1.3.0 还不稳定。当我找到/应用特征权重时,我会在这里编辑。https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBRegressor.fit
事实上,树算法通过计算一个度量来选择他们切割的特征,评估哪个切割是最好的。最著名的指标是基尼系数或熵。
所以它的目标是自动做出最好的分割,知道数据中有什么。强制特征位于树的顶部意味着降低性能,因为树会削减创造最重要的变量。
Xgboost 会自动计算特征重要性。我没有找到任何手动设置它的方法。您可以选择 2 个选项来解决问题:
有时,当您的人口中有重要类别时,最好按类别拆分数据集并在它们上训练不同的模型。如果你真的有不同的人群和不同的相关行为,这可能是一段路要走。这可能有助于避免某些类别不平衡问题。但是,这可能不切实际,因为您必须调整多个模型。
关于 xgboost,它被指定用于快速处理重要的数据集。试图影响学习过程以选择它首先选择的特征通常是不可取的。
如果您有一个由于专业知识而应该首先选择的功能,但它没有: