2013-03-13 3 views
0

Привет, я пытаюсь получить множественную регрессию с помощью math.net, и я немного смущен.Множественная регрессия с math.net

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 X = DenseMatrix.CreateFromColumns(new[] { new DenseVector(xdata.Length, 1), new DenseVector(xdata) }); 
     var y = new DenseVector(ydata); 

     var p = X.QR().Solve(y); 
     var a = p[0]; 
     var b = p[1]; 

Я думаю, что я не понимаю Math.Net, любая помощь с этим будет замечательной. В принципе, у меня есть несколько x и один y, и вам нужно получить данные коэффициентов от них.

+0

Что ваша целевая функция, которую вы хотите, чтобы найти наиболее подходящие параметры для? Обратите внимание, что функция должна быть линейной по этим параметрам. –

+0

Я думаю, что наименьшие квадраты были бы лучшим способом сделать то, что мне нужно, спасибо. – user1221399

ответ

0

По тому, как вы подготовили свою матрицу (т.е. первый столбец всегда 1), мне кажется, что у вас на самом деле есть 4 независимые переменные, и вы ищете простую регрессию с линейной комбинацией всех независимых переменных в качестве целевой функции:

y : (x1, ..., x4) -> p0 + p1*x1 + ... + p4*x4 

Если это так, то просто удалите строку var X = ... и вместо того, чтобы переименовать xdata в X, то все 5 параметры будут доступны в p вектор, как и ожидалось.

Учитывая данные выше, вы будете в конечном итоге с приблизительно:

y : (x1, ..., x4) -> 123.2 - 8.9*x1 + 2.8*x2 + 3.7*x3 - 4.4*x4 
+0

Эта строка, где я получаю ошибку: var X = DenseMatrix.CreateFromColumns (новый [] {новый DenseVector (xdata.Length, 1), новый DenseVector (xdata)}); – user1221399

+0

(см. Мой ответ выше) –

+0

Решает ли это проблему? Дайте мне знать, если все еще неясно. –

Смежные вопросы