Метод наименьших квадратов — это широко используемый математический метод для подбора данных и поиска наиболее подходящей кривой. Его цель — найти функцию, которая минимизирует сумму квадратов ошибок по точкам данных.
Каталог статей
Фундаментальный
Предположим, у нас есть набор точек данных (x 1, y 1), (x 2, y 2),..., (xn, yn) (x_1, y_1), (x_2, y_2), ..., ( х_н, й_н)( х1,й1) ,( х2,й2) ,... ,( хн,йн) , мы хотим найти функциюy = f ( x ) y = f(x)й"="f ( x ) , так что эта функция лучше всего соответствует этим точкам данных. Основная идея метода наименьших квадратов заключается в том, что нам нужно найти функциюy = f ( x ) y = f(x)й"="f ( x ) , так что сумма квадратов расстояний всех точек данных до этой функции минимизирована.
Мы определяем расстояние от каждой точки данных до функции как остаток Residual_iрез я люблю тебя _ _я,即residuali = yi - f ( xi ) остатка_i = y_i - f(x_i)рез я люблю тебя _ _я"="йя−е ( хя) . Наша цель — минимизировать сумму квадратов всех остатков, то есть минимизировать сумму квадратов ошибокS = ∑ i = 1 nresiduali 2 S = \sum_{i=1}^{n} Residual_i^2С"="∑я = 1нрез я люблю тебя _ _я2。
Решение методом наименьших квадратов
Чтобы решить задачу наименьших квадратов, нам нужно выбрать подходящую функциональную форму y = f ( x ) y = f(x)й"="ж ( Икс ) . Общие формы функций включают линейные функции, полиномиальные функции, показательные функции и т. д. Возьмем линейную функциюy = ax + by = ax + bй"="х _+б Например, мы можем минимизировать сумму ошибок квадратовSSS найти коэффициентaaа иббб。
Сначала определим целевую функцию J (a, b) J(a, b)Дж ( а ,б ),即J ( а , б ) знак равно ∑ я знак равно 1 п ( yi - ( axi + b ) ) 2 J(a, b) = \ sum_{i=1}^{n} (y_i - (ax_i + б))^2Дж ( а ,б )"="∑я = 1н( уя−( х _я+б ) )2 . Наша цель — найти такое, чтоJ ( a , b ) J(a, b)Дж ( а ,б ) наименьшийааа иббб . Чтобы достичь этой цели, нам нужно найти частную производную целевой функции и сделать ее равной 0.
Для целевой функции J ( a , b ) J(a, b)Дж ( а ,б ) , соответственно оцениваемaaа иббНайдите частную производную от b и пусть она равна 0, то есть:
∂ J ∂ а знак равно 0 \frac{\partial J}{\partial a} = 0∂ а∂ Дж"="0
∂ J ∂ b знак равно 0 \frac{\partial J}{\partial b} = 0∂ б∂ Дж"="0
Решив приведенную выше систему уравнений, можно получить а.а.а иббb , получая таким образом наиболее подходящую прямую линию.
Примеры применения
Метод наименьших квадратов имеет широкий спектр применения в практических приложениях. Например, в экономике метод наименьших квадратов можно использовать для оценки параметров экономической модели. В физике метод наименьших квадратов можно использовать для аппроксимации экспериментальных данных и получения параметров физических законов. В машинном обучении метод наименьших квадратов можно использовать для решения задач линейной регрессии.
Давайте возьмем в качестве примера задачу линейной регрессии. Предположим, у нас есть набор точек данных о площади и цене дома, и мы хотим найти линейную функцию, которая лучше всего соответствует этим точкам данных. Мы можем использовать метод наименьших квадратов для определения параметров линейной функции.
Предположим, что наши точки данных: ( x 1 , y 1 ), ( x 2 , y 2 ) , . . . , ( xn , yn ) (x_1, y_1), (x_2, y_2), ..., (x_n, y_n )( х1,й1) ,( х2,й2) ,... ,( хн,йн) , нам нужно найти линейную функциюy = ax + by = ax + bй"="х _+b , сумма квадратов разностейS = ∑ i знак равно 1 n ( yi − ( axi + b ) ) 2 S = \sum_{i=1}^{n} (y_i - (ax_i + b))^2С"="∑я = 1н( уя−( х _я+б ) )2 Свернуть.
Решив частную производную целевой функции и установив ее равной 0, мы можем получитьа иббрешение б . Наконец, мы можем получить параметры наиболее подходящей прямой.
Реализация метода наименьших квадратов с использованием языка C
#include <stdio.h>
// 定义最大数据点数量
#define MAX_DATA_POINTS 100
// 定义数据点结构体
typedef struct {
double x;
double y;
} DataPoint;
// 定义线性回归函数
void linearRegression(DataPoint* data, int n, double* a, double* b) {
double sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;
for (int i = 0; i < n; i++) {
sumX += data[i].x;
sumY += data[i].y;
sumXY += data[i].x * data[i].y;
sumX2 += data[i].x * data[i].x;
}
double denominator = n * sumX2 - sumX * sumX;
*a = (n * sumXY - sumX * sumY) / denominator;
*b = (sumY * sumX2 - sumX * sumXY) / denominator;
}
int main() {
int n;
DataPoint data[MAX_DATA_POINTS];
// 输入数据点数量
printf("Enter the number of data points: ");
scanf("%d", &n);
// 输入数据点的 x 和 y 值
printf("Enter the data points (x, y):\n");
for (int i = 0; i < n; i++) {
printf("Data point %d: ", i+1);
scanf("%lf %lf", &data[i].x, &data[i].y);
}
double a, b;
linearRegression(data, n, &a, &b);
// 输出线性回归的结果
printf("Linear regression equation: y = %.2fx + %.2f\n", a, b);
return 0;
}
Этот код реализует простую функцию линейной регрессии linearRegression
, которая принимает массив точек данных и количество точек данных в качестве входных данных и вычисляет параметры наиболее подходящей прямой линии. В main
функцию мы сначала вводим количество и конкретные значения точек данных, затем вызываем linearRegression
функцию для выполнения вычислений линейной регрессии и выводим уравнение наиболее подходящей прямой линии.
Обратите внимание, что этот код реализует только простую линейную регрессию. Если вам нужно подогнать другие типы функций, вам необходимо соответствующим образом изменить linearRegression
реализацию функции .
Подведем итог
Метод наименьших квадратов — это широко используемый математический метод для подбора данных и поиска наиболее подходящей кривой. Его основной принцип заключается в минимизации суммы квадратов расстояний от точек данных до подобранной функции. Решив частную производную целевой функции и присвоив ей значение 0, мы можем получить параметры наиболее подходящей функции. Метод наименьших квадратов широко используется в различных областях и является очень полезным инструментом.