python - 决策树回归器使用较少的特征作为我的输入
问题描述
所以我定义了一个简单的回归模型如下:
from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import LabelBinarizer
from sklearn.pipeline import Pipeline
from sklearn import tree
max_depth = 3
min_samples_leaf = 100
X = df[categorical]
y = df['target_value']
mapper = DataFrameMapper(
[(i,LabelBinarizer()) for i in categorical]
)
mapper.fit(X)
X_mapped = mapper.transform(X)
model = tree.DecisionTreeRegressor(max_depth=max_depth,min_samples_leaf=min_samples_leaf)
model.fit(X_mapped,y)
现在我想提取学习特征的名称以进行有意义的可视化。我可以提取特征的名称,如下所示。这给了我一个包含 223 个功能的列表。然而,问题是我的模型只使用了 218 个特征(model.n_features_
给出 218 个)。这意味着 5 个特征已经消失,现在我无法知道在决策树中进行了哪些拆分,因为不确定模型没有使用哪些变量。
names = []
for feature in mapper.features:
try:
for feature_value in feature[1].classes_:
names.append(feature[0]+'_'+feature_value)
except:
names.append(feature[0])
当我输入 223 时,这棵树怎么可能只训练 218 个特征?以及我应该如何命名我的拆分功能?不冒给出错误结论的风险(即声称一个特性很重要,但它被错误地命名)
编辑:我发现映射器将 X 数据转换为 218 个特征,但给了我一个包含 223 个名称的列表。所以“问题”在于映射器。
解决方案
每当 LabelBinarizer(在本例中为 de mapper)遇到具有 2 个唯一值的分类值时,它会将其捕获在一列中(0 和 1 都表示该列的一个类)。这导致 1 列具有两个特征名称。我通过将名称收集功能编辑为:
names = []
for feature in model['mapper'].features:
try:
if len(feature[1].classes_) == 2:
names.append(feature[0]+'_'+feature[1].classes_[1])
else:
for feature_value in feature[1].classes_:
names.append(feature[0]+'_'+feature_value)
except:
names.append(feature[0])
推荐阅读
- flutter - 有没有办法在颤振中创建通话录音应用程序?
- javascript - 如何在javascript中强制字符串中的空格
- security - 综合参考企业安全架构图
- apache-kafka - 如何停止 mongodb-kafka 连接器停止
- ios - 如何让 UICollectionView 连续水平滚动而不是创建第二行?
- google-bigquery - 谷歌大查询与 PowerBI 错误连接
- javascript - 复选框 ng-model 问题
- r - 使用 Nginx 上的 R Shiny 服务器将无扩展名 URL 重写为 .Rmd
- java - 两个表的组合填充距离D算法
- javascript - 如果另一个元素设置为显示,如何选择元素:flex; 用 JS