Аппроксимация (Линейная регрессия)

advertisement
Аппроксимация (Линейная регрессия)
Постановка задачи
Дан набор точек на плоскости (xi, yi), i = 1, …, n. Необходимо найти прямую,
наименее уклоняющуюся от этих точек. Запишем уравнение прямой в
следующем виде
y = ax + b.
Задача состоит в поиске неизвестных коэффициентов a и b, которые
минимизируют сумму квадратов расстояний между проекциями точек (xi, yi)
на эту прямую вдоль оси OY.
То есть, находится минимум выражения
n
   (axi  b  y i ) 2
i 1
Для этого приравнивают к нулю частные производные


и
, и получают
a
b
формулы для нахождения неизвестных коэффициентов
 n
  n  n

n  xi y i     xi   y i 
  i 1  i 1 
a   i 1
2
n

 n 
2
n  x i     x i 
 i 1
  i 1 
n
n
 n  n
  n  n

x
y



y
x


i
i     x i   x i y i 


i
i

b  i 1  a i 1   i 1  i 1   i 1  i21
n
n
n
n



2
n  x i     x i 
 i 1
  i 1 
Если уравнение прямой ищется в виде y = ax, то верна следующая формула
 n

  xi y i 

a   i n1

2
  xi 
 i 1

Пример
Даны следующие наборы точек
(x1, y1) = (3, 4)
(x2, y2) = (5, 8)
(x3, y3) = (10, 5)
Так как точек 3, то n = 3. Находим коэффициенты
 n
  n  n

n  xi y i     xi   y i 
  i 1  i 1   3 * 3 * 4  5 * 8  10 * 5  3  5  10 4  8  5  3 * 102  18 * 17  0
a   i 1
2
2
3 *134  18 * 18
3 * 3 * 3  5 * 5  10 * 10   3  5  10 
 n 2  n 
n  xi     xi 
 i 1
  i 1 
n
b
 yi
i 1
n
n
a
x
i 1
n
i

485
 5, (6)
3
Таким образом, искомая прямая имеет вид
y = 5,(6).
Задание
Реализовать программу, вычисляющую значения наименее уклоняющейся прямой в
произвольных точках
Система оценок:
Три балла
Значения n, (xi, yi) вводятся с клавиатуры, затем вводится произвольная точка x,
программа на экран выдаёт значение y (y = ax + b).
Четыре балла
Значения (xi, yi) читаются из файла. Из другого файла считываются массив точек xj
программа на экран выдаёт значение yj (y = ax + b).
Пять баллов
Значения (xi, yi) читаются из файла. Из другого файла считываются массив точек xj
программа на экран выдаёт значение yj (y = ax + b).
На экране графически изобразить точки (xi, yi) и искомую прямую y = ax + b.
Download