Как найти линейную регрессию? Есть массив объектов вида напримерconst arr = [
{x: 20.849203669054898, y: 20.849203669054898}
{x: 31.784082508100216, y: 31.784082508100216}
{x: 45.66296718842696, y: 45.66296718842696}
{x: 45.99942499885912, y: 45.99942499885912}
{x: 48.01817186145211, y: 48.01817186145211}
{x: 59.205394058321545, y: 59.205394058321545}
{x: 62.065285446994935, y: 62.065285446994935}
{x: 82.50509743074888, y: 82.50509743074888}
{x: 83.76681421986947, y: 83.76681421986947}
{x: 85.36498881942225, y: 85.36498881942225}
{x: 86.54259115593483, y: 86.54259115593483}
]
Это координаты точек. Как на основе этих данных найти линейную регрессию?
На выходе нужны данные такого же вида как и исходный массив, то есть с x и y.

21 Авг 2019 в 06:04
148 +1
0
Ответы
1

Для нахождения линейной регрессии по этим данным, можно воспользоваться методом наименьших квадратов. Для этого нужно вычислить ковариацию по формуле:
cov(x, y) = Σ((x_i - x_avg) (y_i - y_avg)) / (n - 1)
где x_avg и y_avg - средние значения x и y, n - количество точек.
Затем вычисляем дисперсию для x и y:
var(x) = Σ(x_i - x_avg)^2 / (n - 1)
var(y) = Σ(y_i - y_avg)^2 / (n - 1)
После этого находим коэффициенты уравнения прямой регрессии:
b = cov(x, y) / var(x)
a = y_avg - b x_avg
Наконец, для каждой точки из исходного массива arr вычисляем значение y на основе уравнения прямой:
y_pred = a + b * x

Вот пример кода на JavaScript для нахождения линейной регрессии по заданным точкам:

const arr = [
{x: 20.849203669054898, y: 20.849203669054898},
{x: 31.784082508100216, y: 31.784082508100216},
{x: 45.66296718842696, y: 45.66296718842696},
{x: 45.99942499885912, y: 45.99942499885912},
{x: 48.01817186145211, y: 48.01817186145211},
{x: 59.205394058321545, y: 59.205394058321545},
{x: 62.065285446994935, y: 62.065285446994935},
{x: 82.50509743074888, y: 82.50509743074888},
{x: 83.76681421986947, y: 83.76681421986947},
{x: 85.36498881942225, y: 85.36498881942225},
{x: 86.54259115593483, y: 86.54259115593483}
];
const n = arr.length;
let x_sum = 0;
let y_sum = 0;
for (let i = 0; i < n; i++) {
x_sum += arr[i].x;
y_sum += arr[i].y;
}
const x_avg = x_sum / n;
const y_avg = y_sum / n;
let cov_xy = 0;
let var_x = 0;
for (let i = 0; i < n; i++) {
cov_xy += (arr[i].x - x_avg) * (arr[i].y - y_avg);
var_x += (arr[i].x - x_avg) ** 2;
}
const b = cov_xy / var_x;
const a = y_avg - b * x_avg;
const result = [];
for (let i = 0; i < n; i++) {
const y_pred = a + b * arr[i].x;
result.push({x: arr[i].x, y: y_pred});
}
console.log(result);

Этот код вычисляет линейную регрессию и записывает предсказанные значения y в новый массив result.

20 Апр 2024 в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир