从分类器中检索训练要素名称列表

时间:2016-11-08 11:06:26

标签: python pandas scikit-learn random-forest

有没有办法检索用于训练分类器的功能名称列表,一旦使用fit方法进行了训练?我想在申请看不见的数据之前获得这些信息。 用于培训的数据是大熊猫DataFrame,在我看来,分类器是RandomForestClassifier

4 个答案:

答案 0 :(得分:2)

我有一个可行的解决方案,但不是很好。这是一本没有现有解决方案的旧文章,所以我想没有。

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

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

然后,您可以添加一个名为“功能名称”的属性,因为您在训练时就知道了这些功能

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])

答案 1 :(得分:0)

您无需知道为培训选择了哪些功能。在预测步骤中,确保在拟合分类器中给出您在学习阶段期间使用的相同功能

随机森林分类器仅使用其进行分割的功能。这些将与第一阶段学到的相同。其他人不会被考虑。

如果测试数据形状训练数据不同,即使测试数据也会出错包含用于决策树拆分的所有功能。

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

,如果您想了解所使用的功能,只需在分类器上调用属性n_features_feature_importances_

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

答案 2 :(得分:0)

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

您是否担心自己不想使用所有功能进行预测,只考虑实际用于培训的功能?在这种情况下,我建议在拟合后列出feature_importances_并删除看似不相关的功能。然后训练一个只有相关特征的新模型,并使用这些特征进行预测。

答案 3 :(得分:-2)

您可以按照以下步骤从经过训练的模型中提取特征名称:

model.get_booster().feature_names