混合效应随机林
merf的Python项目详细描述
混合效应随机森林
此存储库包含混合效果随机林(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