RandomForestClassifier 中 ColumnTransform 和 OneHotEncoder 的特征重要性

问题描述 投票:0回答:1

很抱歉打扰您,但我在搜索网站后未能找到明确的答案。

我正在根据一些临床数据构建随机森林分类器,其中目标变量(结果)是二进制(0 或 1)。我正在使用 Python 和 scikit-learn 来实现这个。

数据集由分类变量和数值变量组成,我正在使用管道进行预处理。

numeric_transformer = Pipeline(steps=[
    ("imputer", IterativeImputer(max_iter=20, random_state=42)),
    ("scaler", StandardScaler())
])

categorical_transformer = Pipeline(steps=[
    ("imputer", SimpleImputer(strategy="most_frequent")),
    ("onehot", OneHotEncoder(handle_unknown="ignore"))
])

preprocessor = ColumnTransformer(
    transformers=[
        ("num", numeric_transformer, numeric_columns),
        ("cat", categorical_transformer, categorical_columns)
    ]
)

model = RandomForestClassifier(random_state=42)

pipeline = Pipeline(steps=[
    ("preprocessor", preprocessor),
    ("model", model)
])

grid_search = GridSearchCV(pipeline, param_grid, cv=5, scoring="balanced_accuracy", verbose=4, n_jobs = -1)

获得名为 Final_model 的模型后,当我尝试使用 Final_model.feature_importances_ 提取特征重要性时,我得到一个包含 116 个值的数组,这对应于我的数据集中的变量数量。

问题:由于我使用 OneHotEncoder 作为分类变量,难道我不应该期望数组中的值超过 116 个吗?我相信答案在于 ColumnTransformer 如何处理转换,但我现在有点困惑。

如有任何澄清,我们将不胜感激!

谢谢!

python scikit-learn pipeline random-forest
1个回答
0
投票

您应该看到与预处理特征相同数量的列,是的。您检查过

numeric_columns
categorical_columns
吗?

© www.soinside.com 2019 - 2024. All rights reserved.