很抱歉打扰您,但我在搜索网站后未能找到明确的答案。
我正在根据一些临床数据构建随机森林分类器,其中目标变量(结果)是二进制(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 如何处理转换,但我现在有点困惑。
如有任何澄清,我们将不胜感激!
谢谢!
您应该看到与预处理特征相同数量的列,是的。您检查过
numeric_columns
和categorical_columns
吗?