我试图用状态模型来计算非线性回归模型。特别是,我在学习这种错误的语法时遇到了问题。
是否有任何教程或例子,如何建立非线性的模型使用补丁的语法?
特别是,如何使用patsy来指定这个示例上的非线性模型(ols.html)?
先谢谢你
安迪
发布于 2013-06-15 17:57:50
Patsy对于拟合一般的非线性模型并没有多大用处,但是你链接到的页面上的模型是一种特殊的非线性模型--他们使用线性模型拟合方法(OLS),并将其应用于基本变量的非线性转换。一个标准且非常有用的技巧是将同一变量的多个非线性变换结合起来,以便有效地拟合更一般的曲线。对此,patsy非常有用。
您真正想知道的是如何在patsy中表示变量转换。这很容易。patsy的工作方式,给定一个像"x1 + x2:x3"这样的公式字符串,它扫描和解释特殊的patsy操作符,比如+和:,然后剩下的东西(x1,x2,x3)被解释为任意的python代码。所以你也可以写"np.sin(x1) + np.log(x2):x3"之类的东西。
唯一需要注意的是,如果您想要编写使用python操作符的转换,则与patsy运算符发生冲突。例如,如果您想在转换中使用+或**,那么您必须确保patsy本身不会解释这些内容,并将其留给python处理。这里的诀窍是patsy将忽略函数调用中出现的任何操作符(或者patsy不理解的其他复杂python表达式,但这主要是函数调用)。所以如果你写"x1 + np.log(x2 + x3)",patsy会把它当作两个预测因子,x1和np.log(x2 + x3) --你可以看到它解释了第一个+,但是它把第二个+留给python来解释。
但是,如果您想在一起添加两个变量并使用它们作为预测器,而不使用日志,那该怎么办?从我们已经知道的情况来看,我们可以想出一个简单的黑客:我们可以定义一个函数,它只返回它的输入(标识函数),然后调用它,比如:"x1 + I(x2 + x3)"。现在,对I(...)的函数调用将防止patsy看到第二个+,但是当我们实际计算术语I(x2 + x3)时,它将与x2 + x3相同。
更有帮助的是,patsy自动提供了一个名为I()的函数,它的工作方式是这样的,它总是可以使用的。
现在,您了解了在该页上复制示例所需了解的所有内容。对于第一个公式,公式是"x + I(x**2)"。第二个公式是"x + np.sin(x) + I((x - 5)**2)"。
对于最后一个例子,只使用patsy的内置分类编码支持是最简单的:"x + C(groups)"。(在这里,C是另一个特殊的内置函数,它允许我们调整分类数据的编码方式。我们用它来告诉patsy,尽管groups看起来像一个数字向量--它的值是0,1,2 --事实上,我们应该把它看作是绝对的,每个值代表一个不同的组。然后patsy应用其默认的分类编码)
https://stackoverflow.com/questions/16665833
复制相似问题