2013-07-19 29 views
0

我有数据样本是这样的:如何选择多维多项式回归模型?

1.5 2.3 4.2 0.9 
1.2 0.3 1.2 0.3 
0.5 1.3 2.2 1.5 
4.2 2.5 3.2 6.2 

让我们来定义

x1 = {1.5 2.3 4.2 0.9} 

x11 = 1.5x12 = 2.3x13 = 4.2y1 = 0.9(每留置权是一个示例)。


现在,我需要申请多项式回归对于这些数据,比方说,使用x适合y

我知道单x变量(一维)模型:

a*x1^3 + b*x1^2 + c*x1 + d = y 

在我的情况下,将原来是:

a*(x11, x12, x13, x14)^3 + b*(x11, x12, x13, x14)^2 + c*(x11, x12, x13, x14) + d = y 

的问题是,我怎么扩大(x11, x12, x13, x14)^3因为y是单维度?

回答

0

免责声明:我不是数学家,绝对不是那种东西的专家

短版:我认为这是不可能的。

加长版:

据我明白你想exponentiate载体(如(x11,x12,x13,x14)^3)的问题。

向量是matrices - 这里4维矢量可以看作是4x1矩阵。据我所知,矩阵的幂只“允许”的二次矩阵(nxn)。原因是commutative propertyA*B = B*A),其是用于not fulfilled非二次矩阵。

你在找什么可能是像“矢量函数的回归”和/或“表面拟合”。

我希望能有所帮助。

*约斯特

+2

对不起,但这个答案是无益的。你已经采取了MrRoy的一个单一的错误陈述,并以一种毫无意义的方式作出回应,但却没有涉及到关于建模的问题的真实观点。 – 2013-07-19 15:06:59

0

建模

你有之间如何从4个维度空间的单维空间去选择一个模式化的问题。您需要一个投影功能:p: - R - > R

投影功能将标记关于您的问题的部分知识。 如果您知道第一个参数比其他参数重要,那么您可以继续使用函数p:(x,y,z,t) - > x并忘记其他参数。一般来说,你没有这方面的知识。所以我们使用occam's razor(这是机器学习问题的一部分,这是模型的一部分),并保持模型尽可能简单但不多:

我选择的例子:(1)p:(x ,y,z,t) - > x + y + z + t

因此样本的每个参数都会以相同的方式对结果作出贡献;另一个解决方案可以是:(2)* p:(x,y,z,t) - > x * y * z * t *

但是,通过对数转换(2)您会看到类似于(1)

您选择的学习函数是f(x) - > a * x^3 + b * x^2 + c * x + d。您必须照顾您将投影应用于学习功能的方式。 底肥“P”的模式不给:

f(x,y,z,t) -> 
    a*(x + y + z + y)^3 + 
    b*(x + y + z + y)^2 + 
    c*(x + y + z + y)^1 + 
    d*(x + y + z + y)^0 

但:

f(x,y,z,t) -> 
    a*(x)^3 + b*(x)^2 + c*(x) + d + 
    a*(y)^3 + b*(y)^2 + c*(y) + d + 
    a*(z)^3 + b*(z)^2 + c*(z) + d + 
    a*(t)^3 + b*(t)^2 + c*(t) + d 

这是你的参数indepency的属性:应用上的每个参数的学习功能。链接参数的知识已被编码为每个参数之间“+”运算符选择的一部分。

所以,解决的参数学习问题(A1,B1,C1,D1)应该没问题的模型:

f(x,y,z,t) -> 
    a1*(x^3 + y^3 + z^3 + t^3) + 
    b1*(x^2 + y^2 + z^2 + t^2) + 
    c1*(x + y + z + t) + 
    d1 

解决

gnuplot这个问题是可以解决工作与fit function(第7章)。

f(x,y,z,t) = a1*(x**3 + y**3 + z**3 + t**3) + b1*(x**2 + y**2 + z**2 + t**2) + c1*(x + y + z + t) + d1 
fit f(x,y,t,u) 'mydata.dat' using 1:2:3:4 via a1, b1, c1, d1 

NB1:使用符合变量名 'Z' 时,保留其他的东西(帮助FIT);所以你必须在使用'fit'时重命名这个变量。

NB2:mydata.dat包含样本,其中每列由制表符分隔。您还必须为每个样本添加“y”的已知值。所以在'mydata.dat'中有5列。 (并且文件名必须以'.dat'结尾)。

所以这里是MYDATA.DAT文件我用:

1.5 2.3 4.2 0.9 1.0 
1.2 0.3 1.2 0.3 2.0 
0.5 1.3 2.2 1.5 3.0 
4.2 2.5 3.2 6.2 4.0 

正如你所看到的,我有添加“Y”栏,让每个样品的预期值。 然后在控制台上运行该工具:

gnuplot> f(x,y,z,t) = a1*(x**3 + y**3 + z**3 + t**3) + b1*(x**2 + y**2 + z**2 + t**2) + c1*(x + y + z + t) + d1 
gnuplot> fit f(x,y,t,u) 'mydata.dat' using 1:2:3:4 via a1, b1, c1, d1 

[many lines] 

After 9 iterations the fit converged. 
final sum of squares of residuals : 8.7617e-31 
abs. change during last iteration : -2.9774e-30 


Exactly as many data points as there are parameters. 
In this degenerate case, all errors are zero by definition. 

Final set of parameters 
======================= 

a1    = 0.340413  
b1    = -2.7489   
c1    = 6.44678   
d1    = -4.86178 

所以问题就解决了。

Gnuplot是开源的,所以看源 可能是一个很好的起点,如果你想自己编写它 。你也可以从gnuplot中的“​​help fit” 开始;它讲的是非线性最小二乘法 (NLLS) Marquardt-Levenberg algorithm

等价算法的实现并不需要所有这些数学知识(数学只需要速度)。 所有你需要做的是搜索算法(例如遗传学;在将它们写入二元组后,随机地改变参数a1-d1),其中优化的搜索标准是学习样本的误差的最小平方。