Эффективный несколько линейная регрессия в C# / .NET

Делает любой знает об эффективном способе сделать несколько линейная регрессия в C#, где количество одновременных уравнений может быть в 1000-х (с 3 или 4 различными исходными данными). После чтения этой статьи о нескольких линейная регрессия я пытался реализовать его с матричным уравнением:

Matrix y = new Matrix(
    new double[,]{{745},
                  {895},
                  {442},
                  {440},
                  {1598}});

Matrix x = new Matrix(
     new double[,]{{1, 36, 66},
                 {1, 37, 68},
                 {1, 47, 64},
                 {1, 32, 53},
                 {1, 1, 101}});

Matrix b = (x.Transpose() * x).Inverse() * x.Transpose() * y;

for (int i = 0; i < b.Rows; i++)
{
  Trace.WriteLine("INFO: " + b[i, 0].ToDouble());
}

Однако это не масштабируется хорошо к масштабу 1000-х уравнений из-за матричной операции инверсии. Я могу назвать язык R и использование, что, однако я надеялся, что будет чистое решение .NET, которое масштабируется к этим большим наборам.

Какие-либо предложения?

РЕДАКТИРОВАНИЕ № 1:

Я уладил использование R в настоящее время. При помощи statconn (загруженный здесь) я нашел, что это оба быстро и относительно просто в использовании этот метод. Т.е. вот маленький фрагмент кода, это действительно не много кода вообще для использования R statconn библиотека (примечание: это не весь код!).

_StatConn.EvaluateNoReturn(string.Format("output <- lm({0})", equation));
object intercept = _StatConn.Evaluate("coefficients(output)['(Intercept)']");
parameters[0] = (double)intercept;
for (int i = 0; i < xColCount; i++)
{
  object parameter = _StatConn.Evaluate(string.Format("coefficients(output)['x{0}']", i));
  parameters[i + 1] = (double)parameter;
}

16
задан mike 27 May 2010 в 04:44
поделиться

2 ответа

Попробуйте Meta.Numerics :

Meta.Numerics - это библиотека для расширенных научных вычислений в .NET Framework. Его можно использовать из C #, Visual Basic, F # или любого другого языка программирования .NET. Библиотека Meta.Numerics полностью объектно-ориентирована и оптимизирована для скорости реализации и выполнения.

Чтобы заполнить матрицу, см. Пример Конструктор ColumnVector (IList ) . Он может создавать ColumnVector из многих упорядоченных наборов вещественных чисел, включая double [] и List.

1
ответ дан 30 November 2019 в 23:21
поделиться

Размер инвертируемой матрицы НЕ увеличивается с увеличением количества одновременных уравнений (выборок). x.Transpose () * x - квадратная матрица, размерность которой - количество независимых переменных.

2
ответ дан 30 November 2019 в 23:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: