Алгоритмы выбора линейных регрессионных моделей (практика)

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

(Различия между версиями)
Перейти к: навигация, поиск
м (Поиск самой длинной проекции вектора ответов на биссекторы векторов признаков [maxkselect])
 
(12 промежуточных версий не показаны.)
Строка 1: Строка 1:
Описание библиотеки алгоритмов выбора линейных регрессионных моделей
Описание библиотеки алгоритмов выбора линейных регрессионных моделей
 +
 +
Библиотека находится по [https://mvr.svn.sourceforge.net/svnroot/mvr/mdlselection ссылке].
[[Алгоритмы выбора линейных регрессионных моделей (практика)/Вспомогательные функции|Вспомогательные функции]]
[[Алгоритмы выбора линейных регрессионных моделей (практика)/Вспомогательные функции|Вспомогательные функции]]
 +
 +
== Введение ==
 +
 +
Реализованы алгоритмы выбора [[Линейная регрессия (пример)|линейных регрессионных моделей]].
 +
 +
Рассмотрена следующая задача. Задана выборка <tex>$\{(\mathbf{x}^i,y_i)\}_{i=1}^m$</tex>,где
 +
<tex>$\mathbf{x^i}\in\mathbf{R}^m$</tex>&nbsp;— вектор значений свободных переменных <tex>$x_1,x_2,\dots,x_m$</tex>,
 +
<tex>$y\in\mathbf{R}$</tex>.
 +
 +
Линейная модель представима в виде <tex>$\mathbf{y}=A\mathbf{w}$</tex>,
 +
где столбцы матрицы&nbsp;— значения свободных переменных и <tex>$\mathbf{y}=\{y_1,\ldots,y_N\}$</tex>.
 +
 +
Требуется выбрать множество индексов столбцов матрицы <tex>$A$</tex>, задающие модель, которые доставляют минимум заданному критерию качества.
 +
 +
При построении модели выполняется настройка параметров модели с помощью [[Метод наименьших квадратов|метода наименьших квадратов]], оценивается ее качество.
 +
 +
Модель с настроенными параметрами, доставляющая минимум заданному функционалу качества, называется моделью оптимальной структуры.
 +
 +
Кроме алгоритма [[Метод наименьших углов (пример)|LARS]], все алгоритмы на этапе выбора регрессионных моделей
 +
для найденных множеств индексов используют [[скользящий контроль]].
 +
 +
В алгоритме [[Метод наименьших углов (пример)|LARS]] для выбора моделей используется [[Критерий Маллоуза|критерий Маллоуза]].
 +
 +
== Архитектура ==
 +
 +
=== Соглашения об интерфейсе функций ===
 +
Для унификации способов применения методов выбора модели предусмотрен формат интерфейса функции.
 +
 +
На вход каждый метод принимает 3 параметра:
 +
* <code>features</code> — матрица признакового описания объектов, в которой строки соответствуют объектам, а столбцы - признакам;
 +
* <code>target</code> - столбец значений целевого признака;
 +
* <code>Params</code> - структура с параметрами алгоритма; она может обладать следующими полями:
 +
** <code>Common</code> - структура, содержащая общие параметры алгоритмов:
 +
*** <code>maxNFeatures</code> - максимальное допустимое количество отобранных информативных признаков;
 +
** ''ИмяМетода'' - для каждого метода структура с его собственными параметрами; например, для метода полного перебора <code>esearch</code> параметры должны быть доступны как поля структуры <code>Params.Esearch</code>.
 +
На вход методам может передаваться структура параметров, содержащая не все поля (поле <code>Params.Common</code> и поля, соответствующие конкретным методам), а также не все их поля (например, может быть не задано <code>Params.Common.maxNFeatures</code>). Если необходимые алгоритму параметры не заданы, должны быть использованы некоторые значения "по умолчанию".
 +
 +
На выходе каждый метод возвращает описание набора информативных признаков и их весов в виде структуры с полями:
 +
* <code>isInformative</code> - логический вектор-столбец, представляющий собой маску информативных признаков (выбранным информативным признакам соответствует <code>true</code>, остальным - <code>false</code>);
 +
* <code>weight</code> - столбец с весами каждого признака; для неинформативных признаков веса должны быть нулевыми.
 +
 +
=== Шаблон шапки файла метода ===
 +
<source lang="matlab">
 +
function FeaturesRating = methodName(features, target, Params)
 +
% Description.
 +
%
 +
% Arguments
 +
% Input
 +
% features - matrix of features, where rows are objects, and colums are feature vectors
 +
% target - target feature vector
 +
% Params - structure with fields
 +
% Common - common params; structure with fields
 +
% maxNFeatures - maximum features number to select
 +
% MethodName - structure with params for particular method
 +
% Output
 +
% FeaturesRating - structure with rating for all features; has fields
 +
% isInformative - logical column of marks is particular feature informative (true) or not (false)
 +
% weight - weight of particular feature
 +
%
 +
% Example
 +
% TODO
 +
%
 +
% See also
 +
% TODO
 +
%
 +
% Revisions
 +
% TODO
 +
</source>
 +
 +
TODO Example
 +
 +
== Реализованные алгоритмы ==
 +
=== Полный перебор [esearch] ===
 +
=== Лассо Тибширани [lasso] ===
 +
=== Least Angle Regression (LARS) [lars] ===
 +
=== Генетический алгоритм [genetic] ===
 +
=== метод группового учета аргиментов (МГУА) [gmdh] ===
 +
=== алгоритм последовательного добавления признаков с ортогонализацией (FOS) [forwardos] ===
 +
=== Гребневая регрессия [ridgeregr] ===
 +
=== Случайный поиск с адаптацией (СПА) [rsa] ===
 +
Алгоритм случайного поиска с адаптацией похож на генетический, но лишен операции скрещивания, зато обладает более сложной операцией мутации — признаки из хороших наборов появляются с большей вероятностью, чем из плохих.
 +
 +
'''Вход:'''
 +
* <tex>$F$</tex> — набор признаков
 +
* <tex>$X$</tex> — обучающая выборка
 +
* <tex>$Q$</tex> — критерий качества (степень ошибки)
 +
* <tex>$d$</tex> — количество шагов осле наождения оптимума
 +
* <tex>$j_{max}$</tex> — максимальное число признаков в наборе
 +
* <tex>$T$</tex> — количество итераций
 +
* <tex>$N$</tex> — количество генерируемых наборов на каждой итерации
 +
* <tex>$h$</tex> — скорость адаптации (шаг изменения вероятностей)
 +
 +
'''Алгоритм:'''
 +
# для всех признаков равные вероятности: <tex>$\forall i\in\{1,\ldots,m\} p_i:=1/m$</tex>
 +
# для всех сложностей наборов: <tex>$j=1\ldots,j_{max}$</tex>
 +
## для всех итераций: <tex>$t=1,\ldots,T$</tex>
 +
### генерация набора признаков согласно вероятностям: <tex>$F_t=\{F_{t1},\ldots,F_{tN}\}$</tex>, <tex>$|F_{t1}|=\ldots=|F_{tN}|=j$</tex>
 +
### лучший набор: <tex>$F_t^{min}:=\arg\min_{F_{ti}\in F_t}Q(F_{ti})$</tex>
 +
### худший набор: <tex>$F_t^{max}:=\arg\max_{F_{ti}\in F_t}Q(F_{ti})$</tex>
 +
### суммарное наказание: <tex>$\Delta P:=0$</tex>
 +
### по всем плохим признакам: <tex>$f_i\in F_t^{max}$</tex>
 +
#### <tex>$\Delta p_i:=\min\{p_i,h\}$</tex>
 +
#### <tex>$p_i:=p_i-\Delta p_i$</tex>
 +
#### <tex>$\Delta P:=\Delta P+\Delta p_i$</tex>
 +
### по всем хорошим признакам: <tex>$f_i\in F_t^{min}$</tex>
 +
#### <tex>$p_i:=p_i+\Delta P/j$</tex>
 +
## лучший набор из просмотренных: <tex>$F_{j^*}:=\arg\min_{k\le j}Q(F_k)$</tex>
 +
## если <tex>$j\ge j^*+d$</tex>, то вернуть <tex>$F_{j^*}$</tex>
 +
 +
=== Поиск самой длинной проекции вектора ответов на биссекторы векторов признаков [maxkselect] ===
 +
Алгоритм использует идею последовательного уменьшения вектора ответов за счет вычитания проекций на биссекторы векторов признаков. Аналогичная идея используется в алгоритме [[LARS]], но данный алгоритм выбирает вектор для проецирования по другому принципу. Пусть остаток вектора ответов после проецироваиня, так же как и в алгоритме LARS, лежит на биссекторе двух векторов признаков. Тогда, перебрав все такие биссекторы, мы можем оценить длину вычитаемого вектора и длину остатка. Идея заключается в максимизации длины вычитаемого на каждом шаге.
 +
Сначала находится пара признаков, для которых длина вычитаемого вектора наибольшая. Затем вектор ответов уменьшается на этот вектор, а соответствующий коэффициент увеличивается.
 +
 +
'''Вход:'''
 +
* <tex>$f_1,\dots,f_n$</tex> — векторы признаков; <tex>$\forall i~\|f_i\|=1$</tex>
 +
* <tex>$y$</tex> — вектор ответов
 +
 +
'''Выход:'''
 +
* <tex>$\alpha_1,\dots,\alpha_n$</tex> — коэффициенты линейного разложения вектора ответов по векторам признаков
 +
 +
'''Алгоритм:'''
 +
# инициализация: <tex>$\forall i~\alpha_i:=0$</tex>
 +
# повторять <tex>$k\ne0$</tex>
 +
## найти пару признаков <tex>$f_p$</tex>, <tex>$f_q$</tex> и коэффициент <tex>$k$</tex>: <tex>$\left(f_p,f_q,k\right)=\arg\max\limits_{(f_i,f_j,k)}|k|:|\langle f_i,y-kf_i\rangle|=|\langle f_j,y-kf_j\rangle|$</tex>
 +
## <tex>$y:=y-kf_p$</tex>
 +
## <tex>$\alpha_p:=\alpha_p+k$</tex>
 +
 +
== Литература ==
 +
* Стрижов В.В., Крымова Е.А. Методы выбора регрессионных моделей. М.: ВЦ РАН, 2010. 60&nbsp;с. [[Media:Strijov-Krymova10Model-Selection.pdf|Брошюра, PDF]].
[[Категория: Регрессионный анализ]]
[[Категория: Регрессионный анализ]]
[[Категория: Инструменты и технологии]]
[[Категория: Инструменты и технологии]]
 +
[[Категория: Практика и вычислительные эксперименты]]

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

Описание библиотеки алгоритмов выбора линейных регрессионных моделей

Библиотека находится по ссылке.

Вспомогательные функции

Содержание

Введение

Реализованы алгоритмы выбора линейных регрессионных моделей.

Рассмотрена следующая задача. Задана выборка $\{(\mathbf{x}^i,y_i)\}_{i=1}^m$,где $\mathbf{x^i}\in\mathbf{R}^m$ — вектор значений свободных переменных $x_1,x_2,\dots,x_m$, $y\in\mathbf{R}$.

Линейная модель представима в виде $\mathbf{y}=A\mathbf{w}$, где столбцы матрицы — значения свободных переменных и $\mathbf{y}=\{y_1,\ldots,y_N\}$.

Требуется выбрать множество индексов столбцов матрицы $A$, задающие модель, которые доставляют минимум заданному критерию качества.

При построении модели выполняется настройка параметров модели с помощью метода наименьших квадратов, оценивается ее качество.

Модель с настроенными параметрами, доставляющая минимум заданному функционалу качества, называется моделью оптимальной структуры.

Кроме алгоритма LARS, все алгоритмы на этапе выбора регрессионных моделей для найденных множеств индексов используют скользящий контроль.

В алгоритме LARS для выбора моделей используется критерий Маллоуза.

Архитектура

Соглашения об интерфейсе функций

Для унификации способов применения методов выбора модели предусмотрен формат интерфейса функции.

На вход каждый метод принимает 3 параметра:

  • features — матрица признакового описания объектов, в которой строки соответствуют объектам, а столбцы - признакам;
  • target - столбец значений целевого признака;
  • Params - структура с параметрами алгоритма; она может обладать следующими полями:
    • Common - структура, содержащая общие параметры алгоритмов:
      • maxNFeatures - максимальное допустимое количество отобранных информативных признаков;
    • ИмяМетода - для каждого метода структура с его собственными параметрами; например, для метода полного перебора esearch параметры должны быть доступны как поля структуры Params.Esearch.

На вход методам может передаваться структура параметров, содержащая не все поля (поле Params.Common и поля, соответствующие конкретным методам), а также не все их поля (например, может быть не задано Params.Common.maxNFeatures). Если необходимые алгоритму параметры не заданы, должны быть использованы некоторые значения "по умолчанию".

На выходе каждый метод возвращает описание набора информативных признаков и их весов в виде структуры с полями:

  • isInformative - логический вектор-столбец, представляющий собой маску информативных признаков (выбранным информативным признакам соответствует true, остальным - false);
  • weight - столбец с весами каждого признака; для неинформативных признаков веса должны быть нулевыми.

Шаблон шапки файла метода

function FeaturesRating = methodName(features, target, Params)
% Description.
%
% Arguments
% Input
%   features - matrix of features, where rows are objects, and colums are feature vectors
%   target   - target feature vector
%   Params   - structure with fields 
%     Common      - common params; structure with fields
%       maxNFeatures - maximum features number to select
%     MethodName  - structure with params for particular method
% Output
%   FeaturesRating - structure with rating for all features; has fields
%     isInformative - logical column of marks is particular feature informative (true) or not (false)
%     weight        - weight of particular feature
%
% Example
% TODO
%
% See also
% TODO
% 
% Revisions
% TODO

TODO Example

Реализованные алгоритмы

Полный перебор [esearch]

Лассо Тибширани [lasso]

Least Angle Regression (LARS) [lars]

Генетический алгоритм [genetic]

метод группового учета аргиментов (МГУА) [gmdh]

алгоритм последовательного добавления признаков с ортогонализацией (FOS) [forwardos]

Гребневая регрессия [ridgeregr]

Случайный поиск с адаптацией (СПА) [rsa]

Алгоритм случайного поиска с адаптацией похож на генетический, но лишен операции скрещивания, зато обладает более сложной операцией мутации — признаки из хороших наборов появляются с большей вероятностью, чем из плохих.

Вход:

  • $F$ — набор признаков
  • $X$ — обучающая выборка
  • $Q$ — критерий качества (степень ошибки)
  • $d$ — количество шагов осле наождения оптимума
  • $j_{max}$ — максимальное число признаков в наборе
  • $T$ — количество итераций
  • $N$ — количество генерируемых наборов на каждой итерации
  • $h$ — скорость адаптации (шаг изменения вероятностей)

Алгоритм:

  1. для всех признаков равные вероятности: $\forall i\in\{1,\ldots,m\} p_i:=1/m$
  2. для всех сложностей наборов: $j=1\ldots,j_{max}$
    1. для всех итераций: $t=1,\ldots,T$
      1. генерация набора признаков согласно вероятностям: $F_t=\{F_{t1},\ldots,F_{tN}\}$, $|F_{t1}|=\ldots=|F_{tN}|=j$
      2. лучший набор: $F_t^{min}:=\arg\min_{F_{ti}\in F_t}Q(F_{ti})$
      3. худший набор: $F_t^{max}:=\arg\max_{F_{ti}\in F_t}Q(F_{ti})$
      4. суммарное наказание: $\Delta P:=0$
      5. по всем плохим признакам: $f_i\in F_t^{max}$
        1. $\Delta p_i:=\min\{p_i,h\}$
        2. $p_i:=p_i-\Delta p_i$
        3. $\Delta P:=\Delta P+\Delta p_i$
      6. по всем хорошим признакам: $f_i\in F_t^{min}$
        1. $p_i:=p_i+\Delta P/j$
    2. лучший набор из просмотренных: $F_{j^*}:=\arg\min_{k\le j}Q(F_k)$
    3. если $j\ge j^*+d$, то вернуть $F_{j^*}$

Поиск самой длинной проекции вектора ответов на биссекторы векторов признаков [maxkselect]

Алгоритм использует идею последовательного уменьшения вектора ответов за счет вычитания проекций на биссекторы векторов признаков. Аналогичная идея используется в алгоритме LARS, но данный алгоритм выбирает вектор для проецирования по другому принципу. Пусть остаток вектора ответов после проецироваиня, так же как и в алгоритме LARS, лежит на биссекторе двух векторов признаков. Тогда, перебрав все такие биссекторы, мы можем оценить длину вычитаемого вектора и длину остатка. Идея заключается в максимизации длины вычитаемого на каждом шаге. Сначала находится пара признаков, для которых длина вычитаемого вектора наибольшая. Затем вектор ответов уменьшается на этот вектор, а соответствующий коэффициент увеличивается.

Вход:

  • $f_1,\dots,f_n$ — векторы признаков; $\forall i~\|f_i\|=1$
  • $y$ — вектор ответов

Выход:

  • $\alpha_1,\dots,\alpha_n$ — коэффициенты линейного разложения вектора ответов по векторам признаков

Алгоритм:

  1. инициализация: $\forall i~\alpha_i:=0$
  2. повторять $k\ne0$
    1. найти пару признаков $f_p$, $f_q$ и коэффициент $k$: $\left(f_p,f_q,k\right)=\arg\max\limits_{(f_i,f_j,k)}|k|:|\langle f_i,y-kf_i\rangle|=|\langle f_j,y-kf_j\rangle|$
    2. $y:=y-kf_p$
    3. $\alpha_p:=\alpha_p+k$

Литература

  • Стрижов В.В., Крымова Е.А. Методы выбора регрессионных моделей. М.: ВЦ РАН, 2010. 60 с. Брошюра, PDF.
Личные инструменты