混合效应随机林

merf的Python项目详细描述


混合效应随机森林

CircleCI

此存储库包含混合效果随机林(merf)算法的纯python实现。它可以被开箱即用来拟合merf模型并用它进行预测。 在thisblogpost中阅读更多关于merf的信息。

MERF模型

merf模型是:

y_i=f(x_i)+z_i*b_i+e_i

b_i~n(0,d)

e_i~n(0,r_i)

对于每个集群,总共n个集群中的i个集群。

在上面:

  • y_i——第一类反应的(n_i x 1)向量,在训练时给出。
  • x_i——与y_i相关的(n_i x p)固定效应协变量。这些是在训练时给出的。
  • z_i——与y_i相关的(n_i x q)随机效应协变量。这些是在训练时给出的。
  • E_i——第一类错误的(n_i x 1)向量。这是未知的。
  • 我是群集ID。这是在训练时提供的。

merf中的学习参数为:

  • f()——这是一个随机森林,它模拟了从固定效应协变量到响应的潜在非线性映射。这在所有集群中都很常见。
  • d——这是正态分布的协方差,从中可以得出每个b_i。这在所有集群中都很常见。
  • sigma^2——E_i的方差,假设为白色。这在所有集群中都很常见。

注意,merf模型的一个关键假设是随机效应是linear。虽然,这在某些方面是有限的,但它对许多问题仍然有广泛的用处。总比完全不模拟随机效应要好。

本文中实现的算法由ahlem hajjem、francois bellavance和denis larocque开发,并发表在一篇论文here中。非常感谢ahlem和denis提供了r引用并帮助调试此代码。请注意,已发表的论文在sigma^2的更新公式中有一个小错误,在这里的源代码中进行了更正。

使用代码

merf代码是在scikit学习估计器之后建模的。要使用,您可以实例化一个merf对象(无论是否指定参数——默认值是合理的)。然后使用训练数据拟合模型。拟合后,您可以根据数据预测响应,可以是来自已知(训练集中的群集)或新(训练集中没有群集)群集。

例如:

> from merf import MERF
> merf = MERF()
> merf.fit(X_train, Z_train, clusters_train, y_train)
> y_hat = merf.predict(X_test, Z_test, clusters_test)

注意到训练是缓慢的,因为潜在期望最大化(EM)算法需要许多调用随机森林拟合方法。这就是说,如果广义对数似然(gll)停止显著改善,这个implemtataion将提前终止em算法。

在当前的实现中,固定效果学习者是一个随机的前向学习者,但理论上em算法可以用于任何学习者。我们希望将来的版本也能像梯度增强树甚至深层神经网络一样。

浏览源代码

\src目录包含所有源代码:

  • merf.py是包含merf类的键模块。它是在包级别导入的。
  • tests.py包含一些简单的单元测试。
  • utils.py包含一个类,用于生成可用于测试merf准确性的合成数据。实现的进程与此paper中的相同。

\notebooks目录包含一些有用的笔记本,向您展示如何使用代码和评估merf性能。实现的大多数技术与本文中的技术相同paper

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

推荐PyPI第三方库


热门话题
java如何在tex文件中以读/写方式拆分一行?   java Ping选项s的值不正确,有效范围为1到4   java我需要在Eclipse中设置/配置哪些环境变量(对于SeleniumWebDriver)?如果我不设置/配置它们呢?   java将经过筛选的第二个表的两列映射到一个集合成员   垃圾收集Java:增加YoungGen大小以提高GC性能   JavaHibernate对复杂连接执行两个查询,而不是一个查询   foreach Java 8:映射而非简单循环   java指定ThreadPoolExecutor问题   java如何解决此错误:二进制运算符“&&”的操作数类型错误   JavaJPA+MariaDB:排序规则如何影响unicode支持?   在循环中RxJava中变量延迟前后的java执行函数   java初始化数组中的数组   java在LWJGL中绘制四边形时,我做错了什么?   java错误找不到符号变量id   java组织。阿帕奇。log4j。jmx不具备生产质量?(log4j 1.2)