【问题标题】:How to choose model for multi-dimension polynomial regression?如何为多维多项式回归选择模型?
【发布时间】:2013-07-19 06:28:09
【问题描述】:

我有这样的数据样本:

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 fit 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

问题是,既然y是单维的,我该如何扩展(x11, x12, x13, x14)^3

【问题讨论】:

    标签: math machine-learning regression polynomial-math


    【解决方案1】:

    免责声明:我不是数学家,也绝对不是这方面的专家。

    短版:我认为不可能。

    加长版:

    据我了解,您尝试对向量求幂的问题(例如(x11,x12,x13,x14)^3)。

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

    您要查找的内容可能类似于“矢量函数回归”和/或“曲面拟合”。

    希望对你有所帮助。

    *约斯特

    【讨论】:

    • 对不起,这个答案没有帮助。您只接受了 MrRoy 的一个错误陈述,并以一种毫无意义的方式做出了回应,同时没有触及问题的真正重点,即关于建模。
    【解决方案2】:

    建模

    作为一个建模问题,您必须在如何从 4 维空间到单维空间之间做出选择。你需要一个投影函数:p :- R4 -> 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
    

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

    因此,解决参数 (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 :当使用 fit 时,变量名 '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 中;它谈到了非线性最小二乘 (NLLS) Marquardt-Levenberg algorithm.

    等效算法的实现并不需要所有这些数学知识(数学只需要速度)。 您所要做的就是一个搜索算法(例如遗传学;在将参数写入二进制后随机更改参数 a1-d1),其中优化的搜索标准是学习样本的最小二乘误差。

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 1970-01-01
      • 2017-04-06
      • 2018-05-07
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多