econml.policy.PolicyTree
- class econml.policy.PolicyTree(*, criterion='neg_welfare', splitter='best', max_depth=None, min_samples_split=10, min_samples_leaf=5, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, min_impurity_decrease=0.0, min_balancedness_tol=0.45, honest=True)[source]
Bases:
econml._tree_exporter._SingleTreeExporterMixin
,econml.tree._tree_classes.BaseTree
福利最大化策略树。训练一棵树来最大化目标:\(1/n \sum_i \sum_j a_j(X_i) * y_{ij}\),其中 \(a(X)\) 被约束为只在一个坐标上取值为 1,在其他坐标上取值为零。这对应于一个策略优化问题。
- 参数
criterion ({
'neg_welfare'
}, default ‘neg_welfare’) – 准则类型splitter ({“best”}, default “best”) – 用于选择每个节点分割的策略。支持的策略是 “best”,用于选择最佳分割。
max_depth (int, default None) – 树的最大深度。如果为 None,则节点会一直扩展,直到所有叶子节点都是纯的,或者直到所有叶子节点包含的样本少于 min_samples_split。
min_samples_split (int or float, default 10) – 分割内部节点所需的最小样本数
如果为 int,则将 min_samples_split 视为最小样本数。
如果为 float,则 min_samples_split 是一个比例,并且 ceil(min_samples_split * n_samples) 是每个分割所需的最小样本数。
min_samples_leaf (int or float, default 5) – 叶子节点所需的最小样本数。只有当分割点在左右分支中至少留下
min_samples_leaf
个训练样本时,才会考虑该深度的分割点。这可能会平滑模型,尤其是在回归中。如果为 int,则将 min_samples_leaf 视为最小样本数。
如果为 float,则 min_samples_leaf 是一个比例,并且 ceil(min_samples_leaf * n_samples) 是每个节点所需的最小样本数。
min_weight_fraction_leaf (float, default 0.0) – 叶子节点所需的总权重(所有输入样本)的最小加权比例。未提供 sample_weight 时,样本权重相等。
max_features (int, float, {“auto”, “sqrt”, “log2”}, or None, default None) – 寻找最佳分割时要考虑的特征数量
如果为 int,则在每次分割时考虑 max_features 个特征。
如果为 float,则 max_features 是一个比例,并在每次分割时考虑 int(max_features * n_features) 个特征。
如果为 “auto”,则 max_features=n_features。
如果为 “sqrt”,则 max_features=sqrt(n_features)。
如果为 “log2”,则 max_features=log2(n_features)。
如果为 None,则 max_features=n_features。
注意:寻找分割不会停止,直到找到至少一个有效的节点样本分区,即使这需要实际检查超过
max_features
个特征。random_state (int, RandomState instance, or None, default None) – 控制估计器的随机性。每次分割时,特征总是随机排列的,即使
splitter
设置为"best"
。当max_features < n_features
时,算法会在每次分割时随机选择max_features
个特征,然后在其中找到最佳分割。但即使max_features=n_features
,找到的最佳分割也可能在不同的运行中有所不同。这是因为如果多个分割点的准则改进相同,则必须随机选择一个分割点。为了在拟合期间获得确定性行为,必须将random_state
固定为一个整数。min_impurity_decrease (float, default 0.0) – 如果分割导致的杂质减少大于或等于此值,则会分割节点。加权杂质减少的公式如下:
N_t / N * (impurity - N_t_R / N_t * right_impurity - N_t_L / N_t * left_impurity)
其中
N
是总样本数,N_t
是当前节点的样本数,N_t_L
是左子节点的样本数,N_t_R
是右子节点的样本数。如果传递了sample_weight
,则N
、N_t
、N_t_R
和N_t_L
都指加权总和。min_balancedness_tol (float in [0, .5], default .45) – 我们能容忍的分割不平衡程度。这强制要求每次分割在分割的每一侧至少留下 (.5 - min_balancedness_tol) 比例的样本;或者在 sample_weight 不为 None 时,留下总样本权重的比例。默认值确保父节点权重的至少 5% 落入分割的每一侧。设置为 0.0 表示没有平衡性要求,设置为 .5 表示完美平衡分割。为了使正式推断理论有效,这必须是远离零的任何正常数。
honest (bool, default True) – 数据是否应分成两个大小相等的样本,其中一个半样本用于确定每个节点的最佳分割,另一个样本用于确定每个节点的值。
- feature_importances_
基于特征创建的参数异质性数量的特征重要性。值越高,特征越重要。
- 类型
ndarray of shape (n_features,)
- tree_
底层的 Tree 对象。有关 Tree 对象的属性,请参阅
help(econml.tree._tree.Tree)
。- 类型
Tree 实例
- __init__(*, criterion='neg_welfare', splitter='best', max_depth=None, min_samples_split=10, min_samples_leaf=5, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, min_impurity_decrease=0.0, min_balancedness_tol=0.45, honest=True)[source]
方法
__init__
(*[, criterion, splitter, ...])apply
(X[, check_input])返回每个样本预测到的叶子节点的索引。
decision_path
(X[, check_input])返回树中的决策路径。
export_graphviz
([out_file, feature_names, ...])导出表示学习到的树模型的 graphviz dot 文件
feature_importances
([max_depth, ...])- 参数
max_depth (int, default 4) -- 深度大于 max_depth 的分割不用于此计算
fit
(X, y, *[, sample_weight, check_input])根据数据拟合树
返回决策树的深度。
返回决策树的叶子节点数量。
get_params
([deep])获取此估计器的参数。
重新生成用于 honest 树构建结构训练和评估分割的输入样本索引的 train_test_split。
init
()plot
([ax, title, feature_names, ...])将策略树导出到 matplotlib
predict
(X[, check_input])预测每个样本的最佳处理
predict_proba
(X[, check_input])预测推荐每种处理的概率
predict_value
(X[, check_input])预测每个样本组中每种处理的条件平均值
render
(out_file[, format, view, ...])将树渲染到文件
set_params
(**params)设置此估计器的参数。
属性
n_features_
node_dict_
tree_model_
- apply(X, check_input=True)
返回每个样本预测到的叶子节点的索引。
- 参数
X ({array_like} of shape (n_samples, n_features)) – 输入样本。在内部,它将被转换为
dtype=np.float64
check_input (bool, default True) – 允许绕过一些输入检查。除非你知道自己在做什么,否则不要使用此参数。
- 返回
X_leaves – 对于 X 中的每个数据点 x,返回 x 所在的叶子节点的索引。叶子节点的编号在
[0; self.tree_.node_count)
范围内,编号可能存在间隙。- 返回类型
array_like of shape (n_samples,)
- decision_path(X, check_input=True)
返回树中的决策路径。
- 参数
X ({array_like} of shape (n_samples, n_features)) – 输入样本。在内部,它将被转换为
dtype=np.float64
check_input (bool, default True) – 允许绕过一些输入检查。除非你知道自己在做什么,否则不要使用此参数。
- 返回
indicator – 返回一个节点指示器 CSR 矩阵,其中非零元素表示样本通过了这些节点。
- 返回类型
sparse matrix of shape (n_samples, n_nodes)
- export_graphviz(out_file=None, feature_names=None, treatment_names=None, max_depth=None, filled=True, leaves_parallel=True, rotate=False, rounded=True, special_characters=False, precision=3)
导出表示学习到的树模型的 graphviz dot 文件
- 参数
out_file (file object or str, optional) – 输出文件的句柄或名称。如果为
None
,则结果作为字符串返回。feature_names (list of str, optional) – 每个特征的名称。
treatment_names (list of str, optional) – 每种处理的名称
max_depth (int, optional) – 要绘制的最大树深度
filled (bool, default False) – 设置为
True
时,为节点着色以表示分类中的多数类别、回归中的值极值或多输出中的节点纯度。leaves_parallel (bool, default True) – 设置为
True
时,将所有叶子节点绘制在树的底部。rotate (bool, default False) – 设置为
True
时,将树从左到右而不是从上到下定向。rounded (bool, default True) – 设置为
True
时,绘制圆角节点框并使用 Helvetica 字体而不是 Times-Roman。special_characters (bool, default False) – 设置为
False
时,忽略特殊字符以确保 PostScript 兼容性。precision (int, default 3) – 每个节点的 impurity、threshold 和 value 属性中浮点数的精度位数。
- feature_importances(max_depth=4, depth_decay_exponent=2.0)[source]
- 参数
max_depth (int, default 4) – 深度大于 max_depth 的分割不用于此计算
depth_decay_exponent (double, default 2.0) – 每个分割对总得分的贡献按
1 / (1 + `depth`)**2.0
重新加权。
- 返回
feature_importances_ – 每个特征归一化的总参数异质性诱导重要性
- 返回类型
ndarray of shape (n_features,)
- fit(X, y, *, sample_weight=None, check_input=True)[source]
根据数据拟合树
- 参数
X ((n, n_features) array) – 用于分割的特征
y ((n, n_treatments) array) – m 种处理(包括基线处理)中每种处理的奖励
sample_weight ((n,) array, default None) – 样本权重
check_input (bool, defaul=True) – 是否检查输入参数的有效性。如果在生成此树的 forest 类中已检查过变量,应将其设置为 False 以提高并行执行的运行时间。
- 返回
self
- 返回类型
对象实例
- get_params(deep=True)
获取此估计器的参数。
- 参数
deep (bool, default=True) – 如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。
- 返回
params – 参数名称映射到其值。
- 返回类型
- get_train_test_split_inds()
重新生成用于 honest 树构建结构训练和评估分割的输入样本索引的 train_test_split。使用在
fit
时使用的相同随机种子,并重新生成索引。
- plot(ax=None, title=None, feature_names=None, treatment_names=None, max_depth=None, filled=True, rounded=True, precision=3, fontsize=None)
将策略树导出到 matplotlib
- 参数
ax (
matplotlib.axes.Axes
, 可选) – 绘制图表的坐标轴title (str, optional) – 打印在页面顶部的最终图表的标题。
feature_names (list of str, optional) – 每个特征的名称。
treatment_names (list of str, optional) – 每种处理的名称
max_depth (int, optional) – 要绘制的最大树深度
filled (bool, default False) – 设置为
True
时,为节点着色以表示分类中的多数类别、回归中的值极值或多输出中的节点纯度。rounded (bool, default True) – 设置为
True
时,绘制圆角节点框并使用 Helvetica 字体而不是 Times-Roman。precision (int, default 3) – 每个节点的 impurity、threshold 和 value 属性中浮点数的精度位数。
fontsize (int, optional) – 文本字体大小
- predict(X, check_input=True)
预测每个样本的最佳处理
- 参数
X ({array_like} of shape (n_samples, n_features)) – 输入样本。在内部,它将被转换为
dtype=np.float64
。check_input (bool, default True) – 允许绕过一些输入检查。除非你知道自己在做什么,否则不要使用此参数。
- 返回
treatment – 推荐的处理,即对于每个样本,奖励最大的处理索引
- 返回类型
array_like of shape (n_samples)
- predict_proba(X, check_input=True)
预测推荐每种处理的概率
- 参数
X ({array_like} of shape (n_samples, n_features)) – 输入样本。在内部,它将被转换为
dtype=np.float64
。check_input (bool, default True) – 允许绕过一些输入检查。除非你知道自己在做什么,否则不要使用此参数。
- 返回
treatment_proba – 每种处理推荐的概率
- 返回类型
array_like of shape (n_samples, n_treatments)
- predict_value(X, check_input=True)
预测每个样本组中每种处理的条件平均值
- 参数
X ({array_like} of shape (n_samples, n_features)) – 输入样本。在内部,它将被转换为
dtype=np.float64
。check_input (bool, default True) – 允许绕过一些输入检查。除非你知道自己在做什么,否则不要使用此参数。
- 返回
welfare – 树定义的每个样本组中,每种处理的条件平均福利
- 返回类型
array_like of shape (n_samples, n_treatments)
- render(out_file, format='pdf', view=True, feature_names=None, treatment_names=None, max_depth=None, filled=True, leaves_parallel=True, rotate=False, rounded=True, special_characters=False, precision=3)
将树渲染到文件
- 参数
out_file (要保存到的文件名)
format (str, default ‘pdf’) – 要渲染的文件格式;必须是 graphviz 支持的格式
view (bool, default True) – 是否使用默认应用程序打开渲染结果。
feature_names (list of str, optional) – 每个特征的名称。
treatment_names (list of str, optional) – 每种处理的名称
max_depth (int, optional) – 要绘制的最大树深度
filled (bool, default False) – 设置为
True
时,为节点着色以表示分类中的多数类别、回归中的值极值或多输出中的节点纯度。leaves_parallel (bool, default True) – 设置为
True
时,将所有叶子节点绘制在树的底部。rotate (bool, default False) – 设置为
True
时,将树从左到右而不是从上到下定向。rounded (bool, default True) – 设置为
True
时,绘制圆角节点框并使用 Helvetica 字体而不是 Times-Roman。special_characters (bool, default False) – 设置为
False
时,忽略特殊字符以确保 PostScript 兼容性。precision (int, default 3) – 每个节点的 impurity、threshold 和 value 属性中浮点数的精度位数。