Линейная регрессия (пример)

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Применение линейной постановки задачи для моделирования кривых второго порядка)
 
(13 промежуточных версий не показаны.)
Строка 1: Строка 1:
 +
{{TOCright}}
'''Линейная регрессия''' — метод восстановления зависимости между двумя переменными.
'''Линейная регрессия''' — метод восстановления зависимости между двумя переменными.
Ниже приведен пример программы, которая строит линейную модель зависимости по
Ниже приведен пример программы, которая строит линейную модель зависимости по
Строка 8: Строка 9:
Назначена линейная [[регрессионная модель|модель]]
Назначена линейная [[регрессионная модель|модель]]
<center><tex>y_i= f(\mathbf{w},x_i) + \varepsilon_i</tex></center>
<center><tex>y_i= f(\mathbf{w},x_i) + \varepsilon_i</tex></center>
-
c аддитивной [[случайной величиной|случайной величиной]] <tex>\varepsilon</tex>.
+
c аддитивной [[случайная величина|случайной величиной]] <tex>\varepsilon</tex>.
Переменные&nbsp;<tex>x, y</tex> принимают значения на числовой прямой&nbsp;<tex>\mathbb{R}</tex>.
Переменные&nbsp;<tex>x, y</tex> принимают значения на числовой прямой&nbsp;<tex>\mathbb{R}</tex>.
-
Предполагается, что [[случайная величина|случайная величина]]
+
Предполагается, что случайная величина
[[функция распределения|распределена]]
[[функция распределения|распределена]]
-
[[семейство экспоненциальных распределений|нормально]] с нулевым матожиданием и
+
[[нормальное распределение|нормально]] с нулевым матожиданием и
-
фиксированной дисперсией&nbsp;<tex>\sigma²_\varepsilon</tex>, которая не зависит от переменных&nbsp;<tex>x, y</tex>.
+
фиксированной дисперсией&nbsp;<tex>\sigma^2_\varepsilon</tex>, которая не зависит от переменных&nbsp;<tex>x, y</tex>.
При таких предположениях параметры&nbsp;<tex>\mathbf{w}</tex> регрессионной модели вычисляются с помощью
При таких предположениях параметры&nbsp;<tex>\mathbf{w}</tex> регрессионной модели вычисляются с помощью
[[метод наименьших квадратов|метода наименьших квадратов]].
[[метод наименьших квадратов|метода наименьших квадратов]].
-
Например, требуется построить зависимость цены нарезного хлеба от времени.
+
Например, требуется построить зависимость цены нарезного хлеба от времени. (См. рис. далее по тексту).
-
В [[Media:bread_narez_norm.doc|таблице регрессионной выборки]] первая колонка&nbsp;— зависимая переменная (цена батона хлеба),
+
В [[Media:bread_narez_norm.doc|таблице регрессионной выборки]] первая колонка&nbsp;— зависимая переменная&nbsp;<tex>y</tex> (цена батона хлеба),
-
вторая&nbsp;— свободная (время). Всего данные содержат&nbsp;195 пар значений переменных. Данные нормированы.
+
вторая&nbsp;— свободная переменная&nbsp;<tex>x</tex> (время). Всего данные содержат&nbsp;195 пар значений переменных. Данные нормированы.
== Одномерная регрессия ==
== Одномерная регрессия ==
Строка 40: Строка 41:
Для оценки качества модели используется критерий суммы квадратов регрессионных остатков,
Для оценки качества модели используется критерий суммы квадратов регрессионных остатков,
SSE&nbsp;— Sum of Squared Errors.
SSE&nbsp;— Sum of Squared Errors.
-
<center><tex>SSE = \sum_{i=1}^m(y_i-y_i^*)² = (\mathbf{y} — \mathbf{y}^*)^T(\mathbf{y} — \mathbf{y}^*).</tex></center>
+
<center><tex>SSE = \sum_{i=1}^m(y_i-y_i^*)^2 = (\mathbf{y}-\mathbf{y}^*)^T(\mathbf{y}-\mathbf{y}^*).</tex></center>
-
Пример нахождения параметров модели и восстановления линейной регрессии.
+
Пример нахождения параметров модели и восстановления линейной регрессии (здесь и далее код на языке Matlab).
<source lang="matlab">
<source lang="matlab">
A = [x.^0, x]; % построить матрицу подстановок
A = [x.^0, x]; % построить матрицу подстановок
Строка 62: Строка 63:
Матрица&nbsp;<tex>A</tex> в случае полиномиальной регрессии называется матрицей Вандермонда и
Матрица&nbsp;<tex>A</tex> в случае полиномиальной регрессии называется матрицей Вандермонда и
принимает вид
принимает вид
-
<center><tex>A =\left(\begin{array}{ccccc} 1 & x_1 & x_1² & \ldots & x_1^p\\ 1 & x_2 & x_2² & \ldots & x_2^p\\ \ldots & \ldots & \ldots & \ldots\\ 1 & x_m & x_m² & \ldots & x_m^p\\ \end{array} \right).</tex></center>
+
<center><tex>A =\left(\begin{array}{ccccc} 1 & x_1 & x_1^2 & \ldots & x_1^p\\ 1 & x_2 & x_2^2 & \ldots & x_2^p\\ \ldots & \ldots & \ldots & \ldots\\ 1 & x_m & x_m^2 & \ldots & x_m^p\\ \end{array} \right).</tex></center>
Одномерная регрессия&nbsp;— частный случай полиномиальной регрессии.
Одномерная регрессия&nbsp;— частный случай полиномиальной регрессии.
Строка 85: Строка 86:
параметров. Функции должны быть определены на всей числовой прямой, либо, по крайней мере, на
параметров. Функции должны быть определены на всей числовой прямой, либо, по крайней мере, на
всех значениях, которые принимает свободная переменная.
всех значениях, которые принимает свободная переменная.
-
%
+
 
Матрица&nbsp;<tex>A</tex> в случае полиномиальной регрессии называется обобщенной матрицей Вандермонда и
Матрица&nbsp;<tex>A</tex> в случае полиномиальной регрессии называется обобщенной матрицей Вандермонда и
принимает вид
принимает вид
Строка 191: Строка 192:
% <<regression_curve.png>>
% <<regression_curve.png>>
</source>
</source>
 +
 +
==Применение линейной постановки задачи для моделирования кривых второго порядка==
 +
 +
Постановка задачи из области контроля качества состояния трубопроводов.
 +
Заданы координаты окружности (сечения трубы) -- множество точек <tex>\{(x,y)\}</tex>, измеренных с некоторой погрешностью.
 +
Требуется найти центр <tex>(c_1, c_2)</tex> и радиус <tex>r</tex> окружности.
 +
 +
Запишем регерссионную модель-- координаты окружности относительно центра и радиуса и выделим линейно входящие компоненты:
 +
 +
<tex> \begin{array}{l} (x - c_1)^2 + (y - c_2)^2 = r^2,\\ 2xc_1 + 2yc_2 + (r^2-c_1^2-c_2^2) = x^2 + y^2,\\ c_3 = (r^2-c_1^2-c_2^2).\\ \end{array}</tex>
 +
 +
Тогда матрица плана линейной модели будет иметь вид
 +
 +
<tex>\left(\begin{array}{ccc}2x_1 & 2y_1 & 1 \\ 2x_2 & 2y_2 & 1 \\ \vdots & \vdots & \vdots \\ 2x_m & 2y_m & 1 \\ \end{array}\right)\left(\begin{array}{cc} c_1\\ c_2\\ c_3\\ \end{array} \right) = \left(\begin{array}{c} x_1^2 +y_1^2\\ x_2^2 +y_2^2\\ \vdots \\ x_m^2 +y_m^2\\ \end{array}\right). </tex>
 +
 +
Аналогичным путем получаются решения задач нахождения параметров эллипсоида, параллелограмма и других геометрических фигур.
== Смотри также ==
== Смотри также ==
Строка 199: Строка 216:
== Литература ==
== Литература ==
* Дрейпер Н., Смит Г. Прикладной регрессионный анализ. Издательский дом «Вильямс». 2007. 912&nbsp;с.
* Дрейпер Н., Смит Г. Прикладной регрессионный анализ. Издательский дом «Вильямс». 2007. 912&nbsp;с.
-
* Стрижов В. В. Методы индуктивного порождения регрессионных моделей. М.: ВЦ РАН. 2008. 55&nbsp;с. [[Media:strijov08ln.pdf|Брошюра, PDF]].
+
* Стрижов В. В. Методы индуктивного порождения регрессионных моделей. М.: ВЦ РАН. 2008. 55&nbsp;с. [[Media:strijov08ln.pdf|Брошюра, PDF]].
== Исходный код ==
== Исходный код ==
Строка 205: Строка 222:
* [http://strijov.com/sources/bread_narez_norm.csv Регрессионная выборка, таблица],
* [http://strijov.com/sources/bread_narez_norm.csv Регрессионная выборка, таблица],
* [http://strijov.com/sources/plot_regression_2d.m Bспомогательный файл].
* [http://strijov.com/sources/plot_regression_2d.m Bспомогательный файл].
 +
 +
[[Категория:Регрессионный анализ]]
 +
[[Категория:Линейная регрессия]]
 +
[[Категория:Популярные и обзорные статьи]]
 +
[[Категория:Библиотеки алгоритмов]]

Текущая версия

Содержание

Линейная регрессия — метод восстановления зависимости между двумя переменными. Ниже приведен пример программы, которая строит линейную модель зависимости по заданной выборке и показывает результат на графике.

Для заданного множества из m пар (x_i, y_i), i=1,\ldots, m, значений свободной и зависимой переменной требуется построить зависимость. Назначена линейная модель

y_i= f(\mathbf{w},x_i) + \varepsilon_i

c аддитивной случайной величиной \varepsilon. Переменные x, y принимают значения на числовой прямой \mathbb{R}. Предполагается, что случайная величина распределена нормально с нулевым матожиданием и фиксированной дисперсией \sigma^2_\varepsilon, которая не зависит от переменных x, y. При таких предположениях параметры \mathbf{w} регрессионной модели вычисляются с помощью метода наименьших квадратов.

Например, требуется построить зависимость цены нарезного хлеба от времени. (См. рис. далее по тексту). В таблице регрессионной выборки первая колонка — зависимая переменная y (цена батона хлеба), вторая — свободная переменная x (время). Всего данные содержат 195 пар значений переменных. Данные нормированы.

Одномерная регрессия

Определим модель зависимости как

y_i= w_1 + w_2x_i + \varepsilon_i.

Согласно методу наименьших квадратов, искомый вектор параметров \mathbf{w}=(w_1,w_2)^T есть решение нормального уравнения

\mathbf{w} = (A^TA)^{-1}A^T\mathbf{y},

где \mathbf{y} — вектор, состоящий из значений зависимой переменной, \mathbf{y}=(y_1,\ldots, y_m). Столбцы матрицы A есть подстановки значений свободной переменной x_i^0\mapsto a_{i1} и x_i^1\mapsto a_{i2}, i=1,\ldots, m. Матрица имеет вид

A =\left(\begin{array}{cc} 1 & x_1\\ 1 & x_2\\ \ldots & \ldots \\ 1 & x_m\\ \end{array} \right).

Зависимая переменная восстанавливается по полученным весам и заданным значениям свободной переменной

y^*_i = w_1+w_2x_i,

иначе

\mathbf{y}^* = A\mathbf{w}.

% Для оценки качества модели используется критерий суммы квадратов регрессионных остатков, SSE — Sum of Squared Errors.

SSE = \sum_{i=1}^m(y_i-y_i^*)^2 = (\mathbf{y}-\mathbf{y}^*)^T(\mathbf{y}-\mathbf{y}^*).

Пример нахождения параметров модели и восстановления линейной регрессии (здесь и далее код на языке Matlab).

A = [x.^0, x];        % построить матрицу подстановок
                      % x - (m,1)-вектор, у - (m,1)-вектор
w = (A'*A)\(A'*y);    % решить нормальное уравнение
                      % методом гауссова исключения
w = pinv(A'*A)*(A'*y);% вариант обращения матрицы
y1 = w(1)+w(2)*x;     % восстановить зависимую переменную
                      % при заданных значениях x
r = y-y1;             % найти вектор регрессионных остатков
SSE = r'*r            % подсчитать ошибку

Полиномиальная регрессия

Пусть регрессионная модель — полином заданной степени p,

y_i= \sum_{j=1}^p w_j x_i^{j-1} + \varepsilon_i.

Матрица A в случае полиномиальной регрессии называется матрицей Вандермонда и принимает вид

A =\left(\begin{array}{ccccc} 1 & x_1 & x_1^2 & \ldots & x_1^p\\ 1 & x_2 & x_2^2 & \ldots & x_2^p\\ \ldots & \ldots & \ldots & \ldots\\ 1 & x_m & x_m^2 & \ldots & x_m^p\\ \end{array} \right).

Одномерная регрессия — частный случай полиномиальной регрессии.

Пример нахождения параметров модели и восстановления полиномиальной регрессии.

% функция для построения матрицы подстановок
f = inline('[x.^0, x, x.^2, x.^3]','x');
A = f(x);             % матрица подстановок есть функция
                      % значений свободной переменой
w = (A'*A)\(A'*y);    % решить нормальное уравнение
y2 = A*w;             % восстановить зависимую переменную
r = y-y2;             % найти вектор регрессионных остатков
SSE = r'*r            % подсчитать ошибку

Криволинейная регрессия

Пусть исходные признаки преобразованы с помощью некоторых заданных, в общем случае нелинейных функций g_1,\ldots, g_n. При этом функции не должны содержать дополнительных параметров. Функции должны быть определены на всей числовой прямой, либо, по крайней мере, на всех значениях, которые принимает свободная переменная.

Матрица A в случае полиномиальной регрессии называется обобщенной матрицей Вандермонда и принимает вид

A =\left(\begin{array}{ccc} g_1(x_1) & \ldots & g_n(x_1)\\ g_1(x_2) & \ldots & g_n(x_2)\\ \ldots & \ldots & \ldots \\ g_1(x_m) & \ldots & g_n(x_m)\\ \end{array} \right).

Полиномиальная регрессия — частный случай криволинейной регрессии.

Пример нахождения параметров модели и восстановления криволинейной регрессии.

% функция для построения матрицы подстановок
f = inline('[x.^0, x, sin(10*x)]','x');
A = f(x);             % матрица подстановок
w = (A'*A)\(A'*y);    % решить нормальное уравнение
y3 = A*w;             % восстановить зависимую переменную
r = y-y3;             % найти вектор регрессионных остатков
SSE = r'*r            % подсчитать ошибку

Исходный код

(Этот раздел должен быть скрыт)

%% Линейная регрессия 
% Исходный код к статье "Линейная регрессия (пример)"
% www.machinelearning.ru
 
%% Получить данные из файла 
% В файле содержаться цены на хлеб "нарезной" за несколько месяцев
D = dlmread('bread_narez_norm.doc');
y = D( :,1);          % в первом столбце значения зависимой переменной
x = D( :,2);          % во втором столбце - независимой
 
%% Смоделировать исходные данные
% Если файл данных отстутствует, можно создать данные самостятельно
 
% x = linspace(0,10,200)'; % независимая переменная, значения
% y = x + 1.5*sin(x) + randn(size(x,1),1); % зависимая переменная имеет 
% наложенную случайную переменную с нулевым матожиданием и однородной
% дисперсией
 
%% Настроить параметры графиков
% Используется внешняя функция plot_regression_2d
%pltopts.xdate='on';   % ось абсцисс - дата
pltopts.ftype={'psc2', 'png'}; % записать графиков файлы в формате .eps и .png
 
%% Одномерная регрессия
% Восстанавливаемая регрессионная зависимость - прямая на плоскости.
model1 = 'y=w_1+w_2x';
 
A = [x.^0, x];        % построить матрицу подстановок
                      % x - (m,1)-вектор, у - (m,1)-вектор
w = (A'*A)\(A'*y);    % решить нормальное уравнение 
                      % методом гауссова исключения 
w = pinv(A'*A)*(A'*y);% вариант обращения матрицы 
y1 = w(1)+w(2)*x;     % восстановить зависимую переменную 
                      % при заданных значениях x
r = y-y1;             % найти вектор регрессионных остатков
SSE = r'*r            % подсчитать ошибку
 
% нарисовать график 
pltopts.legend = {'sample set',model1};
pltopts.fname  = 'regression_onedim';
plot_regression_2d(x,[y y1], pltopts);
%% 
% <<regression_onedim.png>>
 
%% Полиномиальная регрессия
% Восстанавливаемая зависимость - кубическая кривая
model2 = 'y=w_1+w_2x+w_3x^2+w_4x^3';
 
                     % функция для построения матрицы подстановок
f = inline('[x.^0, x, x.^2, x.^3]','x');                       
A = f(x);             % матрица подстановок есть функция 
                      % значений свободной переменой
w = (A'*A)\(A'*y);    % решить нормальное уравнение 
y2 = A*w;             % восстановить зависимую переменную 
r = y-y2;             % найти вектор регрессионных остатков
SSE = r'*r            % подсчитать ошибку
 
% нарисовать график 
pltopts.legend = {'sample set',model2};
pltopts.fname  = 'regression_poly';
plot_regression_2d(x,[y y2], pltopts);
%% 
% <<regression_poly.png>>
 
%% Криволинейная регрессия  
% Восстанавляваемая зависимость, кроме мнономов, содержит другие функции, 
% нелинейные относительно независимой переменной
model3 = 'y=w_1+w_2x+w_3sin(10x)';
 
f = inline('[x.^0, x, sin(10*x)]','x');                       
A = f(x);             % матрица подстановок
w = (A'*A)\(A'*y);    % решить нормальное уравнение 
y3 = A*w;             % восстановить зависимую переменную
r = y-y3;             % найти вектор регрессионных остатков
SSE = r'*r            % подсчитать ошибку
 
% нарисовать график 
pltopts.legend = {'sample set', model1, model2, model3};
pltopts.fname  = 'regression_curve';
plot_regression_2d(x,[y y1 y2 y3], pltopts);
%% 
% <<regression_curve.png>>

Применение линейной постановки задачи для моделирования кривых второго порядка

Постановка задачи из области контроля качества состояния трубопроводов. Заданы координаты окружности (сечения трубы) -- множество точек \{(x,y)\}, измеренных с некоторой погрешностью. Требуется найти центр (c_1, c_2) и радиус r окружности.

Запишем регерссионную модель-- координаты окружности относительно центра и радиуса и выделим линейно входящие компоненты:

 \begin{array}{l}  (x - c_1)^2 + (y - c_2)^2 = r^2,\\  2xc_1 + 2yc_2 + (r^2-c_1^2-c_2^2) = x^2 + y^2,\\  c_3 = (r^2-c_1^2-c_2^2).\\ \end{array}

Тогда матрица плана линейной модели будет иметь вид

\left(\begin{array}{ccc}2x_1 & 2y_1  & 1  \\  2x_2 & 2y_2  & 1  \\  \vdots & \vdots  & \vdots \\  2x_m & 2y_m  & 1 \\ \end{array}\right)\left(\begin{array}{cc}  c_1\\  c_2\\  c_3\\ \end{array} \right) = \left(\begin{array}{c} x_1^2 +y_1^2\\ x_2^2 +y_2^2\\ \vdots \\ x_m^2 +y_m^2\\ \end{array}\right).

Аналогичным путем получаются решения задач нахождения параметров эллипсоида, параллелограмма и других геометрических фигур.

Смотри также

Литература

  • Дрейпер Н., Смит Г. Прикладной регрессионный анализ. Издательский дом «Вильямс». 2007. 912 с.
  • Стрижов В. В. Методы индуктивного порождения регрессионных моделей. М.: ВЦ РАН. 2008. 55 с. Брошюра, PDF.

Исходный код

Личные инструменты