多元多项式数据的贝叶斯潜树模型

pytreecat的Python项目详细描述


treecat

构建状态最新版本doi

预期用途

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 .

快速启动

  1. 将数据格式化为 `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年代 > .. … … … < > <表>
  2. 生成两个架构文件 `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忽略任何带有空 键入字段。

  3. 将csv文件导入treecat的内部格式。我们会打电话给 dataset dataset.pkz (gzip pickle文件)。

    $ treecat import-data data.csv types.csv values.csv '' dataset.pkz
    

    (空参数""是 忽略)

  4. 在数据集上训练集成模型。这通常需要 对于1M单元数据集,大约15分钟。

    $ treecat train dataset.pkz model.pkz
    
  5. 将经过培训的模型加载到服务器中

    fromtreecat.servingimportserve_modelserver=serve_model('dataset.pkz','model.pkz')
  6. 对服务器运行查询。例如我们可以计算 费用

    samples=server.sample(100,evidence={'genre':'drama'})print(np.mean([s['rating']forsinsamples]))

    或通过潜在相关矩阵探索特征结构

    print(server.latent_correlation())
  7. < > >

调整超参数

treecat需要调整两个参数: 学习初始阶段 (如迭代次数)和 模型簇数 在每个特征之上的潜在类)。最简单的调节方法是 使用带有csv文件的 treecat.validate 模块进行网格搜索 示例参数。

`tuning.csv <;treecat/testdata/tuning.csv>;``的内容:

<表> < COLGROUP > < COL/> < COL/> <广告> 模型簇 学习初始阶段 < /广告> <正文> 2 2 4 .. … < > <表>
# 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 pytreecat
0

服务器接口

树梢 服务器 接口支持贝叶斯推理的原语和工具 检查潜在结构:

  • 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 pytreecat
1

我们避免在树中添加任意根,而是 将模型表示为具有重叠变量和 约束条件。

推理算法

这个包使用 亚样本退火塌陷吉布斯采样。有两块 采样的潜在状态:

  • 每个顶点(特征)的每一行的潜在类分配。 这些是由一个现场塌陷吉布斯采样器和 线性子样本退火计划。
  • 通过随机移除一个边和 替换它。因为删除一条边会将图分成两部分 连接的组件,唯一的替换位置是 重新连接图形的方法是可行的。

单点吉布斯采样器使用动态规划同时 为每行采样完整的潜在赋值向量。动态的 每次树结构改变时都会创建程序。 这个程序被不同的虚拟机解释为 目的(训练模型,从后面采样,计算日志 后面的概率)。用于训练的虚拟机是 使用numba编译jit。

许可证

版权所有(c)2017 Fritz Obermeyer。Treecat是根据 Apache2.0许可证

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java多线程秒表   java如何防止ConcurrentModificationException?   java我们如何实现组发送消息功能?   java如何从jQueryAjax调用调用SpringMVC控制器   类如何正确使用Java客户机/服务器类   java R无法解析为变量(新的安卓项目)   带有多过滤器选项的java Javafx TableView   udp Java DatagramSocket在几次运行后抛出SocketTimeoutException   swing Java GUI布局建议   java有办法在到期时重建ehcache吗   java在所有项目中运行所有测试类   使用Java HtmlEditorKit保存汉字   java螺旋菱形打印图案   变量为什么我的windows实例在我的游戏中无法识别。java类?