【发布时间】:2019-07-22 20:20:08
【问题描述】:
我在 Stackoverflow 上遇到了几个问题,其中群众面临的问题是他们在拟合/训练 XGBoost 模型之前对训练数据进行预处理,例如使用中心和比例等,例如
`
scaler = MinMaxScaler(feature_range=(0, 1))
X = scaler.fit_transform(X)
my_model_name = XGBClassifier()
my_model_name.fit(X,Y)`
其中 X 和 Y 分别是训练数据和标签,缩放会返回一个 2D NumPy 数组,从而丢失特征名称。
我已经训练了我的 XGBoost 模型,但使用的是预处理数据(使用 MinMaxScaler 进行中心和缩放)。因此,我处于类似的情况,列名/功能名称丢失。因此,当我尝试使用plot_importance(my_model_name) 时,它会导致特征重要性图,但只有特征名称为 f0、f1、f2 等,而不是数据集中的实际特征名称,这必须很明显。
关于 SO 的大多数答案都与以不丢失特征名称的方式训练模型有关(例如在数据框列上使用 pd.get_dummies。我有一个疑问,即在使用 @ 时如何获取实际特征名称987654324@,无需重新训练模型?有没有办法将原始训练数据(未经预处理,带有列名)的特征名称f0,f1,f2等映射到生成的特征重要性图上,以便实际功能名称绘制在图表中?非常感谢这方面的任何帮助。
【问题讨论】: