2014-03-26 124 views
0

Reffering的問題: Multiple Regression with math.net多元線性迴歸math.net 2.6 Fit.LinearMultiDim

@克里斯托夫 - ruegg 你能提供給我使用Fit.LinearMultiDim解決迴歸的一個例子。

var xdata = new DenseMatrix(
      new double[,]{{1, 36, 66, 45, 32}, 
         {1, 37, 68, 12, 2}, 
         {1, 47, 64, 78, 34}, 
         {1, 32, 53, 56, 32}, 
         {1, 1, 101, 24, 90}}); 

      var ydata = new double[] { 15, 20, 25, 55, 95 }; 

      var y = new DenseVector(ydata); 

      var p = xdata.QR().Solve(y); // Fit ? 

有沒有更簡單的方法來實現這一點?

回答

2

我不知道這是如何與發佈的示例代碼相關,但我可以肯定地顯示使用Fit.LinearMultiDim的示例。根據內聯文檔,此例程通過最小二乘法擬合一組形式爲(x=[x1,x2,..,xk], y)的多維點,以兩個相同長度的數組(一個包含x值數組,一個y值)組織到一個線性任意功能的組合。我們假設我們去了N個地方並測量了海拔高度,結果產生了N(x,y,z)元組。現在我們想通過一個簡單的參數模型來逼近景觀。通過目測,我們計算過,有可能由tanh來近似兩個平臺,我們選擇如下的線性模型:

z -> p0 + p1*tanh(x) + p2*tanh(y) + p3*x + p4*x*y 

...我們想找到最適合的P0-P4。我們至少需要與線性參數(本例中爲5)一樣多的點數,但理想情況下還有更多。

因爲我們映射(X,Y)至(Z),我們需要組織的元組在兩個數組:

double[][] xy = new[] { new[]{x1,y1}, new[]{x2,y2}, new[]{x3,y3}, ... }; 
double[] z = new[] { z1, z2, z3, ... }; 

然後我們可以調用Fit.LinearMultiDim與我們的模型,它會返回一個數組最好的配合5個參數P0-P4:

Fit.LinearMultiDim(xy, z, 
    d => 1.0,    // p0*1.0 
    d => Math.Tanh(d[0]), // p1*tanh(x) 
    d => Math.Tanh(d[1]), // p2*tanh(y) 
    d => d[0],    // p3*x 
    d => d[0]*d[1]);  // p4*x*y 
+0

好吧,我不明白爲什麼我們在寫時Fit.Polynomial我們沒有所有這些(d => *)的功能,但現在它是所有明確。 另一個問題是,如果Math.net提供了一個解決方案來擬合線性函數而不知道函數公式? –

+0

它不需要符號公式,但它需要它作爲函數,因此它可以在樣本點評估它以構建設計矩陣。除非您已經預先計算了設計矩陣。你絕對需要一個模型,因爲迴歸就是尋找模型參數。除非你只是想要簡單的「線性」模型(參見'Fit.MultiDim(x,y)'或者'MultipleRegression.NormalEquations(x,y,true)')或者根本不需要模型,而只需要某種形式的插值? –

+0

MathNet.Numerics中沒有看到Fit.MultiDim(x,y)和MultipleRegression.NormalEquations(x,y,true)C#v2.6.1.30 我的另一個問題是,Fit.LinearMultiDim給出了相同的結果,無論Func參數的順序。那麼下面的魔法是什麼:) –