Você está na página 1de 53

МАТЕМАТИЧКИ ФАКУЛТЕТ

СТАТИСТИЧКИ
СОФТВЕР 3
ВЕЖБЕ
Contents
Основне информације ................................................................................................................................. 4
Увод............................................................................................................................................................... 4
Какве то везе има са статистиком? .......................................................................................................... 4
Какве то везе има са машинским учењем? ............................................................................................. 4
Шта је статистичко учење? ....................................................................................................................... 4
Зашто радимо у 𝑹 ? .................................................................................................................................. 4
Да ли је овом предмету стварно место на В-смеру? .............................................................................. 5
Резултати прошлих семинарских радова ................................................................................................. 5
Шта ћемо да научимо до краја предмета? .............................................................................................. 5
Друге примене .......................................................................................................................................... 6
Статистички софтвер 3 ........................................................................................................................... 6
Предзнање ............................................................................................................................................. 6
Детаљније о курсу ................................................................................................................................. 6
Врсте (машинског) учења ........................................................................................................................... 6
Вођено учење ........................................................................................................................................... 6
Регресија ................................................................................................................................................... 7
Шта је регресија?................................................................................................................................... 7
Врсте регресије ..................................................................................................................................... 7
Мере квалитета ..................................................................................................................................... 7
Теорема Гаус-Маркова.......................................................................................................................... 7
Примене ................................................................................................................................................. 7
Класификација .......................................................................................................................................... 7
Шта је класификација? .......................................................................................................................... 7
Врсте класификације ................................................................................................................................ 7
Алгоритми класификације ........................................................................................................................ 7
Мере квалитета ..................................................................................................................................... 8
Примене ................................................................................................................................................. 8
Поставка проблема ...................................................................................................................................... 8
(Проста) Линеарна регресија : поставка ..................................................................................................... 8
(Проста) Линеарна регресија : грешке ........................................................................................................ 9
(Проста) Линеарна регресија : оцене .......................................................................................................... 9
(Проста) Линеарна регресија : значајност параметра .............................................................................. 10
Вишедимензиони случај линеарне регресије ........................................................................................... 10
Креирање нових променљивих.................................................................................................................. 10
Примери- кодови у 𝑹 −у ............................................................................................................................. 10
Пример 1: ................................................................................................................................................ 10
Решење: .................................................................................................................................................. 11

1
Пример 2: ................................................................................................................................................ 13
Решење: .................................................................................................................................................. 13
Пример 3: ................................................................................................................................................ 14
Решење: .................................................................................................................................................. 14
Пример 4: ................................................................................................................................................ 17
Поставка проблема .................................................................................................................................... 24
Грешке......................................................................................................................................................... 25
Логистичка регресија .................................................................................................................................. 25
Логистичка регресија : поставка ................................................................................................................ 25
Логистичка регресија : оцене ..................................................................................................................... 25
Логистичка регресија : значајност параметара ......................................................................................... 26
Логистичка регресија : класификација....................................................................................................... 26
Матрица конфузије ..................................................................................................................................... 26
Мере квалитета из матрице конфузије ..................................................................................................... 27
Логистичка регресија : > 2 предиктора ...................................................................................................... 27
Логистичка регресија : > 2 класе ................................................................................................................ 27
Логистичка регресија : > 2 класе, класификација ..................................................................................... 28
Примери- кодови у 𝑹 −у ............................................................................................................................. 28
Пример 1 : ............................................................................................................................................... 28
Пример 2: База „𝑺𝒎𝒂𝒓𝒌𝒆𝒕“ .................................................................................................................... 30
𝒌 −најближих суседа (КНС)........................................................................................................................ 34
𝒌 −најближих суседа (КНС) : поставка ...................................................................................................... 34
𝒌 −најближих суседа (КНС) : оцена ........................................................................................................... 34
𝒌 −најближих суседа (КНС) : зависност од параметра 𝒌 ......................................................................... 34
ЛДА .............................................................................................................................................................. 35
ЛДА – оцене априорне расподеле ............................................................................................................. 35
ЛДА – претпоставке .................................................................................................................................... 35
ЛДА – класификатор................................................................................................................................... 36
ЛДА – оцене ................................................................................................................................................ 36
ЛДА – у случају више од једног предиктора .............................................................................................. 36
КДА .............................................................................................................................................................. 36
Упоређивање метода ................................................................................................................................. 37
Примери- кодови у 𝑹 −у ............................................................................................................................. 37
Редукција димензија : Метода 𝑷𝑪𝑨 ........................................................................................................... 42
Редукција димензија : Метода 𝑷𝑪𝑨 – поставка ......................................................................................... 42
Редукција димензија : Метода 𝑷𝑪𝑨 – суштина.......................................................................................... 43
Редукција димензија : Метода 𝑷𝑪𝑨 – мане ............................................................................................... 43
Редукција димензија: Метода 𝒕 − 𝑺𝑵𝑬....................................................................................................... 43

2
Редукција димензија: Метода 𝒕 − 𝑺𝑵𝑬 укратко ......................................................................................... 43
Примери- кодови у 𝑹 −у ............................................................................................................................. 43
Унакрсна валидација – увод ...................................................................................................................... 50
Унакрсна валидација – поставка ............................................................................................................... 51
Примери- кодови у 𝑹 −у ............................................................................................................................. 51

3
Увод у статистичко и машинско учење
Основне информације
• Сајт : http://www.matf.bg.ac.rs/p/-daniels
• Е-маил : danijel_subotic@matf.bg.ac.rs
• Поени :
− 5 поена присуство
− 15 поена самостални рад на часу (3 пута по 5 поена)
− 85 поена семинарски рад и његова одбрана (семинарски без одбране 0 поена)
• Курикулум курса
− Рад са сликама у окружењу 𝑅𝑆𝑡𝑢𝑑𝑖𝑜 помоћу пакета 𝑖𝑚𝑎𝑔𝑒𝑟
− Основни примери алгоритама класификације и регресије, пакет 𝐼𝑆𝐿𝑅
− Миноловац и остале примене
• Литература
− Hastie, Tibshirani: ”Introduction to Statistical Learning with applications in R”
− Hastie, Tibshirani: ”Elements of Statistical Learning”
− Bishop: ”Pattern Recognition and Machine Learning”
− Murphey: ”Machine Learning: A Probabilistic Perspective”
− Кодови, слајдови и непосредно предавања са часова

Увод
Какве то везе има са статистиком?
• У току курса видећемо да већина концепата и алгоритама које ћемо користити су у потпуности
математичке природе (математичка статистика)
• Теореме су формулисане и (најчешће) доказане у домену статистике
• Курс се држи на смеру Математика, модул Статистика, актуарска и финансијска математика

Какве то везе има са машинским учењем?


• Циљ области машинског учења се може формулисати на следећи начин: да науче рачунар да
сам изводи закључке након што је извршен одређени „тренинг“ или обучавање исте
• На овом курсу један од циљева ће свакако бити да научимо рачунар да сам извршава неке
одређене наредбе

Шта је статистичко учење?


• Тешко је одмах објаснити разлику између машинског и статистичког учења
• Једна од разлика је свакако област којој припарају : статистичко учење је то што је
занимљивије статистичарима, а машинско учење људима рачунарске и информатичке сфере
• Мада сваким наредним даном је све теже наћи јасну границу

Зашто радимо у 𝑹 ?
• Одабран је програмски језик 𝑅 и окружење 𝑅𝑆𝑡𝑢𝑑𝑖𝑜, јер је курс на В-смеру чији су студенти већ
имали додир са тим програмским језиком и окружењем
• Алтернатива би био 𝑃𝑦𝑡ℎ𝑜𝑛, но да не би курс постао преопширан због предавања основа
𝑃𝑦𝑡ℎ𝑜𝑛 −а, ипак је изабран 𝑅

4
Да ли је овом предмету стварно место на В-смеру?
• Апсолутно да
• На међународној конференцији која се одржала средином месеца у Београду под називом
Data Science Conference 4.0 било више од 1000 људи. На којој је било више од 50 људи са
МАТФ-а(од тих 50 је више од пола било тренутно или бивших студената В-смера).

Резултати прошлих семинарских радова


Шта ћемо да научимо до краја предмета?
• И поред тога што је ово само уводни курс и има за циљ да представи бар неке могућности ових
области у примени, ми ћемо чак у току истог креирати неке релативно примењиве ствари
• Примери :
− Налажење разлика на сликама

− Идентификација облика

− Миноловац

5
Друге примене
• Навешћемо такође неке друге значајне примене и успехе области(које нећемо обрађивати на
часовима):
− 𝐷𝑒𝑒𝑝 𝐵𝑙𝑢𝑒 у шаху на крају 20. почетком 21.века
− 𝐴𝑙𝑝ℎ𝑎𝐺𝑜 у игри ГО
− 𝐴𝑙𝑝ℎ𝑎𝐺𝑜 𝑍𝑒𝑟𝑜 2017.године.
− Глобална аутоматизација процеса: управљање аутомобилима, тотално роботизовано
складиште
− Повећање персонализације у продаји и реклами
− Препознавање говора, четботови
− И многе друге(неке од њих ће можда бити споменуте и у току предавања)

Статистички софтвер 3
Овај курс донекле прати ЛСМ(Линеарни Статистички Модели)

Предзнање
• Познавање програмског језика 𝑅 и основних функција у њему(СС1,СС2)
• Глобално разумевање статистике и података
• Дубинско разумевање математичких метода(Анализа, Линеарна алгебра) и метода у
математичкој статистици( Математичка статистика и Теорија вероватноћа)

Детаљније о курсу
• Уводни час(1 недеља)
• Вођено учење: Кратак увод у појмове регресије и класификације (1 недеља)
• Алгоритми класификације: логичка регресија, 𝐿𝐷𝐴 и 𝑄𝐷𝐴 методе, метода 𝑘 најближих суседа и
још неке (1-2 недеље)
• 𝑃𝐶𝐴, алтернатива 𝑡 − 𝑆𝑀𝐸 (питају на разговору за посао). Скупови за учење, валидацију и
тестирање- Њихов значај. (1 недеља)
• Кратак увод у Невођено учење-кластеризација (0.5-1 недеља)
• Како рачунар види слике и обрада слика (1 недеља)
• Основне функције за рад са сликама. Пакет 𝑖𝑚𝑎𝑔𝑒𝑟 (1 недеља)
• Снага Монте Карло симулација (1 недеља)
• Миноловац: детекција граница, класификација симбола, решавање (2-3 недеље)
• Шта се све користи у данашњем свету: Неуронске мреже, учење условљавањем, појачани
градијенти (1 недеља)

Врсте (машинског) учења


• Глобалне поделе
− Вођено учење (supervised learning)
− Невођено учење (unsupervised learning)
− Полувођено учење (semisupervised learning)
− Учење условљавањем (reinforcement learning)

Вођено учење
• Вођено учење се такође дели на два глобална проблема:
− Регресија
− Класификација

6
Регресија
Шта је регресија?
• Регресија представља зависност једне непрекидне случајне величине од друге (или других)
случајне величине
• Регресиона фунција: 𝑓(𝑋) = 𝐸(𝑌|𝑋)

Врсте регресије
• Има много различитих начина да се регресије поделе у неке групе и врсте
− Параметарске и Непараметарске
− (Проста) линеарна, генерализана линеарна, нелинеардна
− Једнострука, Полиномијална и Вешеструка (multiple)
− ...

Мере квалитета
• Природна мера квалитета која се најчешће користи је тзв 𝐿2 мера (𝐿2 терминологија се
углавном корист када су предикције у питању, а и више нагиње ка литератури машинског
учења)
• Из ЛСМ-а чули за Методу најмањих квадрата (last squares method)
2
𝐸(𝑓̂(𝑋) − 𝑌)

Теорема Гаус-Маркова
• У класи свих непристрасних линеарних оцена параметара, оцена добијена методом најмањих
квадрата има најмању дисперзију.

Примене
• Значај регресије се огледа у две кључне ствари:
− Разумевање природе везе датих промењивих (inference)
− Предикције

Класификација
Шта је класификација?
• Класификација је проблем одређивања којој класи припада елемент(или више њих)

Врсте класификације
• Бинарана
• 𝑛 −арна

Алгоритми класификације
• Логистичка регресија
• 𝐿𝐷𝐴 и 𝑄𝐷𝐴
• (наивни) Бајесовски класификатор
• 𝑘 најближих суседа
• Дрвета одлучивања
• Појачани градијенти (Gradient Boosting)
• Неуронске мреже
• И много других

7
Мере квалитета
• Матрица конфузије и све што из ње проистиче

Примене
• Непосредно на овом курсу ћемо видети једну примену у класификацији симбола на таблама
миноловца

Увод у регресије
Поставка проблема

Нека су дати следећи подаци 𝑋 = (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) , 𝑌 = (𝑦1 , 𝑦2 , … , 𝑦𝑛 ) , где (𝑥𝑖 , 𝑦𝑖 ) представља добијене
податке за 𝑖 −ти елемент.

На пример: 𝑥 −висина,а 𝑦 − тежина 𝑖 − те особе. Док са 𝑋 и 𝑌 записујемо цео вектор за свих


𝑛 елемената датих обележја.

Циљ регресије је наћи функцију 𝑓(∙), такву да 𝑌 = 𝑓(𝑋) , што се такође може записати као

𝑦𝑖 = 𝑓(𝑥𝑖 ) , ∀𝑖 ∈ 1, 𝑛

Променљиву 𝑋 називамо независном променљивом, односно предиктором, док 𝑌 називамо зависном


или циљном променљивом.

Већ смо помињали да постоји више начина да се апроксимира (оцени) функција 𝑓(∙), ми ћемо овде
детаљније размотрити линеарну регресију.

(Проста) Линеарна регресија : поставка

Како је у општем случају проблем регресије веома сложен покушавамо то да сведемо на језик
линеарне алгебре. Тада функцију 𝑓(∙) представљамо у следећем облику 𝑓̂(𝑥) = 𝛽1 ∙ 𝑋 + 𝛽0 .

Као што се може брзо закључити то је једначина праве.


Графички параметар 𝛽0 представља тачку у којој права сече ординату, док 𝛽1 представља нагиб
праве, односно допринос једног помераја вредности предиктора на циљну променљиву.
8
Како ипак радимо са оценом (апроксимацијом), у овом случају линеарном, то наша оцењена вредност
𝑌̂ = 𝛽1 ∙ 𝑋 + 𝛽0 неће бити увек једнака правој (измереној) вредности циљне променљиве 𝑌.

У којим случајевима ће 𝑌̂ бити баш једнако 𝑌? Наведите неколико примера када ће идеално да
погађа.

(Проста) Линеарна регресија : грешке

Дакле, у општем случају правимо неку грешку. Циљ је некако измерити и минимизовати исту.

Грешку 𝑌 − 𝑌̂ ћемо означавати ознаком 𝜖 = 𝑌 − 𝑌̂ = 𝑌 − 𝛽1 ∙ 𝑋 − 𝛽0 .


Та грешка се назива резидуалом.

Намеће се неколико природних начина мерења грешке помоћу 𝐿1 (mean absolute error value)

𝑀𝐴𝐸(𝑌, 𝑌̂) = 𝔼(|𝜖|)

и 𝐿2 (mean squared error value)

𝑀𝑆𝐸(𝑌, 𝑌̂) = 𝔼(𝜖 2 )

Са одговарајућим оценама за 𝐿1 :
𝑛
1
̂ (𝑌, 𝑌̂) = ∑|𝜖𝑖 |
МАЕ
𝑛
𝑖=1

и за за 𝐿2 :
𝑛
1
̂ (𝑌, 𝑌̂) =
М𝑆𝐸 ∑ 𝜖𝑖2
𝑛
𝑖=1

(Проста) Линеарна регресија : оцене

Метода најмањих квадрата је заправо налажење таквих вредности за параметре 𝛽0 и 𝛽1 који ће да


минимизују 𝑀𝐴𝐸. Те вредности су :

𝐸(𝑋𝑌) − 𝐸(𝑋)𝐸(𝑌)
𝛽1 =
𝐷(𝑋)

𝛽0 = 𝐸(𝑌) − 𝛽1 𝐸(𝑋)

Односно оцене :

∑𝑛𝑖=1 𝑋𝑖 𝑌𝑖 − 𝑛 ∙ 𝑋̅𝑌̅
̂1 =
𝛽 2
̅̅̅
𝑆𝑋

̂0 = 𝑌̅ − 𝛽
𝛽 ̂1 𝑋̅

9
(Проста) Линеарна регресија : значајност параметра

Након што смо добили оцену поставља се питање њеног квалитета. У ту сврху користимо Валдов
(Wald’s) статистички тест.
̂
𝛽𝑖
За свако 𝑖 од 0 до 𝑘 , где је 𝑘 − број предиктора, тестирамо 𝐻0 ∶ 𝛽𝑖 = 0 , помоћу тест статистике 𝑇 = ̅̅̅̅̅
𝑆 𝛽𝑖

Вишедимензиони случај линеарне регресије

У случају да је 𝑋 𝑚 −димензиони.

Прича и идеја остаје иста, само се рачун значајно компликује.

𝑌̂ = 𝛽0 + 𝛽1 ∙ 𝑋 (1) + 𝛽2 ∙ 𝑋 (2) + ⋯ + 𝛽𝑚 ∙ 𝑋 (𝑚)

Радићемо примере, али нећемо овде изводити те оцене.

Креирање нових променљивих

Саветује се да се за дату променљиву 𝑋 увек направи и нека изведена променљива из ње попут:

• 𝑋 2 , односно квадрирање
• 𝑋 𝑘 , односно генерално степеновање потребног/потребних степена
• log(𝑋) , логаритмовање са произвољном основом
• 𝑔(𝑋) , за неку одабрану функцију 𝑔(∙)

Примери- кодови у 𝑹 −у

У програмском језику 𝑅 за дате векторе 𝑋 и 𝑌 регресија се позива помоћу функције 𝑙𝑚(𝑌~𝑋), за


детаљнији опис функције, њених параметара и вредности које враћа : ? lm

Како нам је циљ да одрадимо неку логистичку регресију, тачније више њих, прво морамо да се
упознамо са мало лакшим идејама. А то су линеарне регресије.

Пример 1:

Нека су дата два вектора "𝑋" и "𝑌", који представљају следеће:

Проток саобраћаја у хиљадама аутомобила у току дана:

> x = c(8.3, 9.3, 12.1, 12.3, 17.0, 17.3, 24.3, 24.5, 33.6)

Присуство олова у кори дрвећа:

> y = c(227, 312, 362, 521, 539, 728, 945, 1000, 1263)

Оценити коефицијенте модела 𝑦 = 𝑎𝑥 + 𝑏 , где су 𝑎, 𝑥 вектори, a 𝑎 и 𝑏 неки бројеви.

10
Решење:
Применом линеарне регресије са средње квадратном греском:

> model = lm(y ~ x)


> summary(model)

Call:
lm(formula = y ~ x)

Residuals:
Min 1Q Median 3Q Max
-90.054 -51.937 1.097 61.059 86.551

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -73.356 58.131 -1.262 0.247
x 41.318 3.008 13.736 2.56e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 71.35 on 7 degrees of freedom


Multiple R-squared: 0.9642, Adjusted R-squared: 0.9591
F-statistic: 188.7 on 1 and 7 DF, p-value: 2.556e-06

> plot(model)

> beta_1=model$coefficients[2]
> beta_0=model$coefficients[1]

11
> plot(x, y)

Регресиона права :

> abline(beta_0, beta_1, col="red")

НАПОМЕНА: Исти резултат се добије и позивом abline(model, col="red")

Тако додајемо регресиону праву на график.

Предвиђање на основу овог модела за вредности 𝑥 = 5, 13.3, 28, 30 и 100.

> predict(model, newdata=data.frame(x=c(5, 13.3, 28, 30, 100)))


1 2 3 4 5
133.2348 476.1764 1083.5549 1166.1914 4058.4697

12
Пример 2:
Нека су дата два вектора "𝑋" и "𝑌", који представљају следеће:

Број сати учења:

> x = c(4, 9, 10, 14, 4, 7, 12, 22, 1, 3, 8, 11, 5, 6, 10, 11, 16, 13, 13, 10)

Резултати теста:

> y = c(390, 580, 650, 730, 410, 530, 600, 790, 350, 400, 590, 640, 450, 520, 690, 6
90, 770, 700, 730, 640)

Потребно је опет покренути линеарну регресију и одредити коефицијенте модела y=ax+b , где су a,x в
ектори, a a и b неки бројеви, као и прокоментарисати да ли је модел квалитетан.

Решење:
> model = lm(y ~ x)
> summary(model)

Call:
lm(formula = y ~ x)

Residuals:
Min 1Q Median 3Q Max
-120.347 -29.308 9.928 33.734 83.570

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 353.165 24.337 14.51 2.24e-11 ***
x 25.326 2.291 11.05 1.87e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 49.72 on 18 degrees of freedom


Multiple R-squared: 0.8716, Adjusted R-squared: 0.8645
F-statistic: 122.2 on 1 and 18 DF, p-value: 1.868e-09

Као што видимо у овом случају оба коефицијента су од значаја (тј нису једнаки нули, према тесту), као
и да је вредност за 𝑅^2 поприлично висока, што показује да је модел довољно квалитетан.
Често се у литератури користи: можемо рећи да нас модел на 86% описује променљиву 𝑌.

> plot(x, y)

13
> beta_1=25.326
> beta_0=353.165
> abline(beta_0, beta_1, col="red")

Видимо да постоји скоро да линеарна зависност међу бројем сати учења и резултатима.

Пример 3:
Ово је још један пример када линеарна регресија у почетном облику не пролази добро.

Нека су дате "𝑞" и "𝑤", на следећи начин:

> q = seq(-1, 1, 0.05)


> w = q^2 + rnorm(length(q), 0, 0.05)

Наћи регресиону праву за 𝑤 у односу на 𝑞.

Решење:
> model = lm(w ~ q)
> summary(model)

Call:
lm(formula = w ~ q)

Residuals:
Min 1Q Median 3Q Max
-0.45350 -0.28699 -0.06746 0.25976 0.63283

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.332936 0.051042 6.523 9.75e-08 ***
q 0.009829 0.086277 0.114 0.91
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3268 on 39 degrees of freedom


Multiple R-squared: 0.0003327, Adjusted R-squared: -0.0253
F-statistic: 0.01298 on 1 and 39 DF, p-value: 0.9099

14
Видимо да немамо "звездице" за 𝑞 − није значајна, и 𝑝 −вредност је близу 1.

Вредности за 𝑅 − 𝑠𝑞𝑢𝑎𝑟𝑒𝑑 треба да буду што ближи јединици док у овом случају су око 0, што указује
на тотални промашај линеарне регресије.

Погледајмо како то изгледа на графику:

> plot(q, w)

> beta_1 = model$coefficients[2]


> beta_0 = model$coefficients[1]
> abline(beta_0, beta_1, col="red", pch=20)

Овакве ствари се дешавају из простог разлога што веза није линеарна.


15
Пробајмо квадратни модел:

> model2 = lm(w ~ I(q) + I(q^2))


> summary(model2)

Call:
lm(formula = w ~ I(q) + I(q^2))

Residuals:
Min 1Q Median 3Q Max
-0.114919 -0.046940 -0.005465 0.054952 0.094058

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.017738 0.014204 -1.249 0.219
I(q) 0.009829 0.015998 0.614 0.543
I(q^2) 1.001927 0.030260 33.110 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.0606 on 38 degrees of freedom


Multiple R-squared: 0.9665, Adjusted R-squared: 0.9647
F-statistic: 548.3 on 2 and 38 DF, p-value: < 2.2e-16

> plot(w ~ q)

16
> points(q, fitted(model2), col="red", pch=20)

Овде је од значаја само параметар уз 𝑞^2 , што и има смисла скроз (просто смо тако креирали вектор
𝑤). И видимо да је регресија испала довољно добра.

Надаље ће нам бити потребан пакет "𝑀𝐴𝑆𝑆" , иначе је од великог значаја, много различитих тестова,
начина оцењивања и сличног се налази баш ту , као и пакет "𝐼𝑆𝐿𝑅".

> library(MASS)
> library(ISLR)

Пример 4:

Обична линеарна регресија на примеру базе "𝐵𝑜𝑠𝑡𝑜𝑛".

> Boston

Функција "𝑛𝑎𝑚𝑒𝑠" враћа називе променљивих у датој бази.

> names(Boston)
[1] "crim" "zn" "indus" "chas" "nox" "rm" "age" "dis" "r
ad"
[10] "tax" "ptratio" "black" "lstat" "medv"

Функција “help“описује шта представља та база. Везана је за учесталост кршења закона у Бостону.

Плотујемо следеће и добијамо график распшености променљиве "medv" у односу на "lstat".

17
> plot(medv ~ lstat, data=Boston)

Следећи позив се већ односи на линеарни модел, функција 𝑙𝑚 = 𝑙𝑖𝑛𝑒𝑎𝑟 𝑚𝑜𝑑𝑒𝑙 враћа најбољи
линеарни модел који одговара датим подацима.

> fit1 = lm(medv ~ lstat, data=Boston)


> fit1

Call:
lm(formula = medv ~ lstat, data = Boston)

Coefficients:
(Intercept) lstat
34.55 -0.95

Од значаја су нам оцене коефицијената.

Да бисмо детаљније видели како и шта се дешава, позивамо 𝑠𝑢𝑚𝑚𝑎𝑟𝑦():

> summary(fit1)

Call:
lm(formula = medv ~ lstat, data = Boston)

Residuals:
Min 1Q Median 3Q Max
-15.168 -3.990 -1.318 2.034 24.500

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 34.55384 0.56263 61.41 <2e-16 ***
lstat -0.95005 0.03873 -24.53 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 6.216 on 504 degrees of freedom


Multiple R-squared: 0.5441, Adjusted R-squared: 0.5432
F-statistic: 601.6 on 1 and 504 DF, p-value: < 2.2e-16

18
И видимо да су обе променљиве значајне.

Следећим позивом можемо да додамо регресиону праву на график :

> abline(fit1, col="red")

> names(fit1)
[1] "coefficients" "residuals" "effects" "rank" "fitted.values" "a
ssign" "qr"
[8] "df.residual" "xlevels" "call" "terms" "model"

Овде можемо да видимо интервале поверења за оцене наших коефицијената модела.

> confint(fit1)
2.5 % 97.5 %
(Intercept) 33.448457 35.6592247
lstat -1.026148 -0.8739505

Функција 𝑝𝑎𝑖𝑟𝑠() враћа све могуће графике распршености наше базе, тј. помоћу ње можемо понекад и
да установимо где одмах имамо згодну линеарну зависност и самим тим да применимо линеарну
регресију. Једини проблем је , што је згодно представити само по 2 променљиве на графику, већ
зависност 3 променљиве није лако и лепо уочљива на графику, а веће димензије чак и не можемо да
нацртамо.

Надаље, линеарна регресија се може користи и на више променљивих.

19
> fit2 = lm(medv ~ lstat + age, data=Boston)
> summary(fit2)

Call:
lm(formula = medv ~ lstat + age, data = Boston)

Residuals:
Min 1Q Median 3Q Max
-15.981 -3.978 -1.283 1.968 23.158

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 33.22276 0.73085 45.458 < 2e-16 ***
lstat -1.03207 0.04819 -21.416 < 2e-16 ***
age 0.03454 0.01223 2.826 0.00491 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 6.173 on 503 degrees of freedom


Multiple R-squared: 0.5513, Adjusted R-squared: 0.5495
F-statistic: 309 on 2 and 503 DF, p-value: < 2.2e-16

При овом запису значи да смо узели у обзир све могуће променљиве које има база.

> fit3 = lm(medv ~., data=Boston)


> summary(fit3)

Call:
lm(formula = medv ~ ., data = Boston)

Residuals:
Min 1Q Median 3Q Max
-15.595 -2.730 -0.518 1.777 26.199

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.646e+01 5.103e+00 7.144 3.28e-12 ***
crim -1.080e-01 3.286e-02 -3.287 0.001087 **
zn 4.642e-02 1.373e-02 3.382 0.000778 ***
indus 2.056e-02 6.150e-02 0.334 0.738288
chas 2.687e+00 8.616e-01 3.118 0.001925 **
nox -1.777e+01 3.820e+00 -4.651 4.25e-06 ***
rm 3.810e+00 4.179e-01 9.116 < 2e-16 ***
age 6.922e-04 1.321e-02 0.052 0.958229
dis -1.476e+00 1.995e-01 -7.398 6.01e-13 ***
rad 3.060e-01 6.635e-02 4.613 5.07e-06 ***
tax -1.233e-02 3.760e-03 -3.280 0.001112 **
ptratio -9.527e-01 1.308e-01 -7.283 1.31e-12 ***
black 9.312e-03 2.686e-03 3.467 0.000573 ***
lstat -5.248e-01 5.072e-02 -10.347 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.745 on 492 degrees of freedom


Multiple R-squared: 0.7406, Adjusted R-squared: 0.7338
F-statistic: 108.1 on 13 and 492 DF, p-value: < 2.2e-16

20
Функција 𝑢𝑝𝑑𝑎𝑡𝑒(𝑚𝑜𝑑𝑒𝑙, . . . ) мења модел на задати начин.Просто да не бисмо увек правили од нуле.

> fit4 = update(fit3, ~. -age -indus)


> summary(fit4)

Call:
lm(formula = medv ~ crim + zn + chas + nox + rm + dis + rad +
tax + ptratio + black + lstat, data = Boston)

Residuals:
Min 1Q Median 3Q Max
-15.5984 -2.7386 -0.5046 1.7273 26.2373

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 36.341145 5.067492 7.171 2.73e-12 ***
crim -0.108413 0.032779 -3.307 0.001010 **
zn 0.045845 0.013523 3.390 0.000754 ***
chas 2.718716 0.854240 3.183 0.001551 **
nox -17.376023 3.535243 -4.915 1.21e-06 ***
rm 3.801579 0.406316 9.356 < 2e-16 ***
dis -1.492711 0.185731 -8.037 6.84e-15 ***
rad 0.299608 0.063402 4.726 3.00e-06 ***
tax -0.011778 0.003372 -3.493 0.000521 ***
ptratio -0.946525 0.129066 -7.334 9.24e-13 ***
black 0.009291 0.002674 3.475 0.000557 ***
lstat -0.522553 0.047424 -11.019 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.736 on 494 degrees of freedom


Multiple R-squared: 0.7406, Adjusted R-squared: 0.7348
F-statistic: 128.2 on 11 and 494 DF, p-value: < 2.2e-16

И не мора само плус да узме између предиктора, може се јавити нпр. и производ.

НАПОМЕНА: Ако ставимо 𝑥 ∗ 𝑦, тада се у модел укључују следећи предиктори: 𝑥, 𝑦 и 𝑥 ∗ 𝑦 (који се у


позваном summary означава као 𝑥: 𝑦). Ако бисмо желели да позовемо само за предиктор 𝑥 ∗ 𝑦, тада
бисмо морали да покренемо 𝑙𝑚(𝑧~ 𝐼(𝑥 ∗ 𝑦)) или у нашем случају 𝑓𝑖𝑡 = 𝑙𝑚(𝑚𝑒𝑑𝑣~𝐼(𝑙𝑠𝑡𝑎𝑡 ∗ 𝑎𝑔𝑒))

> fit5 = lm(medv ~ lstat*age, data=Boston)


> summary(fit5)

Call:
lm(formula = medv ~ lstat * age, data = Boston)

Residuals:
Min 1Q Median 3Q Max
-15.806 -4.045 -1.333 2.085 27.552

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 36.0885359 1.4698355 24.553 < 2e-16 ***
lstat -1.3921168 0.1674555 -8.313 8.78e-16 ***
age -0.0007209 0.0198792 -0.036 0.9711
lstat:age 0.0041560 0.0018518 2.244 0.0252 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 6.149 on 502 degrees of freedom


Multiple R-squared: 0.5557, Adjusted R-squared: 0.5531
F-statistic: 209.3 on 3 and 502 DF, p-value: < 2.2e-16

21
Када ставимо 𝐼(𝑥^2) – тиме тражимо да 𝑥^2 посматра тотално независно од 𝑥.

> fit6 = lm(medv ~ I(lstat) + I(lstat^2), data=Boston)


> summary(fit6)

Call:
lm(formula = medv ~ I(lstat) + I(lstat^2), data = Boston)

Residuals:
Min 1Q Median 3Q Max
-15.2834 -3.8313 -0.5295 2.3095 25.4148

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 42.862007 0.872084 49.15 <2e-16 ***
I(lstat) -2.332821 0.123803 -18.84 <2e-16 ***
I(lstat^2) 0.043547 0.003745 11.63 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 5.524 on 503 degrees of freedom


Multiple R-squared: 0.6407, Adjusted R-squared: 0.6393
F-statistic: 448.5 on 2 and 503 DF, p-value: < 2.2e-16

> plot(medv ~ lstat,data = Boston)


> points(lstat, fitted(fit6), col="red", pch=20)

Видимо да је квадратна регресија овде била прецизнија од обичне.

22
Хоћемо да пробамо са већим степеном, могли смо у 𝑓𝑖𝑡6 да ставимо 𝑝𝑜𝑙𝑦(𝑙𝑠𝑡𝑎𝑡, 2)добићемо исто.

> fit7 = lm(medv ~ poly(lstat, 4))


> summary(fit7)

Call:
lm(formula = medv ~ poly(lstat, 4))

Residuals:
Min 1Q Median 3Q Max
-13.563 -3.180 -0.632 2.283 27.181

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 22.5328 0.2347 95.995 < 2e-16 ***
poly(lstat, 4)1 -152.4595 5.2801 -28.874 < 2e-16 ***
poly(lstat, 4)2 64.2272 5.2801 12.164 < 2e-16 ***
poly(lstat, 4)3 -27.0511 5.2801 -5.123 4.29e-07 ***
poly(lstat, 4)4 25.4517 5.2801 4.820 1.90e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 5.28 on 501 degrees of freedom


Multiple R-squared: 0.673, Adjusted R-squared: 0.6704
F-statistic: 257.8 on 4 and 501 DF, p-value: < 2.2e-16

> points(lstat, fitted(fit7), col="blue", pch=20)

Видимо да је незначајно боља, али зато можда оверфитује модел, што боље свакако да избегнемо.

23
Увод у класификације
Поставка проблема

Линеарна регресија је одличан алат када имамо непрекидну зависну променљиву, а шта да радимо у
случају када је то ипак дискретна случајна величина. Специјално, када узима вредности 0 и 1? Тада
морамо да прибегнемо идејама класификаторем јер линеарна регресија више не може квалитетно да
обави тражено.

Једна од основних метода је наравно логистичка регресија. Назив „класификација“ долази из просте
идеје што је нама циљ да неки нови податак према неким већ познатим вредностима
сместимо/класификујемо у неку од унапред одређених класа.

Неки примери када је проблем класификације најбољи алат:

• Нека особа долази до амбуланте са симптомима који могу 3 болести да узрокују. Коју од те три
има дата особа?
• Банкарски онлајн сервис мора да „уме“ да одреди да ли је трансакција била валидна на основу
𝐼𝑃 −адресе, претходним трансакцијама итд

И наравно слично као у регресији желимо да процена буде добра, тј. не само да „добро“ одреди већ
постојећи систем, већ и да уме да протумачи новодобијени податак на прави начин.

Нека су дати 𝑋 = (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) и 𝑌 = (𝑦1 , 𝑦2 , … , 𝑦𝑛 ) само овог пута је 𝑦𝑖 дискретно и категоричко, што би
значило да сваки од њих представља неку класу међу унапред познатим могућим класама.

На пример: 𝑋 је резултат поена на пријемном испиту, док је 𝑌 да ли је особа примљена (1) или не (0),
самим тим је дато две могуће класе и све су познате.

Слично као и у регресији 𝑋 може да буде и вишедимензиона променљива.

Циљ је наћи такву функцију 𝑓(∙) која ће за дати 𝑋 одредити класу којој припада, дакле опет је
формула: 𝑌 = 𝑓(𝑋) , што се такође може записати као

𝑦𝑖 = 𝑓(𝑥𝑖 ) , ∀𝑖 ∈ 1, 𝑛

Опет је питање како апроксимирати (оценити) функцију 𝑓(∙).

Неки од могућих начина оценивања:

• Логистичка регресија
• Дискриминаторне методе: 𝐿𝐷𝐴, 𝑄𝐷𝐴
• 𝑘 −најближих суседа 𝐾𝑁𝑁
• и други...

Свака направљена оцена се назива класификатором.

24
Грешке

Овог пута природна функција грешке је заправо индикаторска функција


𝑛
̂𝑖 }
𝐸𝑟𝑟 = ∑ 𝐼{𝑌𝑖 ≠ 𝑌
𝑖=1

Увек нас занима колико је добијен класификатор погрешио, односно погодио. Многе битне
информације се извлаче из матрице конфузије.

Логистичка регресија

Поставићемо проблем у случајну бинарне класификације.

Нека 𝑌 узима вредности из скупа {0,1}. Означимо 𝑃{𝑌 = 1|𝑋} = 𝑝(𝑋) , тада је 𝑃{𝑌 = 0|𝑋} = 1 − 𝑝(𝑋).

Питање је само како оценити функцију 𝑝(𝑋).

У случају регресије смо то оцењивали са 𝑝(𝑋) = 𝛽1 ∙ 𝑋 + 𝛽0 , док овде то нема много смисла.

е𝛽1∙𝑋+𝛽0
Логистичка регресија заправо налаже да се она оцени на следећи начин 𝑝(𝑋) =
1+е𝛽1∙𝑋+𝛽0

Логистичка регресија : поставка

Ова метода је добила назив баш због оваквог изгледа апроксимације функције 𝑝(𝑋), јер таква
функција се назива логистичка функција.

Али зашто класификатор у свом називу има реч „регресија“?

Сада је циљ само оценити 𝛽0 и 𝛽1 . То можемо урадити помоћу методе максималне веродостојности.
𝑝(𝑋)
Пре тога приметимо да важи 1−𝑝(𝑋) = е𝛽1 ∙𝑋+𝛽0 .

𝑝(𝑋)
Односно, уколико логаритмујемо претходну једнакост добијамо log (1−𝑝(𝑋)) = 𝛽1 ∙ 𝑋 + 𝛽0 .

И приметимо да смо сада то све свели тачно на проблем просте линеарне регресије коју смо већ
разматрали.

И даље остаје питање како оценити параметре, јер ми немамо тачне податке о 𝑝(𝑋).

Логистичка регресија : оцене

Методом максималне веродостојности (ММВ). Направимо функцију веродостојности


∑ 𝐼{𝑦𝑖 =0}
𝐿(𝛽0 , 𝛽1 ) = 𝑝(𝑋)∑ 𝐼{𝑦𝑖 =1} ∙ (1 − 𝑝(𝑋))

Нека је ∑ 𝐼{𝑦𝑖 = 1} = 𝐴 , тада је ∑ 𝐼{𝑦𝑖 = 0} = 𝑛 − 𝐴. На основу чега након логаритмовања добијамо

25
𝑙(𝛽0 , 𝛽1 ) = 𝐴 ∙ log(𝑝(𝑋)) + (𝑛 − 𝐴) ∙ log(1 − 𝑝(𝑋)) = 𝐴 ∙ (𝛽1 ∙ 𝑋 + 𝛽0 ) −𝑛 ∙ log(1 + 𝑒 𝛽1 ∙𝑋+𝛽0 )

Налажењем извода датих функција по 𝛽0 и 𝛽1 нећемо успети да добијемо једнакости у затвореном


облику, зато ћемо морати да прибегнемо нумеричким методама оцењивања. Нећемо их овде
изводити, детаљније се о томе може наћи у књизи ”Elements of statistical learning”

Логистичка регресија : значајност параметара

Исто као и у случају линеарне регресије можемо да тестирамо значајност оцењених параметара
Валдовим статистичким тестом.Уколико је 𝑝 −вредност довоњно велика, можемо занемарити
одговарајући предиктор.

Логистичка регресија : класификација

Ако пажљиво погледамо на све кораке видимо да логистичка регресија на крају враћа вероватноћу
𝑝(𝑋) за неко дато 𝑋 = 𝑥. Како из ове вероватноће добити класу? Како радимо у проблему бинарног
класификатора то се предлаже да се класификују према следећем правилу :

𝑝̂ (𝑥𝑗 ) > 𝑝0 ⇒ 𝑦̂𝑗 = 1

за неки унапред одабрани број 𝑝0 .

У бинарној класификацији се прво узима да је 𝑝0 = 0.5

Битно је имати у виду да се тај параметар такође може „учити“, тј. оцењивати према потребама нашег
задатка у зависности од тога шта тачно желимо да минимизујемо.

Матрица конфузије

Први елемент матрице (1,1) се назива 𝑡𝑟𝑢𝑒 𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑒(𝑇𝑁) ,елемент (1,2) који одговара предвиђеном
𝑁𝑜 и реализованом 𝑌𝑒𝑠 , је 𝑓𝑎𝑙𝑠𝑒 𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑒(𝐹𝑁) ,елемент (2,1) је 𝑓𝑎𝑙𝑠𝑒 𝑝𝑜𝑠𝑖𝑡𝑖𝑣𝑒(𝐹𝑃) и елемент (2,2) је
𝑟𝑢𝑒 𝑝𝑜𝑠𝑖𝑡𝑖𝑣𝑒(𝑇𝑃).

26
Мере квалитета из матрице конфузије

𝑇𝑃
• Recall(sensitivity) 𝑇𝑃+𝐹𝑁
𝑇𝑁
• Specificity 𝑇𝑁+𝐹𝑃
𝑇𝑃
• Precision 𝑇𝑃+𝐹𝑃
𝑇𝑃+𝑇𝑁
• Accuracy 𝑇𝑃+𝑇𝑁+𝐹𝑃+𝐹𝑁
2∙𝑇𝑃
• F1 score
2∙𝑇𝑃+𝐹𝑃+𝐹𝑁
• и многе друге у зависности од проблема

Али у суштини главна је ствар знати „цену“ сваког елемента, односно сваке грешке. Тек према томе
можемо креирати праву меру квалитета за дати проблем.

Логистичка регресија : > 2 предиктора

И даље смо у бинарној класификацији. У случају више, на пример 𝑘 предиктора, имамо


(𝑖) +𝛽
𝑒 ∑ 𝛽𝑖∙𝑋 0
𝑝(𝑋) = (𝑖) +𝛽
1 + 𝑒 ∑ 𝛽𝑖∙𝑋 0

Идеја и начин извођења оцена остаје исти, само се димензионалност повећава и самим тим
сложеност рачуна.

Логистичка регресија : > 2 класе

У случају да имамо више од две класе – одговарајућа метода се више не зове логистичка регресија,
већ мунтиномијална (логистичка) регресија. Поставка семало мења у односу на обичну логистичку
регресију. Нека имамо 𝐾 класа, тада

𝑃{𝑌 = 1|𝑋} = 𝑝1 (𝑋)

𝑃{𝑌 = 𝐾 − 1|𝑋} = 𝑝𝐾−1 (𝑋)


𝐾−1

𝑃{𝑌 = 𝐾|𝑋} = 𝑝𝐾 (𝑋) = 1 − ∑ 𝑝𝑗 (𝑋)


𝑗=1

С тим да важи :

𝑒 𝛽𝑖∙𝑋
𝑝𝑖 (𝑋) = 𝛽𝑗 ∙𝑋
, ∀𝑖 ∈ ̅̅̅̅̅̅̅̅̅̅
1, 𝐾 − 1
1 + ∑𝐾−1
𝑗=1 𝑒

1
𝑝𝐾 (𝑋) = 𝛽𝑗 ∙𝑋
1+ ∑𝐾−1
𝑗=1 𝑒

27
Логистичка регресија : > 2 класе, класификација

Како и мутиномијална регресија враћа вероватноће да припада одређеној класи, морамо некако из
тога да извучемо класу. То се ради помоћу 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(·) функције. Односно 𝑗 −том елементу се
додељује класа за коју се добија највећа вероватноћа.

Примери- кодови у 𝑹 −у

У програмском језику 𝑅 за дате векторе 𝑋 и 𝑌 логистичка регресија се позива помоћу функције


𝑔𝑙𝑚(𝑌~𝑋, 𝑓𝑎𝑚𝑖𝑙𝑦 = 𝑏𝑖𝑛𝑜𝑚𝑖𝑎𝑙), за детаљнији опис функције, њених параметара и вредности које враћа
: ? glm

Мултиномијална регресија није у стандардном пакету у 𝑅 − у, већ се налази у пакету 𝑛𝑛𝑒𝑡 .Позива се
помоћу multinom(Y∼X).

Пример 1 :

Потребно је учитати базу која се налази да следећем линку: http://www.math.rs/p/files/1458635682-70-


baza.txt

> Baza = read.csv("http://www.math.rs/p/files/1458635682-70-baza.txt", header=FALSE)

База садржи резултате студената на пријемним испитима на неком факултету за упис на мастер
студије (прве две колоне), док је трећа колона индикатор да ли је дати студент уписао или није мастер
студије.

Команда 𝑎𝑡𝑡𝑎𝑐ℎ() нам је потребна да не бисмо сваки пут наводили у којој бази радимо.

> attach(Baza)

Функција 𝑔𝑙𝑚(, 𝑓𝑎𝑚𝑖𝑙𝑦 = 𝑏𝑖𝑛𝑜𝑚𝑖𝑎𝑙) је функција помоћу које користимо логистичку регресију, уз
обавезно навођење аргумента "𝑓𝑎𝑚𝑖𝑙𝑦 = 𝑏𝑖𝑛𝑜𝑚𝑖𝑎𝑙" чиме задајемо да желимо да 𝑅 покрене баш
логистичку регресију.

> model1 = glm(V3 ~ V1 + V2, family=binomial)


> summary(model1)

Call:
glm(formula = V3 ~ V1 + V2, family = binomial)

Deviance Residuals:
Min 1Q Median 3Q Max
-2.19287 -0.18009 0.01577 0.19578 1.78527

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -25.16133 5.79836 -4.339 1.43e-05 ***
V1 0.20623 0.04800 4.297 1.73e-05 ***
V2 0.20147 0.04862 4.144 3.42e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)


28
Null deviance: 134.6 on 99 degrees of freedom
Residual deviance: 40.7 on 97 degrees of freedom
AIC: 46.7

Number of Fisher Scoring iterations: 7

Видимо да су нам све променљиве значајне.

Следећа променљива је збирна променљива резултата пријемног испита.

> V4 = V1 + V2

Пробаћемо да плотујемо да видимо како то изгледа.

> plot(V3 ~ V4)

Додамо то што смо добили у логистичкој регресији:

> points(V4, fitted(model1), col="red", pch=20)

29
Даље примењујемо функцију 𝑝𝑟𝑒𝑑𝑖𝑐𝑡() , која нам омогућава процену да ли уз дате 𝑉1 и 𝑉3 студент
требао да упише тај мастер програм.

> w = data.frame(V1 = 20, V2 = 100)


> predict(model1, w, type="response")
1
0.2912049

Дакле, студент са 20 поена и 100 поена на другом испиту има око 0.3 да упише мастер.

Пример 2: База „𝑺𝒎𝒂𝒓𝒌𝒆𝒕“

> help(Smarket)
> attach(Smarket)

Враћа називе променљивих:

> names(Smarket)
[1] "Year" "Lag1" "Lag2" "Lag3" "Lag4" "Lag5" "Volume"
"Today" "Direction"

Неки општи подаци базе:

> summary(Smarket)
Year Lag1 Lag2 Lag3
Min. :2001 Min. :-4.922000 Min. :-4.922000 Min. :-4.922000
1st Qu.:2002 1st Qu.:-0.639500 1st Qu.:-0.639500 1st Qu.:-0.640000
Median :2003 Median : 0.039000 Median : 0.039000 Median : 0.038500
Mean :2003 Mean : 0.003834 Mean : 0.003919 Mean : 0.001716
3rd Qu.:2004 3rd Qu.: 0.596750 3rd Qu.: 0.596750 3rd Qu.: 0.596750
Max. :2005 Max. : 5.733000 Max. : 5.733000 Max. : 5.733000
Lag4 Lag5 Volume Today
Min. :-4.922000 Min. :-4.92200 Min. :0.3561 Min. :-4.922000
1st Qu.:-0.640000 1st Qu.:-0.64000 1st Qu.:1.2574 1st Qu.:-0.639500
Median : 0.038500 Median : 0.03850 Median :1.4229 Median : 0.038500
Mean : 0.001636 Mean : 0.00561 Mean :1.4783 Mean : 0.003138
3rd Qu.: 0.596750 3rd Qu.: 0.59700 3rd Qu.:1.6417 3rd Qu.: 0.596750
Max. : 5.733000 Max. : 5.73300 Max. :3.1525 Max. : 5.733000
Direction
Down:602
Up :648

30
Исцртава све могуће графике распрштености променљивих у датој бази:

> pairs(Smarket, col=Smarket$Direction)

Логистичка регресија, се покреће помоћу функције 𝑔𝑙𝑚 уз обавезно навођење аргумената 𝑓𝑎𝑚𝑖𝑙𝑦 =
𝑏𝑖𝑛𝑜𝑚𝑖𝑎𝑙 :

> glm.fit = glm(Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 + Volume, family=binomial)

31
Позивамо опет 𝑠𝑢𝑚𝑚𝑎𝑟𝑦, као и за линеарну регресију:

> summary(glm.fit)

Call:
glm(formula = Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 +
Volume, family = binomial)

Deviance Residuals:
Min 1Q Median 3Q Max
-1.446 -1.203 1.065 1.145 1.326

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.126000 0.240736 -0.523 0.601
Lag1 -0.073074 0.050167 -1.457 0.145
Lag2 -0.042301 0.050086 -0.845 0.398
Lag3 0.011085 0.049939 0.222 0.824
Lag4 0.009359 0.049974 0.187 0.851
Lag5 0.010313 0.049511 0.208 0.835
Volume 0.135441 0.158360 0.855 0.392

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 1731.2 on 1249 degrees of freedom


Residual deviance: 1727.6 on 1243 degrees of freedom
AIC: 1741.6

Number of Fisher Scoring iterations: 3

При овом позиву предвиђање се врши над истим скупом вредности над којима је саграђен модел, да
би задали неке нове вредности морамо: 𝑝𝑟𝑒𝑑𝑖𝑐𝑡(𝑔𝑙𝑚. 𝑓𝑖𝑡, 𝑛𝑒𝑤𝑑𝑎𝑡𝑎, 𝑡𝑦𝑝𝑒 = "𝑟𝑒𝑠𝑝𝑜𝑛𝑠𝑒"), где је 𝑛𝑒𝑤𝑑𝑎𝑡𝑎 =
𝑑𝑎𝑡𝑎. 𝑓𝑟𝑎𝑚𝑒(𝐿𝑎𝑔1 = 𝑥1, 𝐿𝑎𝑔2 = 𝑥3, . . . , 𝑉𝑜𝑙𝑢𝑚𝑒 = 𝑥6).

> glm.probs = predict(glm.fit, type="response")

Исписујемо првих 5 вредности:

> glm.probs[1:5]
1 2 3 4 5
0.5070841 0.4814679 0.4811388 0.5152224 0.5107812

За оне који имају вероватноћу већу од 0.5 додељујемо 𝑈𝑝, за преостале 𝐷𝑜𝑤𝑛.

> glm.pred = ifelse(glm.probs > 0.5, "Up", "Down")

И проверавамо колико добро се уклопиомодел

> table(glm.pred, Direction)


Direction
glm.pred Down Up
Down 145 141
Up 457 507

Видимо да није нешто претерано добро:

> mean(glm.pred == Direction)


[1] 0.5216

32
Издвојићемо скуп за обучавање и контролни скуп на основу године ( до 2005. и 2005., респективно)

> obucavanje = Year < 2005


> glm.fit = glm(Direction ~ Lag1+Lag2+Lag3+Lag4+Lag5+Volume,
+ data=Smarket, family=binomial, subset=obucavanje)
> summary(glm.fit)

Call:
glm(formula = Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 +
Volume, family = binomial, data = Smarket, subset = obucavanje)

Deviance Residuals:
Min 1Q Median 3Q Max
-1.302 -1.190 1.079 1.160 1.350

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.191213 0.333690 0.573 0.567
Lag1 -0.054178 0.051785 -1.046 0.295
Lag2 -0.045805 0.051797 -0.884 0.377
Lag3 0.007200 0.051644 0.139 0.889
Lag4 0.006441 0.051706 0.125 0.901
Lag5 -0.004223 0.051138 -0.083 0.934
Volume -0.116257 0.239618 -0.485 0.628

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 1383.3 on 997 degrees of freedom


Residual deviance: 1381.1 on 991 degrees of freedom
AIC: 1395.1

Number of Fisher Scoring iterations: 3

И покренућемо предвиђање за подскуп који нисмо користили за учење и проверавамо колико је добр
та оцена:

> glm.probs = predict(glm.fit, newdata=Smarket[!obucavanje,], type="response")


> glm.pred = ifelse(glm.probs > 0.5, "Up", "Down")
> Direction.2005 = Smarket$Direction[!obucavanje]
> table(glm.pred, Direction.2005)
Direction.2005
glm.pred Down Up
Down 77 97
Up 34 44
> mean(glm.pred == Direction.2005)
[1] 0.4801587

И након овог позива видимо да и није нешто добро. Али то и није толико неочекивано, јер заиста
предвидети вредност нећега на верзи није наивно, нити једноставно, ако је и уопште урадиво.

Пробаћемо мањи модел да искористимо:


> glm.fit = glm(Direction ~ Lag1 + Lag2,
+ data=Smarket, family=binomial, subset=obucavanje)
> glm.probs = predict(glm.fit, newdata=Smarket[!obucavanje,], type="response")
> glm.pred = ifelse(glm.probs > 0.5, "Up", "Down")
> table(glm.pred, Direction.2005)
Direction.2005
glm.pred Down Up
Down 35 35
Up 76 106

33
Овде можемо да видимо кад је предвиђање да ће цена да опадне – имамо тачно 50% шанси за
погађање, док у случају када каже да ће да порасте око 0.58

> mean(glm.pred == Direction.2005)


[1] 0.5595238

𝒌 −најближих суседа (КНС)

Класификатор К најближих суседа се добија на следећи начин.

Нека је опет дато 𝑋 = (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) и 𝑌 = (𝑦1 , 𝑦2 , … , 𝑦𝑛 ). Нека 𝑌 има свега 𝐶 класа. Опет је циљ наћи
одговарајућу оцену за

𝑃{𝑌 = 𝑗|𝑋} = 𝑝𝑗 (𝑋) , ∀𝑗 ∈ {1,2, … , 𝐶 }

𝒌 −најближих суседа (КНС) : поставка

Пре свега фиксирамо број 𝑘 −то ће бити баш број суседа које ћемо посматрати. Након тога за сваки
број (вектор) 𝑥 и за сваку класу оцењујемо 𝑝𝑗 (𝑥) на следећи начин:
𝑛
1
𝑝𝑗 (𝑥) = ∑ 𝐼 {𝑥𝑖 ∈ 𝑆𝑥𝑘 },
𝑘
𝑖=1

где је 𝑆𝑥𝑘 −скуп најближих (у односу на задату метрику-најчеће еуклидска) 𝑘 тачака, међу датим
скупом 𝑋, одабраној тачки 𝑥, која може а и не мора да буде у почетном скупу 𝑋.

𝒌 −најближих суседа (КНС) : оцена

На крају за дату тачку 𝑥 се одабере класа која је имала највећу вероватноћу 𝑝𝑗 (𝑥).

𝒌 −најближих суседа (КНС) : зависност од параметра 𝒌

Постоје следећи потенцијални проблеми:

• Није јединствена највећа вероватноћа


Нпр. Имамо 3 класе укупно и одабран параметар 𝑘 = 3 и некој тачки 𝑥 је у скупу 𝑆𝑥𝑘 тачно по
један представник из сваке класе.
• Ако је 𝑘 превелики број онда свака нова тачка, где год се налазила, ће да се слика у исту
класу.
Нпр. Уколико је дато 𝑛 = 100 тачака и две могуће класе, с тим да из прве класе имамо 62
тачке. Ако је 𝑘 ≥ 77 свака нова тачка ће бити класификована као да је из прве класе.
• Ако је 𝑘 премали број, може се много тога опет пореметити због тачака које можда „штрче“.
Нпр. Имамо такву слику да су сви из исте класе груписани у некој области, али имамо у тој
области једну тачку која је из друге класе. Тада за 𝑘 = 1 свака тачка довољно близу баш те
неочекиване тачке биће одмах класификована као припадник друге класе.
34
ЛДА

Нека је опет дато 𝑋 = (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) и 𝑌 = (𝑦1 , 𝑦2 , … , 𝑦𝑛 ). Нека 𝑌 има свега 𝐶 класа.

До сада смо тражили начине да оценимо директно следећи израз 𝑃{𝑌 = 𝑗|𝑋} = 𝑝𝑗 (𝑋) , ∀𝑗 ∈ {1,2, … , 𝐶}

А можемо то да одрадимо применом Бајесове формуле

𝑃(𝐴)𝑃(𝐵|𝐴)
𝑃(𝐴|𝐵) =
𝑃(𝐵)

Где ћемо да ставимо : 𝐴 = {𝑌 = 𝑗} , 𝐵 = {𝑋 = 𝑥}.

ЛДА – оцене априорне расподеле

Самим тим на крају имамо да је потребно оценити све што се јавља са десне стране једнакости

𝑃{𝑌 = 𝑗}𝑃{𝑋 = 𝑥|𝑌 = 𝑗}


𝑃{𝑌 = 𝑗|𝑋 = 𝑥} =
∑𝐶𝑢=1 𝑃{𝑌= 𝑢}𝑃{𝑋 = 𝑥|𝑌 = 𝑢}

Увешћемо ознаке 𝑓𝑗 (𝑥) = 𝑃{𝑋 = 𝑥|𝑌 = 𝑗} − неки облик функције густине и 𝜋𝑗 = 𝑃{𝑌 = 𝑗} априорне
вероватноће припадања класама.

Оцене за 𝜋𝑗 заправо неће бити толико компликоване, јер директно из података можемо да израчунамо

∑𝑛𝑖=1 𝐼{𝑦𝑖 = 𝑗}
̂
𝜋𝑗 = , ∀𝑗 ∈ {1,2, … , 𝐶}.
𝑛

ЛДА – претпоставке

Док за 𝑓𝑗 (∙) неће бити толико лако без неких додатних претпоставки. И баш ту долази до суштине
Линеарне дискриминаторне анализе- претпостављамо а је 𝑓𝑗 (∙)~𝓝(𝜇𝑗 , 𝜎𝑗2 ) , ∀𝑗 ∈ {1,2, … , 𝐶} и уз то
𝜎1 = 𝜎2 = ⋯ = 𝜎𝐶 = 𝜎 2 .

Имамо :

1 1 2
𝜋𝑗 exp (− 2 (𝑥 − 𝜇𝑗 ) )
√2𝜋𝜎 2 2𝜎
𝑝𝑗 (𝑥) =
1 1
∑𝐶𝑢=1 𝜋𝑢 exp (− 2 (𝑥 − 𝜇𝑢 )2 )
√2𝜋𝜎 2 2𝜎

где је од непознатих параметара остало само оценити 𝜎 и 𝜇𝑗 , ∀𝑗.

Баш због ове неједнакости дисперзија по класама та метода и има у називу „линеарна“.

35
ЛДА – класификатор

Не заборавимо да ћемо и овде да класификујемо према највећој вероватноћи 𝑝𝑗 (∙). Именилац је увек
исти, стога га можемо игнорисати при оцењивању, разломак са кореном се скрати и применимо
логаритамску функцију на бројиоцу
2 2
(𝑥 − 𝜇𝑗 ) 𝑥 2 − 2𝑥𝜇𝑗 + 𝜇𝑗
𝑧𝑗 (𝑥) = log(𝜋𝑗 ) − = log(𝜋𝑗 ) −
2𝜎 2 2𝜎 2
𝑥2
Такође, можемо обратити пажњу да ће за сваку класу 𝑗 члан 2𝜎2 бити исти па и њега можемо избацити
из разматрања којој класи припада. Тиме на крају добијамо да ћемо класу да бирамо према

𝑥𝜇𝑗 𝜇𝑗 2
𝑧𝑗∗ (𝑥) = − + log(𝜋𝑗 )
𝜎2 2𝜎 2

ЛДА – оцене

И даље је остало оценити параметре, ЛДА подразумева следеће оцене параметара:


𝑛
1
𝜇̂𝑗 = 𝑛 ∑ 𝑥𝑖 ∙ 𝐼{𝑦𝑖 = 𝑗} , ∀𝑗 ∈ {1,2, … , 𝐶}.
∑𝑖=1 𝐼{𝑦𝑖 = 𝑗}
𝑖=1

𝐶 𝑛
2
1 2
𝜎̂ = ∑ ∑(𝑥𝑖 − 𝜇̂𝑗 ) ∙ 𝐼{𝑦𝑖 = 𝑢} ,
𝑛−𝐶
𝑢=1 𝑖=1

∑𝑛𝑖=1 𝐼{𝑦𝑖 = 𝑗}
̂
𝜋𝑗 = , ∀𝑗 ∈ {1,2, … , 𝐶} ,
𝑛

𝑥𝜇̂𝑗 𝜇̂𝑗 2
𝑧̂𝑗∗ (𝑥) = − + log( ̂)
𝜋𝑗
𝜎̂ 2 2𝜎̂ 2

ЛДА – у случају више од једног предиктора

Све што смо раније извели за ЛДА важи само у случају једног предиктора. У случају да их је више
идеја остаје иста само, као и увек, значајно се компликује технички део. Претпоставка о расподели
постаје вишедимензиона нормална са истом коваријационом матрицом по свим класама, али са
различитим векторима за параметар средње вредности.

КДА

Има исту структуру и претпоставке као и ЛДА до на тачно једну претпоставку мање, а то је баш
претпоставка о једнакости дисперзија по класама. У квадратној дискриминаторној анализи то више не
мора да постоји као услов.

36
Упоређивање метода

• Логистичка регресија и ЛДА генерално делују поприлично различито, али чак и њихове границе
су често веома „блиске“, како оба на излазу дају границе у облику правих.
• КДА за разлику од њих већ може да да и „заобљене“ линије као граничне за класе (претходна
слика).
• У случају да имамо нормалност података по класама најбоље је користити ЛДА и КДА. У
супротном логистичка и КНС ће давати боље резултате.
• КНС је изузетно нелинеарна метода ( у смислу границе коју генерише) и значајно се разликује
од других наведених.

Примери- кодови у 𝑹 −у

Један од начина оцењивања квалитета модела је 𝐴𝐼𝐶 − 𝐴𝑘𝑎𝑖𝑘𝑒 𝐼𝑛𝑓𝑜𝑟𝑚𝑎𝑡𝑖𝑜𝑛 𝐶𝑟𝑖𝑡𝑒𝑟𝑖𝑜𝑛, циљ је да он
буде што МАЊИ!

> library(ISLR)
> library(MASS)

Овде се налази 𝒌 −најближих суседа 𝐾𝑁𝑁

> library(class)

> attach(Smarket)
> names(Smarket)
[1] "Year" "Lag1" "Lag2" "Lag3" "Lag4" "Lag5" "Volume"
"Today" "Direction"

Позив у случају ЛДА – линеарна дискриминаторна анализа, се скоро па не разликује од позива који
смо користили у функцијама 𝑙𝑚() и 𝑔𝑙𝑚().

37
> model.lda = lda(Direction ~ Lag1 + Lag2, subset = Year<2005)
С тим што више овде 𝑠𝑢𝑚𝑚𝑎𝑟𝑦(𝑚𝑜𝑑𝑒𝑙) не враћа то што бисмо ми очекивали.

> summary(model.lda)
Length Class Mode
prior 2 -none- numeric
counts 2 -none- numeric
means 4 -none- numeric
scaling 2 -none- numeric
lev 2 -none- character
svd 1 -none- numeric
N 1 -none- numeric
call 3 -none- call
terms 3 terms call
xlevels 0 -none- list

Најсличнији излаз добијамо ако баш позовемо "𝑚𝑜𝑑𝑒𝑙. 𝑙𝑑𝑎" :

> model.lda
Call:
lda(Direction ~ Lag1 + Lag2, subset = Year < 2005)

Prior probabilities of groups:


Down Up
0.491984 0.508016

Group means:
Lag1 Lag2
Down 0.04279022 0.03389409
Up -0.03954635 -0.03132544

Coefficients of linear discriminants:


LD1
Lag1 -0.6420190
Lag2 -0.5135293

Функција 𝑝𝑟𝑒𝑑𝑖𝑐𝑡 функционише скроз идентично као и раније:

> lda.pred = predict(model.lda, Smarket[Year == 2005, ])

И видимо да је у овом случају око 56% добрих процена:

> table(lda.pred$class, Smarket[Year == 2005, ]$Direction)

Down Up
Down 35 35
Up 76 106
> mean(lda.pred$class == Smarket[Year == 2005, ]$Direction)
[1] 0.5595238

38
> plot(model.lda)

Нешто баш слично покрећемо за КДА – квадратну дискриминаторну анализу:

> model.qda = qda(Direction ~ I(Lag1) + I(Lag2), subset = Year<2005)


> summary(model.qda)
Length Class Mode
prior 2 -none- numeric
counts 2 -none- numeric
means 4 -none- numeric
scaling 8 -none- numeric
ldet 2 -none- numeric
lev 2 -none- character
N 1 -none- numeric
call 3 -none- call
terms 3 terms call
xlevels 0 -none- list
> model.qda
Call:
qda(Direction ~ I(Lag1) + I(Lag2), subset = Year < 2005)

Prior probabilities of groups:


Down Up
0.491984 0.508016

Group means:
I(Lag1) I(Lag2)
Down 0.04279022 0.03389409
Up -0.03954635 -0.03132544
> qda.pred = predict(model.qda, Smarket[Year == 2005, ])

И видимо да је овде доста боље што се предикције тиче, чак 60% је погођено тачно, што је велики
успех рачунајући да процењујемо кретање цена на берзи.

> table(qda.pred$class, Smarket[Year == 2005, ]$Direction)

Down Up
Down 30 20
Up 81 121
> mean(qda.pred$class == Smarket[Year == 2005, ]$Direction)
[1] 0.5992063

39
За КНН – 𝑘 најближих суседа нам је потребно прво да направимо одговарајуће матрице

Матрица која садржи скуп за подучавање у одговарајућим предикторима (𝑙𝑎𝑔1 𝑖 𝑙𝑎𝑔2):

> obucavanje.X = cbind(Lag1, Lag2)[Year < 2005, ]

Матрица која садржи контролни скуп у одговарајућим предикторима:

> kontrolni.X = cbind(Lag1, Lag2)[Year == 2005, ]

Категорије које постоје у скупу за обучавање:

> obucavanje.dir = Direction[Year < 2005]


> kontrolni.dir = Direction[Year == 2005]

И сам број 𝑘 − колико најближих суседа гледамо :

> k = 1

Методом „пробај па шта испадне“ можемо да видимо да се најбољи резултат добије за вредност 𝑘 =
2 , 56% је погођено тачно. Али то је и даље слабије од КДА методе, тако да можемо да закључимо да
у случају овог проблема најбољу оцену је дала метода КДА.

> model.knn = knn(obucavanje.X, kontrolni.X, obucavanje.dir, k=2)


> plot(model.knn)

> summary(model.knn)
Down Up
112 140
> mean(model.knn == Smarket[Year == 2005,]$Direction)
[1] 0.5119048
> table(model.knn, Smarket[Year == 2005,]$Direction)

model.knn Down Up
Down 50 62
Up 61 79

40
XGBoost:

> library(xgboost)
> ?xgboost()
> data_train.xgb = xgb.DMatrix(data=obucavanje.X, label=as.numeric(obucavanje.dir)-1)
> test = xgb.DMatrix(data=kontrolni.X, label=as.numeric(kontrolni.dir)-1)
> model.xgb = xgb.train(params = list(),
+ data = data_train.xgb,
+ objective = "binary:logistic",
+ eval_metric = 'error',
+ nrounds = 200)
> rezultati.predikcije = predict(model.xgb, kontrolni.X)
> parametar.p = 0.5000
> preciznost = mean(as.numeric(rezultati.predikcije > parametar.p) == as.numeric(kontro
lni.dir)-1)
> print(paste("preciznost=", preciznost))
[1] "preciznost= 0.527777777777778"
> table(as.numeric(rezultati.predikcije > parametar.p), kontrolni.dir)
kontrolni.dir
Down Up
0 56 64
1 55 77

Али ово је само основна верзија, нисмо никакве параметре намештали, а има их подоста.

Подсетимо се:

?xgb.train

На линку https://xgboost.readthedocs.io/en/latest/parameter.html се могу наћи параметри тог модела.

> model.xgb2 = xgb.train(params = list(max_depth = 2,


+ eta = 0.000189,# learning_rate
+ max_bin = 32,
+ lambda = 1.01, # L2 regularizacija
+ aplha = 0.347, # L1 regularizacija
+ booster='gbtree',
+ min_child_weight=7.45,
+ subsample=0.997,
+ colsample_bytree=0.526,
+ early_stopping=20),
+ data = data_train.xgb,
+ objective = "binary:logistic",
+ eval_metric = 'logloss',
+ nrounds = 150)
> rezultati.predikcije = predict(model.xgb2, kontrolni.X)
> parametar.p = 0.5000
> preciznost = mean(as.numeric(rezultati.predikcije > parametar.p) == as.numeric(kontro
lni.dir)-1)
> print(paste("preciznost=", preciznost))
[1] "preciznost= 0.579365079365079"
> table(as.numeric(rezultati.predikcije > parametar.p), kontrolni.dir)
kontrolni.dir
Down Up
0 25 20
1 86 121

Буде око 0.583333.

41
Са ′𝑑𝑎𝑟𝑡′ :

> X_train_scaled = scale(obucavanje.X)


> data_train.xgb = xgb.DMatrix(data=X_train_scaled, label=as.numeric(obucavanje.dir)-1)
> test = xgb.DMatrix(data=scale(kontrolni.X,
+ center=attr(X_train_scaled, "scaled:center"),
+ scale=attr(X_train_scaled, "scaled:scale")), label=as.n
umeric(kontrolni.dir)-1)
> model.xgb3 = xgb.train(params = list(max_depth = 2,
+ eta = 0.00359,# learning_rate
+ #max_bin = 32,
+ lambda = 0.278, # L2 regularizacija
+ aplha = 1.39, # L1 regularizacija
+ booster='dart',
+ min_child_weight=7.73,
+ subsample=0.947,
+ colsample_bytree=0.961),
+ data = data_train.xgb,
+ objective = "binary:logistic",
+ eval_metric = 'auc',
+ nrounds = 190)
> rezultati.predikcije = predict(model.xgb3, kontrolni.X)
> parametar.p = 0.5000
> preciznost = mean(as.numeric(rezultati.predikcije > parametar.p) == as.numeric(kontro
lni.dir)-1)
> print(paste("preciznost=", preciznost))
[1] "preciznost= 0.579365079365079"
> table(as.numeric(rezultati.predikcije > parametar.p), kontrolni.dir)
kontrolni.dir
Down Up
0 44 39
1 67 102

Редукција димензија : Метода 𝑷𝑪𝑨

Претпоставимо да желимо да визуелизујемо 𝑛 тачака али имамо 𝑋1 , … , 𝑋𝑝 колона (тј.могућих


предиктора), где је 𝑝 довољно велики број. Једини начин од до сада обрађених је да правимо график
сваке две променљиве, као што ради функција 𝑝𝑎𝑖𝑟𝑠() у 𝑅 −у. Међутим имамо (𝑝2) тих малих графика.
Поред екстремне непрегледности, дводимензиони графици губе много(!) значајних информација.
Одатле произилази потреба за неком методом која ће боље и информативније то све да представи.
Једна таква метода је 𝑃𝑟𝑖𝑛𝑐𝑖𝑝𝑎𝑙 𝐶𝑜𝑚𝑝𝑜𝑛𝑒𝑛𝑡 𝐴𝑛𝑎𝑙𝑦𝑠𝑖𝑠 или просто 𝑃𝐶𝐴 (неки преводе као метода главних
компоненти -МГК)

Редукција димензија : Метода 𝑷𝑪𝑨 – поставка

Желимо да уместо 𝑋1 , … , 𝑋𝑝 добијемо нове неке променљиве 𝑍1 , … , 𝑍𝑝 тако да је


𝑝

𝑍1 = ∑ 𝜙𝑘1 𝑋𝑘
𝑘=1

односно линеарна комбинација већ постојећих колона, али таква да је 𝑍1 са максималном


𝑝
дисперзијом и ∑𝑘=1 𝜙𝑘21 = 1 , тј. коефицијенти су нормализовани.

42
Редукција димензија : Метода 𝑷𝑪𝑨 – суштина

Након добијања прве главне компоненте 𝑍1 тражимо другу тако да је опет са максималном
дисперзијом, нормализованим константама и још да је ортогонална на 𝑍1 . Поступак настављамо тако
што 𝑍3 има све исте услове, уд додатак ортогоналности на 𝑍1 и 𝑍2 итд...

Тиме, заправо, добијамо нови векторски простор где су нам осе ове нове променљиве 𝑍ј и уз то важи
да променњиве са мањим 𝑗 хватају значајнији део целокупне дисперзије података и самим тим су
информативнији.

Редукција димензија : Метода 𝑷𝑪𝑨 – мане

Главни проблем код тог приступа- губљење јасне интерпретације и томе шта значи 𝑍1 , … , 𝑍𝑝 . У случају
пре 𝑃𝐶𝐴 смо тачно знали шта која колона значи и шта је мерила, након методе главних компоненти се
то изгуби.

Редукција димензија: Метода 𝒕 − 𝑺𝑵𝑬

Оригинални назив : 𝑇 − 𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑒𝑑 𝑆𝑡𝑜𝑐ℎ𝑎𝑠𝑡𝑖𝑐 𝑁𝑒𝑖𝑔ℎ𝑏𝑜𝑟 𝐸𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 (𝑡 − 𝑆𝑁𝐸) – нема превода још увек

Нећемо превише теоријских детаља давати овде.

Детаљније у раду, где се први пут појављује 𝑡 − 𝑆𝑁𝐸: "Visualizing Data using t-SNE"(2008),
G.Hinton,L.vander Maaten

Редукција димензија: Метода 𝒕 − 𝑺𝑵𝑬 укратко

За разлику од 𝑃𝐶𝐴 нелинеарна трансформација. Тај алгоритам је победник такмичења за


визуелизацију 2012.године. Итеративна је, заснована на теорији вероватноћа и теорији информација.
Екстремно често се користи у кластеризацији података.

Примери- кодови у 𝑹 −у

Методу главних компоненти ћемо радити помоћу функције 𝑝𝑟𝑐𝑜𝑚𝑝(), док 𝑡 − 𝑆𝑁𝐸 помоћу функције
𝑡𝑠𝑛𝑒() из пакета 𝑡𝑠𝑛𝑒.

Симпатичне симулације и кратак опис за 𝑡 − 𝑆𝑁𝐸 се могу наћи на страници :


https://distill.pub/2016/misread-tsne/

Подаци:

> baza = USArrests


> names(baza)
[1] "Murder" "Assault" "UrbanPop" "Rape"
> ?USArrests

43
Применимо 𝑎𝑝𝑝𝑙𝑦 функције:

> apply(baza, 2, mean)


Murder Assault UrbanPop Rape
7.788 170.760 65.540 21.232

Применимо исто то само за узорачке дисперзије:

> apply(baza, 2, var)


Murder Assault UrbanPop Rape
18.97047 6945.16571 209.51878 87.72916

𝑃𝐶𝐴 применом:

> glavne_komponente = prcomp(baza, scale=TRUE)


> glavne_komponente
Standard deviations (1, .., p=4):
[1] 1.5748783 0.9948694 0.5971291 0.4164494

Rotation (n x k) = (4 x 4):
PC1 PC2 PC3 PC4
Murder -0.5358995 0.4181809 -0.3412327 0.64922780
Assault -0.5831836 0.1879856 -0.2681484 -0.74340748
UrbanPop -0.2781909 -0.8728062 -0.3780158 0.13387773
Rape -0.5434321 -0.1673186 0.8177779 0.08902432

Овде су елемнти тражени \𝑝ℎ𝑖:

> glavne_komponente$rotation
PC1 PC2 PC3 PC4
Murder -0.5358995 0.4181809 -0.3412327 0.64922780
Assault -0.5831836 0.1879856 -0.2681484 -0.74340748
UrbanPop -0.2781909 -0.8728062 -0.3780158 0.13387773
Rape -0.5434321 -0.1673186 0.8177779 0.08902432
> rezultat = glavne_komponente$rotation
> prva_komponenta = rezultat[, 1]
> sum(prva_komponenta^2)
[1] 1
> izdvoji_komponente <- function(glavne_komponente, redni_broj)
+ {
+ return(glavne_komponente$rotation[, redni_broj])
+ }
> prva_komponenta = izdvoji_komponente(glavne_komponente = glavne_komponente, redni_bro
j = 1)
> druga_komponenta = izdvoji_komponente(glavne_komponente = glavne_komponente, redni_br
oj = 2)
> treca_komponenta = izdvoji_komponente(glavne_komponente = glavne_komponente, redni_br
oj = 3)
> cetvrta_komponenta = izdvoji_komponente(glavne_komponente = glavne_komponente, redni_
broj = 4)

44
> biplot(glavne_komponente, scale=0)

> pairs(baza)

45
Колико је дисперзије објашњено:

> (objasnjene_disperzije = glavne_komponente$sdev^2 / sum(glavne_komponente$sdev))


[1] 0.69216182 0.27621408 0.09950620 0.04839919

Или просто:

> summary(glavne_komponente)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.5749 0.9949 0.59713 0.41645
Proportion of Variance 0.6201 0.2474 0.08914 0.04336
Cumulative Proportion 0.6201 0.8675 0.95664 1.00000

𝑡 − 𝑆𝑁𝐸:

> library(tsne)
> ?tsne
> tsne_model_5 = tsne(X = baza,
+ k = 2, # broj dimenzija
+ epoch = 200, # koliko puta predje pre osvezenja resenja
+ perplexity = 5, # specifican parametar za t-SNE
+ max_iter = 5000, # broj iteracija
+ initial_dims=30
+ )
sigma summary: Min. : 0.292435674439098 |1st Qu. : 0.38486823189047 |Median : 0.4476087
51769816 |Mean : 0.448994123377804 |3rd Qu. : 0.51057405968568 |Max. : 0.61367423163010
7 |
Epoch: Iteration #200 error is: 2.05286299233573
Epoch: Iteration #400 error is: 1.45167595529484
Epoch: Iteration #600 error is: 1.18534228807633
Epoch: Iteration #800 error is: 1.02316255362573
Epoch: Iteration #1000 error is: 0.807382767383495
Epoch: Iteration #1200 error is: 0.751982310169386
Epoch: Iteration #1400 error is: 0.696796134806492
Epoch: Iteration #1600 error is: 0.507544974434674
Epoch: Iteration #1800 error is: 0.464678621989067
Epoch: Iteration #2000 error is: 0.450530726343844
Epoch: Iteration #2200 error is: 0.442125000956112
Epoch: Iteration #2400 error is: 0.437367002008916
Epoch: Iteration #2600 error is: 0.428625371319191
Epoch: Iteration #2800 error is: 0.406073482265731
Epoch: Iteration #3000 error is: 0.402118179503354
Epoch: Iteration #3200 error is: 0.39893566657256
Epoch: Iteration #3400 error is: 0.390258988290762
Epoch: Iteration #3600 error is: 0.386914056297257
Epoch: Iteration #3800 error is: 0.384520948258393
Epoch: Iteration #4000 error is: 0.382606194813318
Epoch: Iteration #4200 error is: 0.380941397482836
Epoch: Iteration #4400 error is: 0.379769597008838
Epoch: Iteration #4600 error is: 0.37916629355635
Epoch: Iteration #4800 error is: 0.378673089988658
Epoch: Iteration #5000 error is: 0.376800656501931
> tsne_model_5
[,1] [,2]
[1,] 1043.72758 447.297298
[2,] -78.93068 1360.881643
[3,] -832.17919 683.515121
[4,] 582.53112 -719.980336
[5,] -114.90168 1029.747618
[6,] -224.70722 1161.892799
[7,] -1454.55994 366.651238
[8,] -1024.73120 618.921399

46
[9,] -791.83847 62.620946
[10,] 945.82727 85.470310
[11,] 163.94527 166.994353
[12,] 80.85339 -1555.816826
[13,] -991.41483 66.012389
[14,] 287.80033 -171.303787
[15,] -17.61829 -1049.758750
[16,] 278.77786 -356.493982
[17,] 834.85072 -180.417567
[18,] 937.61141 379.123612
[19,] 131.41612 -1424.090685
[20,] -705.69787 575.022319
[21,] -1365.17816 301.768191
[22,] -281.05636 579.103031
[23,] -13.24462 -810.979112
[24,] 1106.63928 636.791313
[25,] -177.77710 471.962743
[26,] 358.17546 -986.387968
[27,] 137.13261 -800.122687
[28,] -336.53289 1089.788155
[29,] -15.29179 -1164.883499
[30,] -1318.44685 133.508897
[31,] -593.99505 590.894976
[32,] -953.49038 -31.847064
[33,] 1396.32702 517.849231
[34,] 283.63351 -1374.594880
[35,] 223.45100 4.714622
[36,] 289.67241 -498.864050
[37,] -279.52539 1418.504435
[38,] 66.97681 -59.575227
[39,] -1254.80344 508.272107
[40,] 1194.35121 520.524374
[41,] 419.75352 -1315.792992
[42,] 888.08708 -72.300047
[43,] 469.74565 172.104652
[44,] -471.74839 1597.188543
[45,] 583.75179 -1239.785037
[46,] 134.15829 -364.260579
[47,] -369.94185 1502.810607
[48,] 544.79347 -1450.242286
[49,] -162.41801 -802.202203
[50,] 446.03945 -620.237359
> plot(tsne_model_5)

47
Видимо да не одговарју велики бројеви за параметар 𝑝𝑒𝑟𝑝𝑙𝑒𝑥𝑖𝑡𝑦, одаберимо међу мањим :

> par(mfrow=c(2,2))
> for(i in c(3, 6, 12, 15))
+ {
+ tsne_model = tsne(X = baza,
+ k = 2, # broj dimenzija
+ epoch = 200, # koliko puta predje pre osvezenja resenja
+ perplexity = i, # specifican parametar za t-SNE
+ max_iter = 5000, # broj iteracija
+ initial_dims=30
+ )
+ tsne_model
+ plot(tsne_model)
+ }
sigma summary: Min. : 0.188922943824674 |1st Qu. : 0.298064912861213 |Median : 0.371009
715820336 |Mean : 0.374042849111505 |3rd Qu. : 0.441779008045392 |Max. : 0.567155064323
097 |
Epoch: Iteration #200 error is: 3.35008244782866
Epoch: Iteration #400 error is: 2.47226943113022
Epoch: Iteration #600 error is: 2.00927708880411
Epoch: Iteration #800 error is: 1.25787774688712
Epoch: Iteration #1000 error is: 0.733091719070002
Epoch: Iteration #1200 error is: 0.671404098701475
Epoch: Iteration #1400 error is: 0.638797597267753
Epoch: Iteration #1600 error is: 0.518814390144421
Epoch: Iteration #1800 error is: 0.506910365076338
Epoch: Iteration #2000 error is: 0.497528902583615
Epoch: Iteration #2200 error is: 0.482970736201417
Epoch: Iteration #2400 error is: 0.46898313266273
Epoch: Iteration #2600 error is: 0.43201957762155
Epoch: Iteration #2800 error is: 0.404570130550975
Epoch: Iteration #3000 error is: 0.401454746767133
Epoch: Iteration #3200 error is: 0.399107906216161
Epoch: Iteration #3400 error is: 0.397835328339685
Epoch: Iteration #3600 error is: 0.397105830885591
Epoch: Iteration #3800 error is: 0.396765433885511
Epoch: Iteration #4000 error is: 0.396617417920866
Epoch: Iteration #4200 error is: 0.39654871610096
Epoch: Iteration #4400 error is: 0.396515255567134
Epoch: Iteration #4600 error is: 0.396499526708517
Epoch: Iteration #4800 error is: 0.396491370233086
Epoch: Iteration #5000 error is: 0.396487064986582
sigma summary: Min. : 0.3178243900944 |1st Qu. : 0.417063823590443 |Median : 0.47475027
7596133 |Mean : 0.475786792361433 |3rd Qu. : 0.529813247327769 |Max. : 0.63052848390967
4 |
Epoch: Iteration #200 error is: 2.59671170226597
Epoch: Iteration #400 error is: 1.51458538099716
Epoch: Iteration #600 error is: 0.928981229789279
Epoch: Iteration #800 error is: 0.799168919270675
Epoch: Iteration #1000 error is: 0.583027239905944
Epoch: Iteration #1200 error is: 0.522647858103386
Epoch: Iteration #1400 error is: 0.448818756376158
Epoch: Iteration #1600 error is: 0.379898070283451
Epoch: Iteration #1800 error is: 0.37263682546273
Epoch: Iteration #2000 error is: 0.370093167045022
Epoch: Iteration #2200 error is: 0.369222164123563
Epoch: Iteration #2400 error is: 0.369110738893265
Epoch: Iteration #2600 error is: 0.369064391147731
Epoch: Iteration #2800 error is: 0.369044730805423
Epoch: Iteration #3000 error is: 0.369036491212292
Epoch: Iteration #3200 error is: 0.369033128482392
Epoch: Iteration #3400 error is: 0.36903181886928
Epoch: Iteration #3600 error is: 0.36903132855074
Epoch: Iteration #3800 error is: 0.369031151087335
Epoch: Iteration #4000 error is: 0.369031088958741
48
Epoch: Iteration #4200 error is: 0.369031066213576
Epoch: Iteration #4400 error is: 0.36903105704388
Epoch: Iteration #4600 error is: 0.369031052300721
Epoch: Iteration #4800 error is: 0.369031048839874
Epoch: Iteration #5000 error is: 0.36903104567937
sigma summary: Min. : 0.453507388384494 |1st Qu. : 0.543885577923646 |Median : 0.598970
271400821 |Mean : 0.589896354209165 |3rd Qu. : 0.636496812372229 |Max. : 0.725949805478
743 |
Epoch: Iteration #200 error is: 1.90297756893679
Epoch: Iteration #400 error is: 1.28217183697064
Epoch: Iteration #600 error is: 0.864307230232373
Epoch: Iteration #800 error is: 0.664414039458263
Epoch: Iteration #1000 error is: 0.531587864959845
Epoch: Iteration #1200 error is: 0.417769282438795
Epoch: Iteration #1400 error is: 0.349028062386082
Epoch: Iteration #1600 error is: 0.321488202795458
Epoch: Iteration #1800 error is: 0.306014907245789
Epoch: Iteration #2000 error is: 0.304757090313147
Epoch: Iteration #2200 error is: 0.304593263803733
Epoch: Iteration #2400 error is: 0.304562031067112
Epoch: Iteration #2600 error is: 0.304557572602821
Epoch: Iteration #2800 error is: 0.304557297655112
Epoch: Iteration #3000 error is: 0.304557291162698
Epoch: Iteration #3200 error is: 0.30455729109799
Epoch: Iteration #3400 error is: 0.304557291093014
Epoch: Iteration #3600 error is: 0.30455729108717
Epoch: Iteration #3800 error is: 0.30455729107988
Epoch: Iteration #4000 error is: 0.304557291071188
Epoch: Iteration #4200 error is: 0.304557291061134
Epoch: Iteration #4400 error is: 0.304557291049745
Epoch: Iteration #4600 error is: 0.304557291037043
Epoch: Iteration #4800 error is: 0.304557291023098
Epoch: Iteration #5000 error is: 0.304557291007888
sigma summary: Min. : 0.505534114872551 |1st Qu. : 0.587892766311789 |Median : 0.637589
290349801 |Mean : 0.635302851568508 |3rd Qu. : 0.67509967953225 |Max. : 0.7636111576858
73 |
Epoch: Iteration #200 error is: 1.71968370537305
Epoch: Iteration #400 error is: 0.934022346136854
Epoch: Iteration #600 error is: 0.665458408484276
Epoch: Iteration #800 error is: 0.463614415756327
Epoch: Iteration #1000 error is: 0.40874118393067
Epoch: Iteration #1200 error is: 0.389364037211577
Epoch: Iteration #1400 error is: 0.382212058708617
Epoch: Iteration #1600 error is: 0.368474971068628
Epoch: Iteration #1800 error is: 0.332106580323783
Epoch: Iteration #2000 error is: 0.312758491960404
Epoch: Iteration #2200 error is: 0.292847468102296
Epoch: Iteration #2400 error is: 0.286387910522692
Epoch: Iteration #2600 error is: 0.286087637584743
Epoch: Iteration #2800 error is: 0.286080793845372
Epoch: Iteration #3000 error is: 0.286080551450576
Epoch: Iteration #3200 error is: 0.286080525982878
Epoch: Iteration #3400 error is: 0.286080523730718
Epoch: Iteration #3600 error is: 0.286080523592391
Epoch: Iteration #3800 error is: 0.286080523532306
Epoch: Iteration #4000 error is: 0.286080523461811
Epoch: Iteration #4200 error is: 0.286080523376507
Epoch: Iteration #4400 error is: 0.286080523277066
Epoch: Iteration #4600 error is: 0.286080523163928
Epoch: Iteration #4800 error is: 0.28608052303736
Epoch: Iteration #5000 error is: 0.286080522899603

49
Унакрсна валидација – увод

Након поделе наших података у три скупа: скуп за тренирање, скуп за валидацију и скуп за
тестирање, отавимо са стране скуп за тестирање и више га не гледамо док год не спремимо
комплетно модел и тек на њему тестирамо глобални квалитет. Скуп за тестирање не може и не сме
ни на који начин да буде искоришћен за смишљање модела и калибрацију параметара! За такве
ствари служи скуп за валидацију.

Постоји више начина како се то ради, један од њих је методом унакрсне валидације.

Нека је у унији скупова за тренирање и валидацију (𝑥1 , 𝑦1 ), … , (𝑥𝑛 , 𝑦𝑛 )неких 𝑛 −тачака. Питање је како
тачно поделити на скуп за тренирање и валидацију да на крају добијемо то што нама треба.

50
Унакрсна валидација – поставка

Сваки пут направимо нови скуп за валидацију који садржи неких 𝑘 елемената од 𝑛. И тренирамо на
преосталих 𝑛 − 𝑘 , док ових 𝑘 служи за валидацију. На крају нађемо средњу вредност (или другу
одговарајућу функцију) укупне грешке свих истренираних модела и према томе бирамо коначни
модел, који ћемо слати н атестирање. Таква метода се зове 𝑘 − 𝑓𝑜𝑙𝑑 (унакрсна) валидација.

Примери- кодови у 𝑹 −у

Главна функција у 𝑅 −у за 𝑘 − 𝑓𝑜𝑙𝑑 валидацију је 𝑐𝑣. 𝑔𝑙𝑚(… , 𝐾 = 𝑘), где са параметром 𝐾 бирамо
колико је 𝑘 према ранијој дефиницији.

> library(ISLR)
> library(boot) # za cv.glm()
> ?cv.glm
> baza = Auto
> ?Auto

51
Занима нас регресија између 𝑚𝑝𝑔 и ℎ𝑜𝑟𝑠𝑒𝑝𝑜𝑤𝑒𝑟

> plot(mpg~horsepower)

> greske = rep(0, 10)


> for(i in 1:10)
+ {
+ # glm() bez argumenta family='binomial' je isto sto je lm()
+ # Testirajte to
+ model = glm(mpg ~ poly(horsepower, i), data=Auto)
+
+ greske[i] = cv.glm(Auto, model, K=10)$delta[1]
+ }
> greske
[1] 24.38018 19.23527 19.44696 19.45915 19.28674 18.95497 18.96303 18.60309 18.87459
[10] 19.47613

52

Você também pode gostar