renuar911's Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Monday, January 27th, 2014

    Time Event
    11:34a
    Глава 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

    << Previous Day 2014/01/27
    [Calendar]
    Next Day >>

About LJ.Rossia.org