Ищу образец, как сделать взвешенную линейную регрессию

Я пытаюсь использовать MathNet для расчета взвешенной линейной регрессии моих данных.

Документация находится здесь.

Я пытаюсь найти a x + b = y таким образом, чтобы он лучше всего соответствовал списку (x, y, w), где w — это вес каждой точки.

        var r = WeightedRegression.Weighted(
            weightedPoints.Select(p=>new Tuple<double[],double>(new [] { p.LogAvgAmount}, p.Frequency),
            weightedPoints.Select(p=>Convert.ToDouble(p.Weight)).ToArray(), false);

В результате в r я получаю одно очко. Я ожидаю значения a и b.

Что я делаю не так?


person Arsen Zahray    schedule 13.10.2017    source источник


Ответы (2)


WeightedRegression.Weighted ожидает матрицу предикторов в качестве первого параметра, и передается только LogAvgAmount. Попробуйте добавить 1 в список или вызвать WeightedRegression.Weighted с intercept: true

var x = weightedPoints.Select(p => new[] {p.LogAvgAmount}).ToArray();
var y = weightedPoints.Select(p => p.Frequency).ToArray();
var w = weightedPoints.Select(p => Convert.ToDouble(p.Weight)).ToArray();

// r1 == r2
var r1 = WeightedRegression.Weighted(weightedPoints.Select(p =>
    new[] {1, p.LogAvgAmount}).ToArray(), y, w);

var r2 = WeightedRegression.Weighted(x, y, w, intercept: true);
person Peter    schedule 13.10.2017

Использование Math.Net Numerics может быть хорошей идеей.

Взвешенная регрессия

Иногда ошибку регрессии можно уменьшить, демпфируя определенные точки данных. Мы можем добиться этого, введя весовую матрицу W в нормальные уравнения XTy=XTXp. Такие весовые матрицы часто бывают диагональными, с отдельным весом для каждой точки данных на диагонали.

var p = WeightedRegression.Weighted(X,y,W);

Более взвешенная регрессия становится интересной, если мы можем адаптировать их к интересующей точке и, например. демпфировать все точки данных далеко. К сожалению, таким образом параметры модели зависят от точки интереса t.

1: // предупреждение: предварительное API

2: var p = WeightedRegression.Local(X,y,t,radius,kernel);

Дополнительную информацию можно найти по адресу: https://numerics.mathdotnet.com/regression.html.

person Adrian Contreras Gebauer    schedule 21.03.2018