从分类器中检索训练特征名称列表

Retrieve list of training features names from classifier

在使用 fit 方法训练分类器后,有没有办法检索用于训练分类器的特征名称列表?我想在应用到看不见的数据之前获得这些信息。 用于训练的数据是 pandas DataFrame,在我的例子中,分类器是 RandomForestClassifier.

您不需要知道为训练选择了哪些特征。只需确保在预测步骤中向拟合分类器提供您在 学习阶段 .

中使用的 相同特征

随机森林分类器将仅使用进行拆分的特征。这些将与第一阶段所学的相同。其他暂不考虑。

如果您的测试数据形状训练数据不同它会抛出一个错误,即使测试数据包含用于拆分决策树的所有特征。

此外,由于随机森林为您的决策树(在 sklearn 中称为 estimators随机选择特征,因此所有特征都可能至少使用一次。


但是,如果你想知道使用的特征,你可以在你的分类器上调用属性n_features_feature_importances_ 一旦安装.

您可以查看 here 了解如何检索您使用的最重要功能的名称。

根据文档和以前的经验,无法获得至少在其中一个拆分中考虑的特征列表。

您是否担心不想将所有特征用于预测,而只使用实际用于训练的特征?在这种情况下,我建议在拟合后列出 feature_importances_ 并删除看起来不相关的特征。然后训练一个仅具有相关特征的新模型,并将这些特征也用于预测。

我有一个可行但不是很优雅的解决方案。这是一个没有现有解决方案的旧 post,所以我想没有任何解决方案。

创建并拟合您的模型。例如

model = GradientBoostingRegressor(**params)
model.fit(X_train, y_train)

然后你可以添加一个属性,它是 'feature_names' 因为你在训练时就知道它们

model.feature_names = list(X_train.columns.values)

然后我通常将模型放入二进制文件中传递,但您可以忽略它

joblib.dump(model, filename)
loaded_model = joblib.load(filename)

然后您可以从模型中获取特征名称,以便在预测时使用它们

f_names = loaded_model.feature_names
loaded_model.predict(X_pred[f_names])

您可以按如下方式从经过训练的 XGBOOST 模型中提取特征名称:

model.get_booster().feature_names