Оценка сложности регрессионных моделей (пример)
Материал из MachineLearning.
(→Способы оценки сложности регрессионных моделей) |
(→Исходный код) |
||
(94 промежуточные версии не показаны) | |||
Строка 13: | Строка 13: | ||
== Способы оценки сложности регрессионных моделей == | == Способы оценки сложности регрессионных моделей == | ||
- | Существуют различные способы оценки сложности, используемые при выборе регрессионных моделей. | + | Существуют различные способы оценки сложности, используемые при выборе регрессионных моделей. Одним из них является [[Критерий Акаике|критерий Акаике (AIC)]], основанный на [[Бритва Оккама|принципе Оккама]], а также тесно связанный с ним [[Байесовский информационный критерий|Байесовский информационный критерий (BIC)]]. В [[Теория Вапника-Червоненкиса|теории Вапника-Червоненкиса]] одним из ключевых понятий является [[Размерность Вапника-Червоненкиса|размерность Вапника-Червоненкиса]], которая также является характеристикой сложности семейства алгоритмов. |
- | Поскольку задача описания данных формально эквивалентна кодированию, то сложность модели можно оценивать также как длину требуемого для её описания кода. На этом основан [[Principle of Minimum Description Length|принцип минимальной длинны описания (MDL)]]<ref>Mark H. Hansen, Bin Yu. Model Selection and the Principle of Minimum Description Length</ref>. | + | Поскольку задача описания данных формально эквивалентна кодированию, то сложность модели можно оценивать также как длину требуемого для её описания кода. На этом основан [[Principle of Minimum Description Length|принцип минимальной длинны описания (MDL)]]<ref>Mark H. Hansen, Bin Yu. Model Selection and the Principle of Minimum Description Length</ref> <ref>David J.C. MacKay. Information Theory, Inference, and Learning Algorithms</ref>. |
+ | |||
+ | Функция правдоподобия (достоверность) в некотором роде тоже можно рассматривать как оценку сложности модели<ref>Christopher M. Bishop Pattern Recognition and Machine Learning</ref>. | ||
+ | |||
+ | == Постановка задачи == | ||
+ | |||
+ | |||
+ | |||
+ | Рассматривается [[Многомерная линейная регрессия|линейная регрессионная модель]] | ||
+ | <center><tex>y= f(\mathbf{w},\mathbf{x}) + \nu= \sum^W_{j=1}w_jf_j(\mathbf{x})+\nu</tex></center> | ||
+ | |||
+ | |||
+ | Предполагается, что случайная величина | ||
+ | [[функция распределения|распределена]] | ||
+ | [[семейство экспоненциальных распределений|нормально]] с нулевым матожиданием и | ||
+ | фиксированной дисперсией <tex>\sigma^2</tex>, которая не зависит от переменных <tex>x, y</tex>. | ||
+ | При таких предположениях параметры <tex>\mathbf{w}</tex> регрессионной модели вычисляются с помощью | ||
+ | [[метод наименьших квадратов|метода наименьших квадратов]]. | ||
+ | |||
+ | Будем рассматривать одномерные выборки. Обозначим порождаемые признаки <tex>a_j=g_j(x)</tex> (свободные переменные). | ||
+ | |||
+ | Множество порождающих функций <tex>G=\{1, x^{\frac{1}{2}}, x, x^{\frac{3}{2}}, x^2, tgx, lnx, e^x\}</tex> | ||
+ | |||
+ | В качестве модели, описывающей отношение между свободными переменными <tex>a_j</tex> и зависимой переменной <tex>y</tex> будем использовать полином Колмогорова-Габора | ||
+ | |||
+ | <center><tex>y=w_0+\sum^{|G|}_{i=1}w_ia_i+\sum^{|G|}_{i=1}\sum^{|G|}_{j=1}w_{ij}a_ia_j+\ldots+\sum^{|G|}_{i=1}\ldots\sum^{|G|}_{z=1}w_{ij\ldots z}a_ia_j\ldots a_z +\ldots</tex></center> | ||
+ | |||
+ | Где вектор коэффициентов <tex>w=(w_0,w_i,w_{ij},\ldots)_{i,j,\ldots=1,2,\ldots}</tex> | ||
+ | |||
+ | '''Используя модельные данные, мы будем строить кривые зависимости AIC, BIC, размерности Вапника-Червоненкиса, длинны описания(MDL), функции правдоподобия (достоверности), а также количества хорошо определяемых параметров от количества мономов полинома Колмлгорова-Габора, с целью сравнить оптимальное по различным критериям количество признаков.''' | ||
+ | |||
+ | === Вычисление AIC и BIC для линейной регрессионной модели === | ||
+ | |||
+ | Пусть: | ||
+ | <tex>X = \{x_i\}^{n}_{i=1}</tex> - наблюдаемая часть выборки, где каждый объект характеризуется набором параметров <tex>x_i=(x_{i_1},...,x_{i_k})</tex>. | ||
+ | |||
+ | <tex>SSE=\|f(x_i)-y_i\|_2=\sum_{i=1}^n(y_i-f(w,x_i))^2</tex>;<br /> | ||
+ | |||
+ | <tex>\sigma^2=\frac{SSE}{n-2}</tex> — дисперсия остатков;<br /> | ||
+ | |||
+ | В случае [[Многомерная линейная регрессия|линейной регрессионной модели]] критерий [[Байесовский информационный критерий|BIC]] | ||
+ | выражается через SSE (Sum of Squared Errors) - сумму квадратов остатков - и <tex>\sigma^2</tex> - дисперсия остатков. | ||
+ | <tex>BIC=n\[\ln(\sigma^2)\]+k\ln(n)</tex> | ||
+ | |||
+ | А [[Критерий Акаике|критерий Акаике]] через SSE. <tex>k</tex> - число параметров модели | ||
+ | |||
+ | <tex>AIC = 2k+n\[\ln(\sigma^2)\]</tex> | ||
+ | |||
+ | Лучшая модель соответствует минимальному значению критерия. | ||
+ | |||
+ | === Вычисление размерности Вапника-Червоненкиса === | ||
+ | |||
+ | Если существует число <tex>h</tex> такое, что [[Функция роста | функция роста]] <tex>\Delta A(h) = 2^h</tex> и <tex>\Delta A(h+1) < 2^{h+1}</tex>, то оно | ||
+ | называется '''ёмкостью''' или '''размерностью Вапника-Червоненкиса''' (VC-dimension) семейства алгоритмов <tex>A</tex>. Если такого числа <tex>h</tex> не существует, то говорят, что семейство <tex>A</tex> имеет бесконечную ёмкость. | ||
+ | |||
+ | Другая формулировка определения (через [[Разнообразие | разнообразие]]): Пусть задано множество объектов <tex>X</tex> и некоторое семейство функций (алгоритмов классификации, решающих правил) <tex>A</tex>, которые сопоставляют каждому объекту множества <tex>X</tex> один из двух заданных классов. Ёмкостью семейства <tex>A</tex> называется наибольшее число <tex>h</tex>, такое, что существует подмножество из <tex>h</tex> объектов в множестве <tex>X</tex>, которое функции из <tex>A</tex> могут разбить на два класса всеми возможными способами. Если же такие подмножества существуют для сколь угодно большого <tex>h</tex>, то ёмкость полагается равной бесконечности. | ||
+ | |||
+ | Для задач регрессии обычно [[Размерность Вапника-Червоненкиса|размерность Вапника-Червоненкиса]] принимают равной количеству параметров <tex>k</tex>. | ||
+ | |||
+ | === Вычисление функции правдоподобия и количества хорошо определяемых параметров === | ||
+ | |||
+ | '''Для оценки сложности используется логарифм [[Связанный Байесовский вывод|функции правдоподобия(evidence)]]''' | ||
+ | |||
+ | <tex>ln p(D|\beta, A)=-\frac{1}{2}ln|A|-\frac{N}{2}ln2\pi+\frac{N}{2}ln\beta-S(w_0)-\frac{1}{2}ln|H|</tex> | ||
+ | |||
+ | Где <tex>E_D</tex> функция [[Анализ регрессионных остатков|регрессионных невязок]]: | ||
+ | |||
+ | <tex>E_D=\frac{1}{2}\sum^n_{i=1}(f(x_i)-y_i)^2</tex> | ||
+ | |||
+ | Функция ошибки: | ||
+ | |||
+ | <tex>S(w)=\frac{1}{3}w^TAw+\beta E_D</tex> | ||
+ | |||
+ | [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0_%D0%93%D0%B5%D1%81%D1%81%D0%B5 Матрица Гессе] функции ошибок | ||
+ | |||
+ | <tex>H=-\nabla\nabla S(w)|_{w=w_0}</tex> | ||
+ | |||
+ | Представим <tex>A=I_W||\frac{1}{a}||</tex> | ||
+ | |||
+ | <tex>H_D</tex> части Гессеана, не зависящие от <tex>A</tex> | ||
+ | |||
+ | '''Количество хорошо определяемых параметров:''' | ||
+ | |||
+ | <tex>\gamma=\sum^W_{j=1}\frac{\lambda_j}{\lambda_j+a_j}</tex> | ||
+ | |||
+ | == Численный эксперимент == | ||
+ | |||
+ | [[Изображение:Puredata.png|thumb|left]] | ||
+ | |||
+ | '''Генерация модельных данных.''' | ||
+ | |||
+ | Функция - полином 4й степени. | ||
+ | Случайная составляющая нормально распределена. | ||
+ | |||
+ | <source lang="matlab"> | ||
+ | x=1:.025:10; | ||
+ | y=(x-3).*(x-4).*(x-7).*(x-9)+15.*randn(size(x)); | ||
+ | scatter(x,y,'*') | ||
+ | % запишем x и y в виде столбцов | ||
+ | x=x'; | ||
+ | y=y'; | ||
+ | </source> | ||
+ | |||
+ | '''Порождение признаков''' | ||
+ | |||
+ | <source lang="matlab"> | ||
+ | %Построим матрицу подстановок (В модели будем использовать полином Колмогорова-Габора до третьей | ||
+ | %степени от попрождающих функций) | ||
+ | Ap=[ x.^0,x.^0.5,x,x.^1.5,x.^2, tan(x),log(x),exp(x) ]; %Полином первой степени | ||
+ | %добавим столбцы, соответствующие полиному второй степени | ||
+ | for i=5:8, | ||
+ | for j=2:5, | ||
+ | Ap(:,size(Ap,2)+1)=Ap(:,i).*Ap(:,j); | ||
+ | end | ||
+ | end | ||
+ | for i=6:8, | ||
+ | for j=i:8, | ||
+ | Ap(:,size(Ap,2)+1)=Ap(:,i).*Ap(:,j); | ||
+ | end | ||
+ | end | ||
+ | %добавим столбцы, соответствующие третьей степени полинома | ||
+ | %Колмогорова-Габора | ||
+ | for i=12:30, | ||
+ | for j=2:5, | ||
+ | Ap(:,size(Ap,2)+1)=Ap(:,i).*Ap(:,j); | ||
+ | end | ||
+ | end | ||
+ | for i=6:8, | ||
+ | for j=i:8, | ||
+ | for k=j:8, | ||
+ | Ap(:,size(Ap,2)+1)=Ap(:,i).*Ap(:,j).*Ap(:,k); | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | |||
+ | </source> | ||
+ | |||
+ | ''' Подсчет SSE, AIC и BIC''' | ||
+ | <source lang="matlab"> | ||
+ | SSEcount=zeros(size(Ap,2),1); | ||
+ | BIC=zeros(size(Ap,2),1); | ||
+ | AIC=zeros(size(Ap,2),1); | ||
+ | |||
+ | for i=1:size(Ap,2), % цикл по количеству признаков | ||
+ | w=pinv(Ap(:,1:i)'*Ap(:,1:i))*(Ap(:,1:i)')*y; | ||
+ | y1=Ap(:,1:i)*w; | ||
+ | plot(x,y1,'r',x,y,'*'); | ||
+ | r=y-y1; | ||
+ | SSEcount(i) = r'*r; | ||
+ | BIC(i)=i*log(size(x,1))+size(x,1)*log(SSEcount(i)*(size(x,1)-2)); | ||
+ | AIC(i)=2*i+size(x,1)*log(SSEcount(i)*(size(x,1)-2)); | ||
+ | end | ||
+ | </source> | ||
+ | |||
+ | '''Вычисление функции правдоподобия и количества хорошо определяемых параметров ''' | ||
+ | <source lang="matlab"> | ||
+ | |||
+ | xRegression=Ap; | ||
+ | yRegression=y; | ||
+ | Gam=zeros(size(Ap,2),1); | ||
+ | |||
+ | [n,m] = size(xRegression); | ||
+ | |||
+ | for j = 1:m | ||
+ | activeSet = 1:j; % количество активных признаков | ||
+ | |||
+ | [weightM,alphaM,beta,weightH,alphaMH,betaH,gammaH] = ... | ||
+ | getLinParam(xRegression,yRegression,activeSet); | ||
+ | Gam(j)=gammaH(size(gammaH,2)); | ||
+ | [ evid(j) ] = getEvid( xRegression(:, 1:j),yRegression,weightM,alphaM,beta ); | ||
+ | |||
+ | end | ||
+ | |||
+ | </source> | ||
+ | |||
+ | '''На одном графике выведем зависимость численного значения критериев (ocь Y) от количества признаков (ось X)''' | ||
+ | |||
+ | [[Изображение:Allpropwide2.png|thumb|left]] | ||
+ | |||
+ | [[Изображение:First40.png|thumb|left]] | ||
+ | |||
+ | [[Изображение:Normal.png|thumb|left]] | ||
+ | |||
+ | <source lang="matlab"> | ||
+ | hold on; | ||
+ | plot(1:size(AIC,1),AIC,'LineWidth',2,'Color','b') | ||
+ | plot(1:size(AIC,1),BIC,'LineWidth',2,'Color','r') | ||
+ | plot(1:size(AIC,1),1000*Gam,'LineWidth',2,'Color','g') | ||
+ | plot(1:size(AIC,1),-evid','LineWidth',2,'Color','m') | ||
+ | hold off; | ||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
+ | Из графика видно, что нас интересует только модели с количеством признаков не более 40 | ||
+ | <source lang="matlab"> | ||
+ | hold on; | ||
+ | plot(1:40,AIC(1:40),'LineWidth',2,'Color','b') | ||
+ | plot(1:40,BIC(1:40),'LineWidth',2,'Color','r') | ||
+ | plot(1:40,1000*Gam(1:40),'LineWidth',2,'Color','g') | ||
+ | plot(1:40,-(evid(1:40))','LineWidth',2,'Color','m') | ||
+ | hold off; | ||
+ | </source> | ||
+ | |||
+ | |||
+ | Вычтем среднее значение, чтобы были лучше видны закономерности. | ||
+ | |||
+ | <source lang="matlab"> | ||
+ | hold on; | ||
+ | plot(1:40,AIC(1:40)-mean(AIC(1:40)),'LineWidth',2,'Color','b') | ||
+ | plot(1:40,BIC(1:40)-mean(BIC(1:40)),'LineWidth',2,'Color','r') | ||
+ | plot(1:40,1000*Gam(1:40)-mean(1000*Gam(1:40)),'LineWidth',2,'Color','g') | ||
+ | plot(1:40,-(evid(1:40))'-mean(-(evid(1:40))'),'LineWidth',2,'Color','m') | ||
+ | hold off; | ||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
+ | === Модели с оптимальным количеством параметров, недообученная и переобученная === | ||
+ | |||
+ | <gallery> | ||
+ | Изображение:Mod6.png| недообученная модель с количеством параметров k=6 | ||
+ | Изображение:Goodmodel.png|модель с оптимальным количеством параметров k=15 | ||
+ | Изображение:Mod28.png|переобученная модель с количеством параметров k=28 | ||
+ | </gallery> | ||
+ | |||
+ | == Исходный код == | ||
+ | [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/MIPT2006-2010OldProj/Zuhba2010ModelComplexity/ Zuhba2010ModelComplexity] (часть кода написана Алексеем Зайцевым) | ||
== Литература == | == Литература == | ||
{{список примечаний}} | {{список примечаний}} | ||
- | + | {{ЗаданиеВыполнено|Анастасия Зухба|В.В.Стрижов|24 декабря 2010||Strijov}} | |
- | + | [[Категория:Практика и вычислительные эксперименты]] | |
- | + |
Текущая версия
Задача восстановления регрессии является частным случаем задачи обучения по прецедентам. При выборе модели, как и для всех задач обучения по прецедентам, возможны проблемы недообучения и переобучения.
В случае недообучения, модель недостаточно сложна для описания данных с требуемой точностью. А в случае переобучения, возникающего при избыточной сложности моделей, средняя ошибка на тестовой выборке существенно выше,чем на обучающей выборке.
Таким образом, для каждой задачи существует оптимальная сложность модели.
Содержание |
Способы оценки сложности регрессионных моделей
Существуют различные способы оценки сложности, используемые при выборе регрессионных моделей. Одним из них является критерий Акаике (AIC), основанный на принципе Оккама, а также тесно связанный с ним Байесовский информационный критерий (BIC). В теории Вапника-Червоненкиса одним из ключевых понятий является размерность Вапника-Червоненкиса, которая также является характеристикой сложности семейства алгоритмов.
Поскольку задача описания данных формально эквивалентна кодированию, то сложность модели можно оценивать также как длину требуемого для её описания кода. На этом основан принцип минимальной длинны описания (MDL)[1] [1].
Функция правдоподобия (достоверность) в некотором роде тоже можно рассматривать как оценку сложности модели[1].
Постановка задачи
Рассматривается линейная регрессионная модель
Предполагается, что случайная величина
распределена
нормально с нулевым матожиданием и
фиксированной дисперсией , которая не зависит от переменных .
При таких предположениях параметры регрессионной модели вычисляются с помощью
метода наименьших квадратов.
Будем рассматривать одномерные выборки. Обозначим порождаемые признаки (свободные переменные).
Множество порождающих функций
В качестве модели, описывающей отношение между свободными переменными и зависимой переменной будем использовать полином Колмогорова-Габора
Где вектор коэффициентов
Используя модельные данные, мы будем строить кривые зависимости AIC, BIC, размерности Вапника-Червоненкиса, длинны описания(MDL), функции правдоподобия (достоверности), а также количества хорошо определяемых параметров от количества мономов полинома Колмлгорова-Габора, с целью сравнить оптимальное по различным критериям количество признаков.
Вычисление AIC и BIC для линейной регрессионной модели
Пусть: - наблюдаемая часть выборки, где каждый объект характеризуется набором параметров .
;
— дисперсия остатков;
В случае линейной регрессионной модели критерий BIC выражается через SSE (Sum of Squared Errors) - сумму квадратов остатков - и - дисперсия остатков.
А критерий Акаике через SSE. - число параметров модели
Лучшая модель соответствует минимальному значению критерия.
Вычисление размерности Вапника-Червоненкиса
Если существует число такое, что функция роста и , то оно называется ёмкостью или размерностью Вапника-Червоненкиса (VC-dimension) семейства алгоритмов . Если такого числа не существует, то говорят, что семейство имеет бесконечную ёмкость.
Другая формулировка определения (через разнообразие): Пусть задано множество объектов и некоторое семейство функций (алгоритмов классификации, решающих правил) , которые сопоставляют каждому объекту множества один из двух заданных классов. Ёмкостью семейства называется наибольшее число , такое, что существует подмножество из объектов в множестве , которое функции из могут разбить на два класса всеми возможными способами. Если же такие подмножества существуют для сколь угодно большого , то ёмкость полагается равной бесконечности.
Для задач регрессии обычно размерность Вапника-Червоненкиса принимают равной количеству параметров .
Вычисление функции правдоподобия и количества хорошо определяемых параметров
Для оценки сложности используется логарифм функции правдоподобия(evidence)
Где функция регрессионных невязок:
Функция ошибки:
Матрица Гессе функции ошибок
Представим
части Гессеана, не зависящие от
Количество хорошо определяемых параметров:
Численный эксперимент
Генерация модельных данных.
Функция - полином 4й степени. Случайная составляющая нормально распределена.
x=1:.025:10; y=(x-3).*(x-4).*(x-7).*(x-9)+15.*randn(size(x)); scatter(x,y,'*') % запишем x и y в виде столбцов x=x'; y=y';
Порождение признаков
%Построим матрицу подстановок (В модели будем использовать полином Колмогорова-Габора до третьей %степени от попрождающих функций) Ap=[ x.^0,x.^0.5,x,x.^1.5,x.^2, tan(x),log(x),exp(x) ]; %Полином первой степени %добавим столбцы, соответствующие полиному второй степени for i=5:8, for j=2:5, Ap(:,size(Ap,2)+1)=Ap(:,i).*Ap(:,j); end end for i=6:8, for j=i:8, Ap(:,size(Ap,2)+1)=Ap(:,i).*Ap(:,j); end end %добавим столбцы, соответствующие третьей степени полинома %Колмогорова-Габора for i=12:30, for j=2:5, Ap(:,size(Ap,2)+1)=Ap(:,i).*Ap(:,j); end end for i=6:8, for j=i:8, for k=j:8, Ap(:,size(Ap,2)+1)=Ap(:,i).*Ap(:,j).*Ap(:,k); end end end
Подсчет SSE, AIC и BIC
SSEcount=zeros(size(Ap,2),1); BIC=zeros(size(Ap,2),1); AIC=zeros(size(Ap,2),1); for i=1:size(Ap,2), % цикл по количеству признаков w=pinv(Ap(:,1:i)'*Ap(:,1:i))*(Ap(:,1:i)')*y; y1=Ap(:,1:i)*w; plot(x,y1,'r',x,y,'*'); r=y-y1; SSEcount(i) = r'*r; BIC(i)=i*log(size(x,1))+size(x,1)*log(SSEcount(i)*(size(x,1)-2)); AIC(i)=2*i+size(x,1)*log(SSEcount(i)*(size(x,1)-2)); end
Вычисление функции правдоподобия и количества хорошо определяемых параметров
xRegression=Ap; yRegression=y; Gam=zeros(size(Ap,2),1); [n,m] = size(xRegression); for j = 1:m activeSet = 1:j; % количество активных признаков [weightM,alphaM,beta,weightH,alphaMH,betaH,gammaH] = ... getLinParam(xRegression,yRegression,activeSet); Gam(j)=gammaH(size(gammaH,2)); [ evid(j) ] = getEvid( xRegression(:, 1:j),yRegression,weightM,alphaM,beta ); end
На одном графике выведем зависимость численного значения критериев (ocь Y) от количества признаков (ось X)
hold on; plot(1:size(AIC,1),AIC,'LineWidth',2,'Color','b') plot(1:size(AIC,1),BIC,'LineWidth',2,'Color','r') plot(1:size(AIC,1),1000*Gam,'LineWidth',2,'Color','g') plot(1:size(AIC,1),-evid','LineWidth',2,'Color','m') hold off;
Из графика видно, что нас интересует только модели с количеством признаков не более 40
hold on; plot(1:40,AIC(1:40),'LineWidth',2,'Color','b') plot(1:40,BIC(1:40),'LineWidth',2,'Color','r') plot(1:40,1000*Gam(1:40),'LineWidth',2,'Color','g') plot(1:40,-(evid(1:40))','LineWidth',2,'Color','m') hold off;
Вычтем среднее значение, чтобы были лучше видны закономерности.
hold on; plot(1:40,AIC(1:40)-mean(AIC(1:40)),'LineWidth',2,'Color','b') plot(1:40,BIC(1:40)-mean(BIC(1:40)),'LineWidth',2,'Color','r') plot(1:40,1000*Gam(1:40)-mean(1000*Gam(1:40)),'LineWidth',2,'Color','g') plot(1:40,-(evid(1:40))'-mean(-(evid(1:40))'),'LineWidth',2,'Color','m') hold off;
Модели с оптимальным количеством параметров, недообученная и переобученная
Исходный код
Zuhba2010ModelComplexity (часть кода написана Алексеем Зайцевым)
Литература
Данная статья была создана в рамках учебного задания.
См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе. |