建模
你有之間如何從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