2401_88782670 2025-03-13 15:33 采纳率: 0%
浏览 30

随机森林的特征重要性为啥是0

请教各位,我在病例对照研究进行随机森林筛选特征时,输入以上的代码后,得出的特征重要性为0,这是为啥啊

import pandas as pd
import numpy as np
from sklearn.model_selection import GroupShuffleSplit
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance

# 加载数据
df = pd.read_csv("nested_case_control_data.csv")

# 按配对组划分训练集和验证集
splitter = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
train_idx, val_idx = next(splitter.split(df, groups=df["pair_id"]))
train_df, val_df = df.iloc[train_idx], df.iloc[val_idx]

# 定义候选特征
matched_vars = ["age", "sex"]
candidate_features = df.columns.difference(["pair_id", "status"] + matched_vars)
X_train = train_df[candidate_features]
y_train = train_df["status"]

# 训练模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 在验证集上评估特征重要性
X_val = val_df[candidate_features]
y_val = val_df["status"]
result = permutation_importance(model, X_val, y_val, n_repeats=10, random_state=42)

# 输出结果
mean_importance = result.importances_mean
sorted_idx = np.argsort(mean_importance)[::-1]
print("特征重要性排序(验证集):")
for idx in sorted_idx:
    print(f"{X_val.columns[idx]}: {mean_importance[idx]:.3f}")

  • 写回答

3条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-03-13 15:33
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    在病例对照研究中,如果得出的特征重要性为0,可能有以下几个原因:
    1. 样本量不足:随机森林需要大量的样本数据才能准确评估特征的重要性,如果样本量太小,可能导致得出的特征重要性为0。
    2. 特征选择不当:在定义候选特征时,需要确保选择的特征与目标变量有一定的相关性,如果选择的特征与目标变量没有明显关联,也可能导致特征重要性为0。
    3. 模型参数设置不当:随机森林模型的参数设置也会影响特征的重要性评估,例如n_estimators的值是否合适等。 如果以上问题都排除后,特征重要性仍然为0,可能需要进一步检查数据质量、数据预处理等环节,以确保模型能够充分利用数据中的信息。
    评论

报告相同问题?

问题事件

  • 修改了问题 3月13日
  • 创建了问题 3月13日