Линейная регрессия (пример)
Материал из MachineLearning.
(→Исходный код) |
(→Применение линейной постановки задачи для моделирования кривых второго порядка) |
||
(5 промежуточных версий не показаны.) | |||
Строка 13: | Строка 13: | ||
Предполагается, что случайная величина | Предполагается, что случайная величина | ||
[[функция распределения|распределена]] | [[функция распределения|распределена]] | ||
- | [[ | + | [[нормальное распределение|нормально]] с нулевым матожиданием и |
фиксированной дисперсией <tex>\sigma^2_\varepsilon</tex>, которая не зависит от переменных <tex>x, y</tex>. | фиксированной дисперсией <tex>\sigma^2_\varepsilon</tex>, которая не зависит от переменных <tex>x, y</tex>. | ||
При таких предположениях параметры <tex>\mathbf{w}</tex> регрессионной модели вычисляются с помощью | При таких предположениях параметры <tex>\mathbf{w}</tex> регрессионной модели вычисляются с помощью | ||
Строка 192: | Строка 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> | ||
+ | |||
+ | Аналогичным путем получаются решения задач нахождения параметров эллипсоида, параллелограмма и других геометрических фигур. | ||
== Смотри также == | == Смотри также == | ||
Строка 208: | Строка 224: | ||
[[Категория:Регрессионный анализ]] | [[Категория:Регрессионный анализ]] | ||
+ | [[Категория:Линейная регрессия]] | ||
[[Категория:Популярные и обзорные статьи]] | [[Категория:Популярные и обзорные статьи]] | ||
[[Категория:Библиотеки алгоритмов]] | [[Категория:Библиотеки алгоритмов]] |
Текущая версия
|
Линейная регрессия — метод восстановления зависимости между двумя переменными. Ниже приведен пример программы, которая строит линейную модель зависимости по заданной выборке и показывает результат на графике.
Для заданного множества из пар , , значений свободной и зависимой переменной требуется построить зависимость. Назначена линейная модель
c аддитивной случайной величиной . Переменные принимают значения на числовой прямой . Предполагается, что случайная величина распределена нормально с нулевым матожиданием и фиксированной дисперсией , которая не зависит от переменных . При таких предположениях параметры регрессионной модели вычисляются с помощью метода наименьших квадратов.
Например, требуется построить зависимость цены нарезного хлеба от времени. (См. рис. далее по тексту). В таблице регрессионной выборки первая колонка — зависимая переменная (цена батона хлеба), вторая — свободная переменная (время). Всего данные содержат 195 пар значений переменных. Данные нормированы.
Одномерная регрессия
Определим модель зависимости как
Согласно методу наименьших квадратов, искомый вектор параметров есть решение нормального уравнения
где — вектор, состоящий из значений зависимой переменной, . Столбцы матрицы есть подстановки значений свободной переменной и , . Матрица имеет вид
Зависимая переменная восстанавливается по полученным весам и заданным значениям свободной переменной
иначе
% Для оценки качества модели используется критерий суммы квадратов регрессионных остатков, SSE — Sum of Squared Errors.
Пример нахождения параметров модели и восстановления линейной регрессии (здесь и далее код на языке 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 % подсчитать ошибку
Полиномиальная регрессия
Пусть регрессионная модель — полином заданной степени ,
Матрица в случае полиномиальной регрессии называется матрицей Вандермонда и принимает вид
Одномерная регрессия — частный случай полиномиальной регрессии.
Пример нахождения параметров модели и восстановления полиномиальной регрессии.
% функция для построения матрицы подстановок 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 % подсчитать ошибку
Криволинейная регрессия
Пусть исходные признаки преобразованы с помощью некоторых заданных, в общем случае нелинейных функций . При этом функции не должны содержать дополнительных параметров. Функции должны быть определены на всей числовой прямой, либо, по крайней мере, на всех значениях, которые принимает свободная переменная.
Матрица в случае полиномиальной регрессии называется обобщенной матрицей Вандермонда и принимает вид
Полиномиальная регрессия — частный случай криволинейной регрессии.
Пример нахождения параметров модели и восстановления криволинейной регрессии.
% функция для построения матрицы подстановок 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>>
Применение линейной постановки задачи для моделирования кривых второго порядка
Постановка задачи из области контроля качества состояния трубопроводов. Заданы координаты окружности (сечения трубы) -- множество точек , измеренных с некоторой погрешностью. Требуется найти центр и радиус окружности.
Запишем регерссионную модель-- координаты окружности относительно центра и радиуса и выделим линейно входящие компоненты:
Тогда матрица плана линейной модели будет иметь вид
Аналогичным путем получаются решения задач нахождения параметров эллипсоида, параллелограмма и других геометрических фигур.
Смотри также
Литература
- Дрейпер Н., Смит Г. Прикладной регрессионный анализ. Издательский дом «Вильямс». 2007. 912 с.
- Стрижов В. В. Методы индуктивного порождения регрессионных моделей. М.: ВЦ РАН. 2008. 55 с. Брошюра, PDF.