Как найти линейную регрессию? Есть массив объектов вида например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.
Для нахождения линейной регрессии по этим данным, можно воспользоваться методом наименьших квадратов. Для этого нужно вычислить ковариацию по формуле: 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.
Для нахождения линейной регрессии по этим данным, можно воспользоваться методом наименьших квадратов. Для этого нужно вычислить ковариацию по формуле:
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.