2013-07-19 97 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),其中優化的搜索標準是學習樣本的誤差的最小平方。