建模
你有之间如何从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),其中优化的搜索标准是学习样本的误差的最小平方。
对不起,但这个答案是无益的。你已经采取了MrRoy的一个单一的错误陈述,并以一种毫无意义的方式作出回应,但却没有涉及到关于建模的问题的真实观点。 – 2013-07-19 15:06:59