Как найти линейную регрессию? Есть массив объектов вида например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
121 +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 Апр в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 161 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир