造型
作为一个建模问题,您必须在如何从 4 维空间到单维空间之间做出选择。你需要一个投影函数: p :- R 4 -> R
投影功能将标记您对问题的了解的一部分。如果您知道第一个参数比其他参数更重要,那么您可以继续使用函数p:(x,y,z,t) -> x 并忘记其他参数。一般来说,你没有这方面的知识。所以我们使用occam的剃刀(这是问题的建模部分的机器学习部分),并保持模型尽可能简单但仅此而已:
我选择示例: (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 函数解决这个问题(第 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 算法。
等效算法的实现并不真正需要所有这些数学知识(数学只需要速度)。您所要做的就是搜索算法(例如遗传学;在将参数写入二进制后随机更改参数 a1-d1),其中优化的搜索标准是学习样本的最小二乘误差。