Описание окрестности точки наибольшего правдоподобия моделей (пример)
Материал из MachineLearning.
 (→Вычислительный эксперимент)  | 
				 (→Исходный код)  | 
			||
| (16 промежуточных версий не показаны.) | |||
| Строка 106: | Строка 106: | ||
Если выполнено условие:  | Если выполнено условие:  | ||
| - | <center><tex>  | + | <center><tex>|Evidence_k - \max_{t\in\{1,...,k-1\}}(Evidence_{t})|  \geq \triangle E</tex>,</center>  | 
то идём к шагу 2, иначе - повторяем шаг 1.  | то идём к шагу 2, иначе - повторяем шаг 1.  | ||
d - заданная константа.  | d - заданная константа.  | ||
| - | |||
===Шаг 2: удаление признаков===  | ===Шаг 2: удаление признаков===  | ||
| Строка 127: | Строка 126: | ||
Если выполнено условие:  | Если выполнено условие:  | ||
| - | <center><tex>  | + | <center><tex>|Evidence_k - \max_{t\in\{1,...,k-1\}}(Evidence_{t})|  \geq \triangle E</tex>,</center>  | 
то идём к шагу 1, иначе - повторяем шаг 2.  | то идём к шагу 1, иначе - повторяем шаг 2.  | ||
| Строка 139: | Строка 138: | ||
== Вычислительный эксперимент ==  | == Вычислительный эксперимент ==  | ||
| + | |||
| + | Генерирование случайных данных:  | ||
| + | <source lang="matlab">  | ||
| + | |||
| + | m = 300; %число объектов  | ||
| + | U = 6; %число начальных признаков  | ||
| + | V = 4; %количестов порождающих функций  | ||
| + | d = 1; %на сколько шагов можно уйти от максимума  | ||
| + | |||
| + | C = rand(m,U)  | ||
| + | w = rand(U,1)  | ||
| + | e = 0.1 * randn(m,1)  | ||
| + | y = C*w + e  | ||
| + | |||
| + | </source>  | ||
Порождение новых признаков:  | Порождение новых признаков:  | ||
<source lang="matlab">  | <source lang="matlab">  | ||
| + | |||
G = [Z, Z.^2, tan(Z), exp(Z)]; %множество порождающих функиций m на V*U  | G = [Z, Z.^2, tan(Z), exp(Z)]; %множество порождающих функиций m на V*U  | ||
X = [ones(m,1), G]; %множество признаков m на N  | X = [ones(m,1), G]; %множество признаков m на N  | ||
| Строка 154: | Строка 169: | ||
    end  |     end  | ||
end  | end  | ||
| + | |||
</source>  | </source>  | ||
| - | Вычисление   | + | Вычисление номера признака, доставляющего минимум функционалу качества (2):  | 
<source lang="matlab">  | <source lang="matlab">  | ||
| - | |||
| - | + | for i = 1:numel(ind)  | |
| - | + |    mask2 = mask;  | |
| - | + |    mask2(ind(i),1) = 1;  | |
| - | + | ||
| + |    X_mask2 = getXmask(X, mask2);  | ||
| + |    [w, sse_] = lsqlin(X_mask2,y,[],[]);  | ||
| + | |||
| + |    if i == 1  | ||
| + |       sse_best = sse_;  | ||
| + |    elseif sse_< sse_best  | ||
| + |       sse_best = sse_;  | ||
| + |       index_best = ind(i);  | ||
| + |    end  | ||
end  | end  | ||
| + | |||
</source>  | </source>  | ||
| Строка 170: | Строка 195: | ||
<source lang="matlab">  | <source lang="matlab">  | ||
| + | X_ = getXmask( X, mask );  | ||
xRegression=X_;  | xRegression=X_;  | ||
| - | yRegression=  | + | yRegression=y;  | 
| - | + | activeSet = 1:size(xRegression,2); % количество активных признаков  | |
| - | + | ||
| - | + | ||
[weightM,alphaM,beta,weightH,alphaMH,betaH,gammaH] = ...  | [weightM,alphaM,beta,weightH,alphaMH,betaH,gammaH] = ...  | ||
| - | + |    getLinParam(xRegression,yRegression,activeSet);  | |
| - | evid_ =   | + | beta;  | 
| + | evid_ = abs(getEvid( xRegression,yRegression,weightM,alphaM,beta ));  | ||
</source>  | </source>  | ||
| - | '''На   | + | '''На графике выведем зависимость правдоподобия(ocь Y) от шага алгоритма(ось X)'''  | 
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
<source lang="matlab">   | <source lang="matlab">   | ||
evidence  | evidence  | ||
plot(linspace(1,numel(evidence),numel(evidence)), evidence);  | plot(linspace(1,numel(evidence),numel(evidence)), evidence);  | ||
</source>  | </source>  | ||
| + | |||
| + | [[Изображение:evid_1.png|thumb|left]]  | ||
| + | [[Изображение:evid_3.png|thumb|left]]  | ||
| + | [[Изображение:evid_2.png|thumb|left]]  | ||
| + | [[Изображение:evid_4.png|thumb|left]]  | ||
| + | [[Изображение:evid_5.png|thumb|left]]  | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | Эксперимент 1.  | ||
| + | |||
| + | Количество объектов = 300,   | ||
| + | количество начальных признаков = 6,  | ||
| + | количество признаков = 230  | ||
| + | |||
| + | Порождающие функции: <tex>g = \{x,~x^2,~\tan(x),~\exp(x)\}</tex>  | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | Эксперимент 2.  | ||
| + | |||
| + | Количество объектов = 300,  | ||
| + | количество начальных признаков = 6,  | ||
| + | количество признаков = 230  | ||
| + | |||
| + | Порождающие функции: <tex>g = \{x,~x^2,~\tan(x),~\exp(x)\}</tex>  | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | Эксперимент 3.  | ||
| + | |||
| + | Количество объектов = 500,  | ||
| + | количество начальных признаков = 6,  | ||
| + | количество признаков = 230  | ||
| + | |||
| + | Порождающие функции: <tex>g = \{x,~x^2,~\tan(x),~\exp(x)\}</tex>  | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | Эксперимент 4.  | ||
| + | |||
| + | Количество объектов = 500,  | ||
| + | количество начальных признаков = 6,  | ||
| + | количество признаков = 230  | ||
| + | |||
| + | Порождающие функции: <tex>g = \{\frac{1}{x}, x,~x^2,~\tan(x),~\exp(x)\}</tex>  | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | Эксперимент 5.  | ||
| + | |||
| + | Количество объектов = 900,  | ||
| + | количество начальных признаков = 7,  | ||
| + | количество признаков = 441  | ||
| + | |||
| + | Порождающие функции: <tex>g = \{\frac{1}{x}, x,~x^2,~\tan(x),~\exp(x)\}</tex>  | ||
| + | |||
| + | |||
| + | |||
| + | |||
== Литература ==  | == Литература ==  | ||
| Строка 212: | Строка 319: | ||
|год          = 2010  | |год          = 2010  | ||
}}  | }}  | ||
| + | |||
| + | == Исходный код ==  | ||
| + | [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/MIPT2006-2010OldProj/Minaev2010Maximum/  Minaev2010Maximum]  | ||
| + | |||
| + | {{ЗаданиеВыполнено|Павел Минаев|В.В.Стрижов|24 декабря 2010||Strijov}}  | ||
| + | [[Категория:Практика и вычислительные эксперименты]]  | ||
Текущая версия
Содержание | 
Постановка задачи
Пусть задана выборка  из m пар.
 - множество из m объектов,
 , где n - количество признаков, а
 - соответствующая зависимая переменная.
 - вектор значений j-ого признака, а 
 - вектор целевого признака.
Пусть  - множество индексов объектов, 
 - множество индексов признаков. 
 - подмножество активных признаков.
Множество 
 задаёт регрессионную модель 
, а 
 - сложность модели. 
Рассмотрим следующую линейную модель регрессии, описывающую связь между свободными и зависимой переменными
где  - вектор параметров регрессии, а случайная аддитивная переменная 
 регрессионной модели имеет нормальное распределение
.
Распределение зависимой переменной будет иметь следующий вид:
где  - сумма квадратов невязок 
. Согласно оценки точки наибольшего правдоподобия, данное распределение задаёт критерий качества модели, равный сумме квадратов регрессионных остатков.
где  - некоторое множество индексов. Этот критерий используется при выборе модели в дальнейшем.
Мультиколлинеарность отслеживается с помощью фактора инфляции дисперсии (VIF), связанного с корреляцей данного признака с другими:
Коэффициент детерминации j-ого признака относительно остальных вычисляется следующим образом:
где  - среднее значение вектроа 
Требуется найти такую модель оптимальной структуры признаков , которая доставляет наименьшее значение функционалу качества (2).
Порождение свободных переменных
Множества измеряемых признаков бывает недостаточно для построения модели удовлетворительного качества. Требуется расширить множество признаков с помощью функциональных преобразований.
Предлагается следующий способ порождения новых признаков:
Пусть задано множество свободных переменных  и конечное множество порождающих функций 
.
Обозначим , где индекс 
.
Рассмотрим декартово произведение , где элементу 
 ставится в соответствие суперпозиция 
, однозначно определяемая индексами 
.
В качестве модели, описывающей отношение между зависимой переменной  и свободными переменными 
, используется полином Колмогорова-Габора:
где  и 
.
 - множество индексов, размерности N.
Алгоритм
Рассмотрим алгоритм, состоящий из двух шагов.
На первом шаге мы будем добавлять признаки один за другим к нашей модели согласно критерию качества модели (2).
На втором шаге мы будем удалять признаки по одному из нашей модели согласно тому же критерию качества (2).
Пусть на -ом шагу алгоритма имеется множество признаков 
, которое определяет матрицу 
: 
.
На нулевом шаге . Опишем 
-ый шаг алгоритма.
Шаг 1: добавление признаков
Добавляем такой признак  к активному набору
,
который доставляет минимум функционалу (2).
Если выполнено условие:
то идём к шагу 2, иначе - повторяем шаг 1.
d - заданная константа.
Шаг 2: удаление признаков
Удаляем такой признак  из активного набора
,
который имеет наибольший фактора инфляции дисперсии, то есть доставляет максимум функционалу (3).
Если выполнено условие:
то идём к шагу 1, иначе - повторяем шаг 2.
d - заданная константа.
Критерий останова
Алгоритм заканчивает работу, если правдоподобие  перестаёт увеличиваться.
Тогда мы нашли оптимальный набор признаков.
Вычислительный эксперимент
Генерирование случайных данных:
m = 300; %число объектов U = 6; %число начальных признаков V = 4; %количестов порождающих функций d = 1; %на сколько шагов можно уйти от максимума C = rand(m,U) w = rand(U,1) e = 0.1 * randn(m,1) y = C*w + e
Порождение новых признаков:
G = [Z, Z.^2, tan(Z), exp(Z)]; %множество порождающих функиций m на V*U X = [ones(m,1), G]; %множество признаков m на N N = size(X,1) for i = 1 : U*V for j = 1 : U*V if i >= j X = [X, G(:,i).*G(:,j)]; N = N + 1; end end end
Вычисление номера признака, доставляющего минимум функционалу качества (2):
for i = 1:numel(ind) mask2 = mask; mask2(ind(i),1) = 1; X_mask2 = getXmask(X, mask2); [w, sse_] = lsqlin(X_mask2,y,[],[]); if i == 1 sse_best = sse_; elseif sse_< sse_best sse_best = sse_; index_best = ind(i); end end
Вычисление правдоподобия:
X_ = getXmask( X, mask ); xRegression=X_; yRegression=y; activeSet = 1:size(xRegression,2); % количество активных признаков [weightM,alphaM,beta,weightH,alphaMH,betaH,gammaH] = ... getLinParam(xRegression,yRegression,activeSet); beta; evid_ = abs(getEvid( xRegression,yRegression,weightM,alphaM,beta ));
На графике выведем зависимость правдоподобия(ocь Y) от шага алгоритма(ось X)
evidence plot(linspace(1,numel(evidence),numel(evidence)), evidence);
Эксперимент 1.
Количество объектов = 300, количество начальных признаков = 6, количество признаков = 230
Порождающие функции: 
Эксперимент 2.
Количество объектов = 300, количество начальных признаков = 6, количество признаков = 230
Порождающие функции: 
Эксперимент 3.
Количество объектов = 500, количество начальных признаков = 6, количество признаков = 230
Порождающие функции: 
Эксперимент 4.
Количество объектов = 500, количество начальных признаков = 6, количество признаков = 230
Порождающие функции: 
Эксперимент 5.
Количество объектов = 900, количество начальных признаков = 7, количество признаков = 441
Порождающие функции: 
Литература
- Стрижов В.В Методы выбора регрессионных моделей. — ВЦ РАН, 2010.
 - Стрижов В.В Методы индуктивного порождения регрессионных моделей. — ВЦ РАН, 2008.
 - Vadim Strijov, Katya Krymova, Gerhard Wilhelm Weber Evidence Optimization for Consequently Generated Models. — Computing Center of the Russian Academy of Science, Moscow, Russia, 2010.
 
Исходный код
|   |  Данная статья была создана в рамках учебного задания.
 
 См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе.  | 

