Machine learning XGBoost:最大限度地减少连续线性特征对分类特征的影响
假设我有100个独立的特征——90个是二进制的(例如0/1),10个是连续变量(例如年龄、身高、体重等)。我使用100个特征来预测具有足够样本量的分类器问题 当我设置XGBClassifier函数并进行拟合时,从Machine learning XGBoost:最大限度地减少连续线性特征对分类特征的影响,machine-learning,random-forest,data-science,xgboost,feature-selection,Machine Learning,Random Forest,Data Science,Xgboost,Feature Selection,假设我有100个独立的特征——90个是二进制的(例如0/1),10个是连续变量(例如年龄、身高、体重等)。我使用100个特征来预测具有足够样本量的分类器问题 当我设置XGBClassifier函数并进行拟合时,从gain的角度来看,10个最重要的特性始终是10个连续变量。目前我对封面或频率不感兴趣。10个连续变量在gain列表中占据了大约.8到.9的空间(sum(gain)=1) 我试着调整gamma,reg\u alpha,reg\u lambda,max\u depth,colsample。
gain
的角度来看,10个最重要的特性始终是10个连续变量。目前我对封面
或频率
不感兴趣。10个连续变量在gain
列表中占据了大约.8到.9的空间(sum(gain)=1)
我试着调整gamma
,reg\u alpha
,reg\u lambda
,max\u depth
,colsample
。按增益排列的前10个功能始终是连续的10个功能
有什么建议吗
小更新——有人问我为什么会这样。我相信这是因为一个连续变量可以在每个决策树上多次拆分。二进制变量只能拆分一次。因此,树中连续变量的流行率越高,因此获得的
得分越高
我可以建议您尝试几件事
0:0-7、1:8-16、2:17-25
等等我现在正在处理非常类似的问题,因此我很高兴听到您的结果和您选择的尝试路径。是的,众所周知,树(/forest)算法(xgboost/rpart/等)在变量选择中通常会“更喜欢”连续变量而不是二进制分类变量,因为它可以在任何想要最大化信息增益的地方选择连续分割点(并且可以在其他节点或其他树中为同一变量自由选择不同的分割点)。如果这是最优树(对于那些特定的变量),那么它就是最优树。请参阅姐妹站点交叉验证 当你说“任何建议”时,取决于你到底想要什么,它可能是以下之一:
- a) 找出其他90个二进制分类特征中哪一个提供了最多的信息增益
- b) 训练一棵次优树,只为了找出那些特征是什么
- c) 通过将二进制特征组合成具有更多信息增益的n位分类特征来设计一些“复合”特征(同时确保从输入中删除单个二进制特征)
- d) 您可以查看关联规则:
- 排除10个连续变量的不同子集,然后查看哪些二进制特征显示为具有最大增益。假设这为您提供了N个候选特性。N将等于T
- 如果在此步骤中没有合并,则将T减少一些值(如T-=0.05)或比率(如T*=0.9)。如果仍然没有合并,则继续减少T,直到有合并,或直到达到某个终止值(如T=0.03)
- 重新训练树,包括复合变量,不包括其组成子变量
- 现在回到过去,重新训练应该是一个包含所有10个连续变量的改进树,以及你的复合分类特征
- 或者您可以提前终止复合特征选择,以查看完整的重新训练树的外观
- 扔掉任何接近常量/极低方差的变量(因为它们的信息内容接近于零)
- 扔掉任何非常高的基数分类变量(基数>~训练集大小/2),(因为它们往往信息含量较低,但会导致大量虚假的过度拟合和训练时间过长)。这可能包括客户ID、行ID、事务ID、序列ID和其他变量,这些变量本来不应该进行培训,但意外地在培训集中结束
- 将OHE转换为标签编码。是的,这有一个警告,即在分类特征中引入顺序,这可能是没有意义的,例如绿色=3>红色=2>蓝色=1。但在实践中,树似乎可以很好地处理标签=编码的分类变量(即使顺序没有意义)
- 将OHE转换为目标/平均/似然编码。这很棘手,因为您需要应用正则化以避免数据泄漏