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,则 NN_tN_t_RN_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,)

max_features_

推断出的 max_features 值。

类型

int

n_features_in_

执行 fit 时特征的数量。

类型

int

n_samples_

执行 fit 时训练样本的数量。

类型

int

honest_

执行 fit 时是否启用了 honesty

类型

int

tree_

底层的 Tree 对象。有关 Tree 对象的属性,请参阅 help(econml.tree._tree.Tree)

类型

Tree 实例

policy_value_

推荐策略实现的值

类型

float

always_treat_value_

对所有样本都进行处理的策略的值

类型

float

__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_depth()

返回决策树的深度。

get_n_leaves()

返回决策树的叶子节点数量。

get_params([deep])

获取此估计器的参数。

get_train_test_split_inds()

重新生成用于 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)

设置此估计器的参数。

属性

feature_importances_

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_depth()

返回决策树的深度。树的深度是根节点与任何叶子节点之间的最大距离。

返回

self.tree_.max_depth – 树的最大深度。

返回类型

int

get_n_leaves()

返回决策树的叶子节点数量。

返回

self.tree_.n_leaves – 叶子节点数量。

返回类型

int

get_params(deep=True)

获取此估计器的参数。

参数

deep (bool, default=True) – 如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。

返回

params – 参数名称映射到其值。

返回类型

dict

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 属性中浮点数的精度位数。

set_params(**params)

设置此估计器的参数。

此方法适用于简单估计器以及嵌套对象(例如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,以便可以更新嵌套对象的每个组件。

参数

**params (dict) – 估计器参数。

返回

self – 估计器实例。

返回类型

估计器实例