Глава 41. Мы с Андрюшей улучшаем линейную регрессию .
.
- Деда, что такое классический метод?
- Если простыми словами, то кем-то гениальным придуманный, многими специалистами проверенный, доказавший свою непогрешимость в миллионах случаях.
- Как здорово, дедуль! А пример можно? Ну, какой ты знаешь классический математический метод?
- Да много их в математике, Андрюшенька. Возьми теорему Пифагора. Чем не классика? Или метод итерации Ньютона, метод решения системы линейных уравнений Гаусса. Видишь, за каждым классическим методом стоит титан математики.
- А еще?
- Ну, раз мы коснулись системы линейных уравнений, то было и развитие этой темы.
- Какое развитие, дедуль?
- А такое. Система линейных уравнений чаще всего решается однозначно, если число уравнений в точности равно числу неизвестных. Это ты знаешь. Но что делать, если число неизвестных больше, чем уравнений? Как тогда быть?
- Не знаю, честно говоря.
- А великий Гаусс догадался! Сейчас я войду в Википедию и прочитаю тебе абзац. Это на страничке "Метод наименьших квадратов". Вот, любуйся:
"До начала XIX в. учёные не имели определённых правил для решения системы уравнений, в которой число неизвестных меньше, чем число уравнений; до этого времени употреблялись частные приёмы, зависевшие от вида уравнений и от остроумия вычислителей, и потому разные вычислители, исходя из тех же данных наблюдений, приходили к различным выводам. Гауссу (1795) принадлежит первое применение метода, а Лежандр (1805) независимо открыл и опубликовал его под современным названием (фр. Méthode des moindres quarrés). Лаплас связал метод с теорией вероятностей, а американский математик Эдрейн (1808) рассмотрел его теоретико-вероятностные приложения. Метод распространён и усовершенствован дальнейшими изысканиями Энке, Бесселя, Ганзена и других."- Деда, ты мог бы на примере показать красоту этого классического метода наименьших квадратов? Хочется руками его пощупать, а не абстрактно слушать ушами.
- Хорошо, Андрюша. Поступим классически: зайдем на форум и поможем решить кому-нибудь задачу на линейную регрессию.
- А если никто не попросит?
- Да быть этого не может! Такие задачи очень часто приходится решать студентам. Обязательно наткнемся. Зайдем в раздел форума " Математическая статистика и Эконометрика" - там обязательно будет, что ищем. А вот и угадал! Смотри, тема: "Метод наименьших квадратов", автор
torya999. Читаем вместе:

- Дедуль, но тут же не линейная зависимость, а экспоненциальная.
- Прологарифмируй обе части, будет линейная.
- Верно, дедуля. И как быть дальше?
- Дальше мы с тобой напишем программку и рассчитаем. Итак, за дело:
dim x(100),y(100)
n=4
x(1)=0:x(2)=1:x(3)=2:x(4)=3
y(1)=13.8:y(2)=7.9:y(3)=6.1:y(4)=2.9
for k=1 to n
sx=sx+x(k)
sy=sy+y(k)
sx2=sx2+x(k)^2
slny=slny+log(y(k))
sxlny=sxlny+x(k)*log(y(k))
next k
b=(n*sxlny-sx*slny)/(n*sx2-(sx)^2)
a=slny/n-b/n*sx
R=exp(a):i=1/b
print R using "###.########",i using "###.########"
for k=1 to n
s2=s2+(y(k)-R*exp(x(k)/i))^2
next k
print s2
Метод наименьших квадратов реализуется по таким формулам:

- Деда, и что же в результате получаем?
- Вот, запускай программу и смотри результаты.
- Всего три числа:
13.90015301 -2.02492785 1.26917 - Все верно. Первые два числа - это
R0 ; i . Третье число - это сумма квадратов отклонений. Можешь строить график, наложи экспериментальные точки и запиши формулу.
- Хорошо! Сейчас сделаем в фотошопе...

- Итак, Андрюшенька, мы задание выполнили и сделали это классическим методом наименьших квадратов.
- Теперь можно кричать: "Ура!", да?
- Еще рано. Теперь испытаем наш метод. Вероятностный метод аппроксимации. Пишем программу:
dim t(100),R(100)
z=.0001
t(1)=0:t(2)=1:t(3)=2:t(4)=3
R(1)=13.8:R(2)=7.9:R(3)=6.1:R(4)=2.9
R00=13.8:i0=2
s1=10^150
for j=1 to 1000000
i=i0*(1+z*(ran()-.5))
R0=R00*(1+z*(ran()-.5))
s=0
for k=1 to 4
t=t(k):R=R(k)
f=R0*exp(-t/i)
s=s+(R-f)^2
next k
if s<=s1 then
print i,R0,s
s1=s
i0=i:R00=R0:fi
next j
Запускай, мой золотой.
- Есть запускать! Смотри, процесс стабилизировался и цыфырьки совсем иные.
- Как иные? Должно получиться одинаково с классикой.
- Нет, деда. И сумма квадратов другая - она меньше, чем была.
- Вот-те раз! Оказывается, наша аппроксимация лучше. Результаты такие:
2.10138 13.6623 1.18956 . Срочно строй график, точки и формулу. Вот ведь как интересно у нас с тобой!
- Одну пятиминутку, дедуль. Тут внимательно нужно... Готово!

Под графиком я привел на черном фоне самый кончик расчетов. Видно, что результаты стабилизировались.
- Так-так. Теперь смотрим и сопоставляем.
- Деда! У нас кривая лучше идет между точек. Это видно невооруженным глазом. Смотри, как у нас рационально прошмыгивает между точек. В классике похуже, как мне кажется.
- И мне так кажется. Как сильно мы улучшили сумму квадратов отклонений?
- Сейчас выясню. Так... На шесть и семь десятых процентов, дедуль!
- Удивительно! Для математики это очень много. Кто бы нам помог в этом разобраться?
- А ошибки быть не может?
- Все может. Но все равно мы с тобой молодцы! Давай вручную рассчитаем сумму квадратичных отклонений. Справишься?
- Справлюсь, конечно... Готово!

- Да, Андрюшенька, пожалуй нам удалось улучшить классический метод наименьших квадратов. Сумма наших квадратов меньше!
28 января 2014 г.
г. Сидней
Current Mood:
energetic