API 参考#

此参考提供了 PyMC-BART 当前版本中所有模块、类和方法的详细文档。

pymc_bart#

class pymc_bart.BART(name: str, X: Union[ndarray[Any, dtype[_ScalarType_co]], TensorVariable], Y: Union[ndarray[Any, dtype[_ScalarType_co]], TensorVariable], m: int = 50, alpha: float = 0.95, beta: float = 2.0, response: str = 'constant', split_prior: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, split_rules: Optional[list[pymc_bart.split_rules.SplitRule]] = None, separate_trees: Optional[bool] = False, **kwargs)#

贝叶斯加法回归树分布。

表示树的求和的分布

XPyTensor 变量、Pandas/Polars DataFrame 或 Numpy 数组

协变量矩阵。

YPyTensor 变量、Pandas/Polar DataFrame/Series 或 Numpy 数组

响应向量。

mint

树的数量。

responsestr

叶节点值的计算方式。可用选项为 constantlinearmix。默认为 constantlinearmix 选项仍处于实验阶段。

alphafloat

控制树深度的先验概率。应在 (0, 1) 区间内。

betafloat

控制树叶节点数量的先验概率。应为正数。

split_priorOptional[list[float]], 默认为 None。

正数列表,每个输入数据列一个。默认为 None,所有协变量具有相同的先验选择概率。

split_rulesOptional[list[SplitRule]], 默认为 None

SplitRule 对象列表,每个输入数据列一个。允许对不同的列使用不同的拆分规则。默认为 ContinuousSplitRule。其他选项为 OneHotSplitRule 和 SubsetSplitRule,均用于分类变量。

separate_treesOptional[bool], 默认为 False

当训练多棵树(通过设置形状参数)时,默认行为是学习一个联合树结构,并且每棵树只有不同的叶值。此标志强制训练完全独立的树结构。在许多情况下,这是不必要的,并且速度会慢得多,运行时间大致乘以维度数。

参数 alphabeta 参数化深度为 \(d \: (= 0, 1, 2,...)\) 的节点为非终端节点的概率,由 \(\alpha(1 + d)^{-\beta}\) 给出。默认值是 \(\alpha = 0.95\)\(\beta = 2\)

这是 Chipman Et al. 推荐的先验。BART:贝叶斯加法回归树,链接

classmethod dist(*params, **kwargs)#

创建与 cls 分布对应的张量变量。

dist_params类数组

RandomVariable Op 的输入。

shapeint、tuple、Variable,可选

新 RV 的每个维度的大小元组。

**kwargs

将转发到 PyTensor RV Op 的关键字参数。最突出的是:sizedtype

rvTensorVariable

创建的随机变量张量。

logp(x, *inputs)#

计算对数概率。

x: 数值型,TensorVariable

计算对数概率的值。

TensorVariable

class pymc_bart.ContinuousSplitRule#

标准连续拆分规则:选择一个轴值,并根据变量是小于还是大于所选值进行拆分。

class pymc_bart.OneHotSplitRule#

选择单个分类值,并根据变量是否为该值进行分支

class pymc_bart.PGBART(*args, **kwargs)#

粒子吉布斯 BART 采样步骤。

vars: list

采样器的值变量列表

num_particlestuple

粒子数。默认为 10

batchtuple

每个步骤拟合的树的数量。第一个元素是调优期间的批大小,第二个元素是调优后的批大小。默认为 (0.1, 0.1),表示调优期间和调优后 m 棵树的 10%。

model: PyMC 模型

采样步骤的可选模型。默认为 None(取自上下文)。

astep(_)#

在扁平化和连接的参数空间中执行单个采样步骤。

static competence(var: Distribution, has_grad: bool) Competence#

PGBART 仅适用于 BART 分布。

get_particle_tree(particles: list[pymc_bart.pgbart.ParticleTree], normalized_weights: ndarray[Any, dtype[_ScalarType_co]]) tuple[pymc_bart.pgbart.ParticleTree, pymc_bart.tree.Tree]#

采样一个新的粒子和关联的树

init_particles(tree_id: int, odim: int) list[pymc_bart.pgbart.ParticleTree]#

初始化粒子。

normalize(particles: list[pymc_bart.pgbart.ParticleTree]) float#

使用 softmax 获取 normalized_weights。

resample(particles: list[pymc_bart.pgbart.ParticleTree], normalized_weights: ndarray[Any, dtype[_ScalarType_co]]) list[pymc_bart.pgbart.ParticleTree]#

对除第一个粒子外的所有粒子使用系统重采样

确保仅在需要时复制粒子。

stats_dtypes_shapes: dict[str, tuple[type, list]] = {'tune': (<class 'bool'>, []), 'variable_inclusion': (<class 'object'>, [])}#

将统计名称映射到 dtype 和形状。

形状按以下方式解释: - [] 是标量。 - [3,] 是长度为 3 的向量。 - [4, None] 是一个具有 4 行和动态列数的矩阵。 - None 是稀疏统计量(即并非总是存在)或具有不同 ndim 的 NumPy 数组。

systematic(normalized_weights: ndarray[Any, dtype[_ScalarType_co]]) ndarray[Any, dtype[int64]]#

系统重采样。

返回范围 0, …, len(normalized_weights) 中的索引

注意:改编自 nchopin/particles

update_weight(particle: ParticleTree, odim: int) None#

更新粒子的权重。

class pymc_bart.SubsetSplitRule#

选择分类值的随机子集,并根据是否属于该集合进行分支。这是 Sameer K. Deshpande 采用的方法。flexBART:具有分类预测变量的灵活贝叶斯回归树。arXiv,链接

pymc_bart.compute_variable_importance(idata: InferenceData, bartrv: Variable, X: ndarray[Any, dtype[_ScalarType_co]], method: str = 'VI', fixed: int = 0, samples: int = 50, random_seed: Optional[int] = None) dict[str, object]#

从 BART 后验估计变量重要性。

idataInferenceData

InferenceData 包含 sample_stats 组中 BART_trees 的集合

bartrvBART 随机变量

包含它的模型拟合后的 BART 变量。

Xnpt.NDArray

协变量矩阵。

methodstr

用于对变量进行排序的方法。可用选项为“VI”(默认)、“backward”和“backward_VI”。R 平方将按照此排名计算。“VI”计算每个变量在树的后验分布中被包含的次数。“backward”使用基于 R 平方的后向搜索。“backward_VI”将两种方法结合起来,后向搜索排除变量包含度最低的 fixed 个变量。“VI”是最快的方法,而“backward”是最慢的方法。

fixedOptional[int]

在后向搜索中要固定的变量数。默认为 None。必须大于 0 且小于变量数。如果方法为“VI”或“backward”,则忽略。

samplesint

用于计算变量子集相关性的预测数。默认为 50

random_seedOptional[int]

用于从后验采样的 random_seed。默认为 None。

vi_results: 字典

pymc_bart.get_variable_inclusion(idata, X, labels=None, to_kulprit=False)#

从 BART 模型获取归一化的变量包含度。

idataInferenceData

InferenceData 包含 sample_stats 组中 BART_trees 的集合

Xnpt.NDArray

协变量矩阵。

labelsOptional[list[str]]

协变量名称列表。如果 X 是 DataFrame,则协变量的名称将从其中获取,并且将忽略此参数。

to_kulpritbool

如果为 True,则该函数将返回包含变量名称的列表的列表。此列表可以作为路径传递给 Kulprit 的 project 方法。默认为 False。

VI_normnpt.NDArray

归一化的变量包含度。

labelslist[str]

协变量名称列表。

pymc_bart.plot_convergence(idata: InferenceData, var_name: Optional[str] = None, kind: str = 'ecdf', figsize: Optional[]] = None, ax=None) list[matplotlib.axes._axes.Axes]#

绘制收敛诊断图。

idataInferenceData

InferenceData 对象,包含后验样本。

var_nameOptional[str]

要绘制的 BART 变量的名称。默认为 None。

kindstr

要显示的图表类型。选项为 “ecdf”(默认)和 “kde”。

figsizeOptional[tuple[float, float]], 默认为 None。

图形大小。默认为 None。

axmatplotlib 轴

要在其上绘制的轴。默认为 None。

list[ax] : matplotlib 轴

pymc_bart.plot_ice(bartrv: Variable, X: ndarray[Any, dtype[_ScalarType_co]], Y: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, var_idx: Optional[list[int]] = None, var_discrete: Optional[list[int]] = None, func: Optional[Callable] = None, centered: Optional[bool] = True, samples: int = 100, instances: int = 30, random_seed: Optional[int] = None, sharey: bool = True, smooth: bool = True, grid: str = 'long', color='C0', color_mean: str = 'C0', alpha: float = 0.1, figsize: Optional[tuple[float, float]] = None, smooth_kwargs: Optional[dict[str, Any]] = None, ax: Optional[Axes] = None) list[matplotlib.axes._axes.Axes]#

个体条件期望图。

bartrvBART 随机变量

包含它的模型拟合后的 BART 变量。

Xnpt.NDArray

协变量矩阵。

YOptional[npt.NDArray], 默认为 None。

响应向量。

var_idxOptional[list[int]], 默认为 None。

用于计算 pdp 或 ice 的协变量索引列表。

var_discreteOptional[list[int]], 默认为 None。

被视为离散的协变量索引列表。

funcOptional[Callable], 默认为 None。

应用于预测的任意函数。默认为恒等函数。

centeredbool

如果为 True,则结果以在 xs_interval 中的最低值处评估的偏响应为中心。默认为 True。

samplesint

预测中使用的后验样本数。默认为 100

instancesint

要绘制的 X 实例数。默认为 30。

random_seedOptional[int], 默认为 None。

用于从后验抽样的种子。默认为 None。

shareybool

控制 y 轴之间属性的共享。默认为 True。

smoothbool

如果为 True,结果将通过首先计算数据在规则网格上的线性插值,然后将 Savitzky-Golay 滤波器应用于插值数据来平滑。默认为 True。

gridstr 或 tuple

如何排列子图。默认为 “long”,一个子图在另一个子图下方。其他选项包括 “wide”,一个子图挨着另一个子图,或指示行数和列数的元组。

colormatplotlib 有效颜色

用于绘制 pdp 或 ice 的颜色。默认为 “C0”

color_meanmatplotlib 有效颜色

用于绘制平均 pdp 或 ice 的颜色。默认为 “C0”。

alphafloat

透明度级别,应在 [0, 1] 区间内。

figsizetuple

图形尺寸。如果为 None,则将自动定义。

smooth_kwargsdict

修改 Savitzky-Golay 滤波器的其他关键字。有关详细信息,请参阅 scipy.signal.savgol_filter()。

axaxes

Matplotlib 轴。

axes: matplotlib 轴

pymc_bart.plot_pdp(bartrv: Variable, X: ndarray[Any, dtype[_ScalarType_co]], Y: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, xs_interval: str = 'quantiles', xs_values: Optional[Union[int, list[float]]] = None, var_idx: Optional[list[int]] = None, var_discrete: Optional[list[int]] = None, func: Optional[Callable] = None, samples: int = 200, ref_line: bool = True, random_seed: Optional[int] = None, sharey: bool = True, smooth: bool = True, grid: str = 'long', color='C0', color_mean: str = 'C0', alpha: float = 0.1, figsize: Optional[tuple[float, float]] = None, smooth_kwargs: Optional[dict[str, Any]] = None, ax: Optional[Axes] = None) list[matplotlib.axes._axes.Axes]#

偏依赖图。

bartrvBART 随机变量

包含它的模型拟合后的 BART 变量。

Xnpt.NDArray

协变量矩阵。

YOptional[npt.NDArray], 默认为 None。

响应向量。

xs_intervalstr

用于计算 X 值以评估预测函数的方法。“linear”,X 范围内的均匀间隔值。“quantiles”,评估在 X 的指定分位数处完成。“insample”,评估在 X 的值处完成。对于离散变量,这些选项被省略。

xs_valuesOptional[Union[int, list[float]]], 默认为 None。

用于评估预测函数的 X 值。如果 xs_interval="linear",则为均匀间隔网格中的点数。如果 xs_interval="quantiles",则为要计算的分位数或分位数序列,必须介于 0 和 1 之间(含 0 和 1)。当 xs_interval="insample" 时忽略。

var_idxOptional[list[int]], 默认为 None。

用于计算 pdp 或 ice 的协变量索引列表。

var_discreteOptional[list[int]], 默认为 None。

被视为离散的协变量索引列表。

funcOptional[Callable], 默认为 None。

应用于预测的任意函数。默认为恒等函数。

samplesint

预测中使用的后验样本数。默认为 200

ref_linebool

如果为 True,则在偏依赖的平均值处绘制参考线。默认为 True。

random_seedOptional[int], 默认为 None。

用于从后验抽样的种子。默认为 None。

shareybool

控制 y 轴之间属性的共享。默认为 True。

smoothbool

如果为 True,结果将通过首先计算数据在规则网格上的线性插值,然后将 Savitzky-Golay 滤波器应用于插值数据来平滑。默认为 True。

gridstr 或 tuple

如何排列子图。默认为 “long”,一个子图在另一个子图下方。其他选项包括 “wide”,一个子图挨着另一个子图,或指示行数和列数的元组。

colormatplotlib 有效颜色

用于绘制 pdp 或 ice 的颜色。默认为 “C0”

color_meanmatplotlib 有效颜色

用于绘制平均 pdp 或 ice 的颜色。默认为 “C0”。

alphafloat

透明度级别,应在 [0, 1] 区间内。

figsizetuple

图形尺寸。如果为 None,则将自动定义。

smooth_kwargsdict

修改 Savitzky-Golay 滤波器的其他关键字。有关详细信息,请参阅 scipy.signal.savgol_filter()。

axaxes

Matplotlib 轴。

axes: matplotlib 轴

pymc_bart.plot_scatter_submodels(vi_results: dict, func: Optional[Callable] = None, submodels: Optional[Union[list[int], ndarray]] = None, grid: str = 'long', labels: Optional[list[str]] = None, figsize: Optional[tuple[float, float]] = None, plot_kwargs: Optional[dict[str, Any]] = None, ax: Optional[Axes] = None) list[matplotlib.axes._axes.Axes]#

绘制子模型预测与参考模型预测的散点图。

vi_results字典

使用 compute_variable_importance 计算的字典

funcOptional[Callable], 默认为 None。

应用于预测的任意函数。默认为恒等函数。

submodelsOptional[Union[list[int], np.ndarray]]

要绘制的子模型索引列表。默认为 None,绘制所有变量。索引对应于 compute_variable_importance 计算的顺序。例如,submodels=[0,1] 将绘制最重要的两个变量。submodels=[1,0] 是等效的,因为值在使用前会进行排序。

gridstr 或 tuple

如何排列子图。默认为 “long”,一个子图在另一个子图下方。其他选项包括 “wide”,一个子图挨着另一个子图,或指示行数和列数的元组。

labelsOptional[list[str]]

协变量名称列表。

plot_kwargsdict

绘图的附加关键字参数。默认为 None。有效键为:- marker_scatter:散点图的 matplotlib 有效标记 - color_scatter:散点图的 matplotlib 有效颜色 - alpha_scatter:散点图的 matplotlib 有效 alpha 值 - color_ref:45 度线的 matplotlib 有效颜色 - ls_ref:参考线的 matplotlib 有效线型

axesaxes

Matplotlib 轴。

axes: matplotlib 轴

pymc_bart.plot_variable_importance(vi_results: dict, submodels: Optional[Union[list[int], ndarray, tuple[int, ...]]] = None, labels: Optional[list[str]] = None, figsize: Optional[tuple[float, float]] = None, plot_kwargs: Optional[dict[str, Any]] = None, ax: Optional[Axes] = None)#

从 BART 后验估计变量重要性。

vi_results: 字典

使用 compute_variable_importance 计算的字典

submodelsOptional[Union[list[int], np.ndarray]]

要绘制的子模型索引列表。默认为 None,绘制所有变量。索引对应于 compute_variable_importance 计算的顺序。例如,submodels=[0,1] 将绘制最重要的两个变量。submodels=[1,0] 是等效的,因为值在使用前会进行排序。

labelsOptional[list[str]]

协变量名称列表。如果 X 是 DataFrame,则协变量的名称将从其中获取,并且将忽略此参数。

plot_kwargsdict

绘图的附加关键字参数。默认为 None。有效键为:- color_r2:误差线的 matplotlib 有效颜色 - marker_r2:平均 R 平方的 matplotlib 有效标记 - marker_fc_r2:平均 R 平方的 matplotlib 有效标记面颜色 - ls_ref:参考线的 matplotlib 有效线型 - color_ref:参考线的 matplotlib 有效颜色 - rotation:float,x 轴标签的旋转角度。默认为 0。

axaxes

Matplotlib 轴。

axes: matplotlib 轴

pymc_bart.plot_variable_inclusion(idata, X, labels=None, figsize=None, plot_kwargs=None, ax=None)#

绘制来自 BART 模型的归一化变量包含图。

idataInferenceData

InferenceData 包含 sample_stats 组中 BART_trees 的集合

Xnpt.NDArray

协变量矩阵。

labelsOptional[list[str]]

协变量名称列表。如果 X 是 DataFrame,则协变量的名称将从其中获取,并且将忽略此参数。

figsizetuple

图形尺寸。如果为 None,则将自动定义。

plot_kwargsdict

绘图的附加关键字参数。默认为 None。有效键为:- color:VI 的 matplotlib 有效颜色 - marker:VI 的 matplotlib 有效标记 - ls:VI 线的 matplotlib 有效线型 - rotation:float,x 轴标签的旋转角度

axaxes

Matplotlib 轴。

axes: matplotlib 轴