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