多元多项式数据的贝叶斯潜树模型
pytreecat的Python项目详细描述
treecat
预期用途
treecat是机器学习和贝叶斯推理机 推论。treecat适合分析中型表格 具有分类值和序数值的数据,可能缺少 观察结果。
<表> < COLGROUP > < COL/> < COL/> <广告> treecat支持 < /广告> <正文> 功能类型 分类,序数 行(n) 1000-100千 特性(p) 10-1000 细胞(n×p) 10k-10m 类别 2-10英寸 最大序数 10微秒 漏掉了预约?安装
如果您已经安装了numba 应该能够简单地
pip install pytreecat
如果您是numba的新手,我们建议使用 miniconda 或 蟒蛇
如果要安装treecat进行开发,请克隆源 编写代码并创建新的conda env
git clone git@github.com:posterior/treecat cd treecat conda env create -f environment.3.yml source activate treecat3 pip install -e .
快速启动
将数据格式化为 `data.csv <;treecat/testdata/tiny_data.csv>;``带标题的文件 行。可以添加不使用的额外列。
`data.csv <;treecat/testdata/tiny_data.csv>;``的内容:
<表> < COLGROUP > < COL/> < COL/> < COL/> < COL/> <广告> 标题 类型 十年 评分 < /广告> <正文> 眩晕 惊悚片 20世纪50年代向上 家庭 2000年代 办公桌 喜剧 20世纪50年代 桑塔帕斯 家庭 2010年代 > .. … … … < > <表> 生成两个架构文件 `types.csv <;treecat/testdata/tiny嫒types.csv>;``和 `values.csv <;使用treecat的 猜测模式 命令:
$ treecat guess-schema data.csv types.csv values.csv
`types.csv <;treecat/testdata/tiny_types.csv>;``的内容:
<表> < COLGROUP > < COL/> < COL/> < COL/> < COL/> < COL/> <广告> 名称 键入 总计 唯一的 单重态 < /广告> <正文> 标题> 11<Td> 体裁 分类 十年 分类 评级 序数 < > <表> `values.csv <;treecat/testdata/tiny_values.csv>;``的内容:
<表> < COLGROUP > < COL/> < COL/> < COL/> <广告> 名称 值 计数 < /广告> <正文> 体裁 戏剧体裁 家庭 体裁 幻想 十年 20世纪50年代 .. … … < > <表> 您可以手动修复任何错误猜测的功能类型,或者 添加/删除要素值。treecat忽略任何带有空 键入字段。
将csv文件导入treecat的内部格式。我们会打电话给 dataset dataset.pkz (gzip pickle文件)。
$ treecat import-data data.csv types.csv values.csv '' dataset.pkz
(空参数""是 忽略)
在数据集上训练集成模型。这通常需要 对于1M单元数据集,大约15分钟。
$ treecat train dataset.pkz model.pkz
将经过培训的模型加载到服务器中
fromtreecat.servingimportserve_modelserver=serve_model('dataset.pkz','model.pkz')
对服务器运行查询。例如我们可以计算 费用
samples=server.sample(100,evidence={'genre':'drama'})print(np.mean([s['rating']forsinsamples]))
或通过潜在相关矩阵探索特征结构
print(server.latent_correlation())
< > >
调整超参数
treecat需要调整两个参数: 学习初始阶段 (如迭代次数)和 模型簇数 在每个特征之上的潜在类)。最简单的调节方法是 使用带有csv文件的 treecat.validate 模块进行网格搜索 示例参数。
`tuning.csv <;treecat/testdata/tuning.csv>;``的内容:
<表> < COLGROUP > < COL/> < COL/> <广告> 模型簇 学习初始阶段 < /广告> <正文> 2# This reads parameters from tuning.csv and dumps results to tuning.pkz
$ treecat.validate tune-csv dataset.pkz tuning.csv tuning.pkz
tune csv 命令将打印其结果,但如果您希望 以后,您可以
pip install pytreecat0
服务器接口
树梢 服务器 接口支持贝叶斯推理的原语和工具 检查潜在结构:
- server.sample(n,evidence=none) 从 可观测数据上的联合后验分布,可选 以证据为条件
- server.logprob(行,证据=无) 计算后验日志 数据 的概率,可选地取决于 证据
- server.median(证据) 计算l1损失最小化估计值, 以证据为条件
- server.observated_compensity() 计算 费解(一个软件 每一个观察到的特征的基数测量。
- server.潜伏的困惑() 计算潜伏的困惑 在每个观察到的功能后面分类。
- server.pentent_correlation() 计算潜在的 每对潜在变量之间的相关性。
- server.estimate_tree() 计算后验估计的最大值 潜在的树结构。
- 服务器.样本树(n) 从后部绘制样本 潜在树结构上的分布。
型号
Treecat的生成模型最接近Zhang和Poon的潜在树 分析[1],没有表treecat只修正了一个 每个观察到的节点的潜在节点。Treecat在历史上是 mansingha等人的crosscat模型,其中潜在节点("视图"或 "种类")是完全独立的。treecat地址相同 dunson和xing的高维分类分布 产品多项式模型的混合[3]地址。
设 v 为一组顶点(每个特征一个顶点)。设 c[v] 第v特征的维数。设 n 为 数据点。设k[n,v] 为特征观测数 v 在行 n (例如,1表示分类变量,0表示缺失 数据,或 k 表示最小值为0且最大值为 k )。
treecat是以下生成模型:
pip install pytreecat1
我们避免在树中添加任意根,而是 将模型表示为具有重叠变量和 约束条件。
推理算法
这个包使用 亚样本退火塌陷吉布斯采样。有两块 采样的潜在状态:
- 每个顶点(特征)的每一行的潜在类分配。 这些是由一个现场塌陷吉布斯采样器和 线性子样本退火计划。
- 通过随机移除一个边和 替换它。因为删除一条边会将图分成两部分 连接的组件,唯一的替换位置是 重新连接图形的方法是可行的。
单点吉布斯采样器使用动态规划同时 为每行采样完整的潜在赋值向量。动态的 每次树结构改变时都会创建程序。 这个程序被不同的虚拟机解释为 目的(训练模型,从后面采样,计算日志 后面的概率)。用于训练的虚拟机是 使用numba编译jit。
参考文献
- Nevin L.Zhang,Leonard K.M.Poon(2016年) 潜树 分析
- Vikash Mansingha,Patrick Shafto,Eric Jonas,Cap Petschulat,马克斯 Gasner,Joshua B.Tenenbaum(2015年) Crosscat:a full bayesian 高维非参数分析方法 数据
- David B.Dunson,传化星(2012) 非参数贝叶斯建模 多元范畴的 数据 < > >
许可证
版权所有(c)2017 Fritz Obermeyer。Treecat是根据 Apache2.0许可证