如何查看Scikit-learn中随机森林各树的Bootstrapped采样数据集?
查看Scikit-learn随机森林中单棵树的Bootstrapped数据集
获取采样的样本行(Bootstrap样本)
Scikit-learn的随机森林模型并没有直接暴露每棵树的Bootstrap样本索引,但可以通过间接方法筛选出被采样的样本行:
- 借助模型的
estimators_属性获取单棵决策树,再用apply()方法区分被采样/未被采样的样本:from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_iris import numpy as np # 训练随机森林示例 X, y = load_iris(return_X_y=True) rf = RandomForestClassifier(n_estimators=3, random_state=42) rf.fit(X, y) # 提取第一棵树的Bootstrap样本索引 target_tree = rf.estimators_[0] # apply()返回样本在树中的叶节点索引,未被采样的样本返回-1 leaf_ids = target_tree.apply(X) bootstrap_sample_indices = np.where(leaf_ids != -1)[0] print("第一棵树使用的样本行索引:", bootstrap_sample_indices) - 逻辑:未被Bootstrap采样选中的样本,不会参与决策树构建,因此在
apply()中会返回-1,以此可筛选出被采样的样本。
获取采样的特征子集
随机森林构建每棵树时会随机选择特征子集,可通过决策树的结构直接提取:
- 利用树的
tree_.feature属性,过滤掉代表叶子节点的-2值,去重后得到该树用到的特征索引:# 提取第一棵树用到的特征 used_feature_indices = np.unique(target_tree.tree_.feature[target_tree.tree_.feature != -2]) print("第一棵树使用的特征索引:", used_feature_indices)
补充说明
- Bootstrap采样是有放回采样,所以得到的样本行中可能存在重复的原始样本。
- 上述方法适配Scikit-learn 0.22及以上版本,不同版本API可能存在细微差异。
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

