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
叶节点值的计算方式。可用选项为
constant
、linear
或mix
。默认为constant
。linear
和mix
选项仍处于实验阶段。- alphafloat
控制树深度的先验概率。应在 (0, 1) 区间内。
- betafloat
控制树叶节点数量的先验概率。应为正数。
- split_priorOptional[list[float]], 默认为 None。
正数列表,每个输入数据列一个。默认为 None,所有协变量具有相同的先验选择概率。
- split_rulesOptional[list[SplitRule]], 默认为 None
SplitRule 对象列表,每个输入数据列一个。允许对不同的列使用不同的拆分规则。默认为 ContinuousSplitRule。其他选项为 OneHotSplitRule 和 SubsetSplitRule,均用于分类变量。
- separate_treesOptional[bool], 默认为 False
当训练多棵树(通过设置形状参数)时,默认行为是学习一个联合树结构,并且每棵树只有不同的叶值。此标志强制训练完全独立的树结构。在许多情况下,这是不必要的,并且速度会慢得多,运行时间大致乘以维度数。
参数
alpha
和beta
参数化深度为 \(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 的关键字参数。最突出的是:
size
或dtype
。
- 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 轴