Escolar Documentos
Profissional Documentos
Cultura Documentos
СТАТИСТИЧКИ
СОФТВЕР 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 недеља)
Вођено учење
• Вођено учење се такође дели на два глобална проблема:
− Регресија
− Класификација
6
Регресија
Шта је регресија?
• Регресија представља зависност једне непрекидне случајне величине од друге (или других)
случајне величине
• Регресиона фунција: 𝑓(𝑋) = 𝐸(𝑌|𝑋)
Врсте регресије
• Има много различитих начина да се регресије поделе у неке групе и врсте
− Параметарске и Непараметарске
− (Проста) линеарна, генерализана линеарна, нелинеардна
− Једнострука, Полиномијална и Вешеструка (multiple)
− ...
Мере квалитета
• Природна мера квалитета која се најчешће користи је тзв 𝐿2 мера (𝐿2 терминологија се
углавном корист када су предикције у питању, а и више нагиње ка литератури машинског
учења)
• Из ЛСМ-а чули за Методу најмањих квадрата (last squares method)
2
𝐸(𝑓̂(𝑋) − 𝑌)
Теорема Гаус-Маркова
• У класи свих непристрасних линеарних оцена параметара, оцена добијена методом најмањих
квадрата има најмању дисперзију.
Примене
• Значај регресије се огледа у две кључне ствари:
− Разумевање природе везе датих промењивих (inference)
− Предикције
Класификација
Шта је класификација?
• Класификација је проблем одређивања којој класи припада елемент(или више њих)
Врсте класификације
• Бинарана
• 𝑛 −арна
Алгоритми класификације
• Логистичка регресија
• 𝐿𝐷𝐴 и 𝑄𝐷𝐴
• (наивни) Бајесовски класификатор
• 𝑘 најближих суседа
• Дрвета одлучивања
• Појачани градијенти (Gradient Boosting)
• Неуронске мреже
• И много других
7
Мере квалитета
• Матрица конфузије и све што из ње проистиче
Примене
• Непосредно на овом курсу ћемо видети једну примену у класификацији симбола на таблама
миноловца
Увод у регресије
Поставка проблема
Нека су дати следећи подаци 𝑋 = (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) , 𝑌 = (𝑦1 , 𝑦2 , … , 𝑦𝑛 ) , где (𝑥𝑖 , 𝑦𝑖 ) представља добијене
податке за 𝑖 −ти елемент.
Циљ регресије је наћи функцију 𝑓(∙), такву да 𝑌 = 𝑓(𝑋) , што се такође може записати као
𝑦𝑖 = 𝑓(𝑥𝑖 ) , ∀𝑖 ∈ 1, 𝑛
Већ смо помињали да постоји више начина да се апроксимира (оцени) функција 𝑓(∙), ми ћемо овде
детаљније размотрити линеарну регресију.
Како је у општем случају проблем регресије веома сложен покушавамо то да сведемо на језик
линеарне алгебре. Тада функцију 𝑓(∙) представљамо у следећем облику 𝑓̂(𝑥) = 𝛽1 ∙ 𝑋 + 𝛽0 .
У којим случајевима ће 𝑌̂ бити баш једнако 𝑌? Наведите неколико примера када ће идеално да
погађа.
Дакле, у општем случају правимо неку грешку. Циљ је некако измерити и минимизовати исту.
Намеће се неколико природних начина мерења грешке помоћу 𝐿1 (mean absolute error value)
Са одговарајућим оценама за 𝐿1 :
𝑛
1
̂ (𝑌, 𝑌̂) = ∑|𝜖𝑖 |
МАЕ
𝑛
𝑖=1
и за за 𝐿2 :
𝑛
1
̂ (𝑌, 𝑌̂) =
М𝑆𝐸 ∑ 𝜖𝑖2
𝑛
𝑖=1
𝐸(𝑋𝑌) − 𝐸(𝑋)𝐸(𝑌)
𝛽1 =
𝐷(𝑋)
𝛽0 = 𝐸(𝑌) − 𝛽1 𝐸(𝑋)
Односно оцене :
∑𝑛𝑖=1 𝑋𝑖 𝑌𝑖 − 𝑛 ∙ 𝑋̅𝑌̅
̂1 =
𝛽 2
̅̅̅
𝑆𝑋
̂0 = 𝑌̅ − 𝛽
𝛽 ̂1 𝑋̅
9
(Проста) Линеарна регресија : значајност параметра
Након што смо добили оцену поставља се питање њеног квалитета. У ту сврху користимо Валдов
(Wald’s) статистички тест.
̂
𝛽𝑖
За свако 𝑖 од 0 до 𝑘 , где је 𝑘 − број предиктора, тестирамо 𝐻0 ∶ 𝛽𝑖 = 0 , помоћу тест статистике 𝑇 = ̅̅̅̅̅
𝑆 𝛽𝑖
У случају да је 𝑋 𝑚 −димензиони.
• 𝑋 2 , односно квадрирање
• 𝑋 𝑘 , односно генерално степеновање потребног/потребних степена
• log(𝑋) , логаритмовање са произвољном основом
• 𝑔(𝑋) , за неку одабрану функцију 𝑔(∙)
Примери- кодови у 𝑹 −у
Како нам је циљ да одрадимо неку логистичку регресију, тачније више њих, прво морамо да се
упознамо са мало лакшим идејама. А то су линеарне регресије.
Пример 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)
10
Решење:
Применом линеарне регресије са средње квадратном греском:
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
> plot(model)
> beta_1=model$coefficients[2]
> beta_0=model$coefficients[1]
11
> plot(x, y)
Регресиона права :
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
Као што видимо у овом случају оба коефицијента су од значаја (тј нису једнаки нули, према тесту), као
и да је вредност за 𝑅^2 поприлично висока, што показује да је модел довољно квалитетан.
Често се у литератури користи: можемо рећи да нас модел на 86% описује променљиву 𝑌.
> plot(x, y)
13
> beta_1=25.326
> beta_0=353.165
> abline(beta_0, beta_1, col="red")
Видимо да постоји скоро да линеарна зависност међу бројем сати учења и резултатима.
Пример 3:
Ово је још један пример када линеарна регресија у почетном облику не пролази добро.
Решење:
> 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
14
Видимо да немамо "звездице" за 𝑞 − није значајна, и 𝑝 −вредност је близу 1.
Вредности за 𝑅 − 𝑠𝑞𝑢𝑎𝑟𝑒𝑑 треба да буду што ближи јединици док у овом случају су око 0, што указује
на тотални промашај линеарне регресије.
> plot(q, w)
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
> 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“описује шта представља та база. Везана је за учесталост кршења закона у Бостону.
17
> plot(medv ~ lstat, data=Boston)
Следећи позив се већ односи на линеарни модел, функција 𝑙𝑚 = 𝑙𝑖𝑛𝑒𝑎𝑟 𝑚𝑜𝑑𝑒𝑙 враћа најбољи
линеарни модел који одговара датим подацима.
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
18
И видимо да су обе променљиве значајне.
> 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
При овом запису значи да смо узели у обзир све могуће променљиве које има база.
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
20
Функција 𝑢𝑝𝑑𝑎𝑡𝑒(𝑚𝑜𝑑𝑒𝑙, . . . ) мења модел на задати начин.Просто да не бисмо увек правили од нуле.
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
И не мора само плус да узме између предиктора, може се јавити нпр. и производ.
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
21
Када ставимо 𝐼(𝑥^2) – тиме тражимо да 𝑥^2 посматра тотално независно од 𝑥.
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
22
Хоћемо да пробамо са већим степеном, могли смо у 𝑓𝑖𝑡6 да ставимо 𝑝𝑜𝑙𝑦(𝑙𝑠𝑡𝑎𝑡, 2)добићемо исто.
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
Видимо да је незначајно боља, али зато можда оверфитује модел, што боље свакако да избегнемо.
23
Увод у класификације
Поставка проблема
Линеарна регресија је одличан алат када имамо непрекидну зависну променљиву, а шта да радимо у
случају када је то ипак дискретна случајна величина. Специјално, када узима вредности 0 и 1? Тада
морамо да прибегнемо идејама класификаторем јер линеарна регресија више не може квалитетно да
обави тражено.
Једна од основних метода је наравно логистичка регресија. Назив „класификација“ долази из просте
идеје што је нама циљ да неки нови податак према неким већ познатим вредностима
сместимо/класификујемо у неку од унапред одређених класа.
• Нека особа долази до амбуланте са симптомима који могу 3 болести да узрокују. Коју од те три
има дата особа?
• Банкарски онлајн сервис мора да „уме“ да одреди да ли је трансакција била валидна на основу
𝐼𝑃 −адресе, претходним трансакцијама итд
И наравно слично као у регресији желимо да процена буде добра, тј. не само да „добро“ одреди већ
постојећи систем, већ и да уме да протумачи новодобијени податак на прави начин.
Нека су дати 𝑋 = (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) и 𝑌 = (𝑦1 , 𝑦2 , … , 𝑦𝑛 ) само овог пута је 𝑦𝑖 дискретно и категоричко, што би
значило да сваки од њих представља неку класу међу унапред познатим могућим класама.
На пример: 𝑋 је резултат поена на пријемном испиту, док је 𝑌 да ли је особа примљена (1) или не (0),
самим тим је дато две могуће класе и све су познате.
Циљ је наћи такву функцију 𝑓(∙) која ће за дати 𝑋 одредити класу којој припада, дакле опет је
формула: 𝑌 = 𝑓(𝑋) , што се такође може записати као
𝑦𝑖 = 𝑓(𝑥𝑖 ) , ∀𝑖 ∈ 1, 𝑛
• Логистичка регресија
• Дискриминаторне методе: 𝐿𝐷𝐴, 𝑄𝐷𝐴
• 𝑘 −најближих суседа 𝐾𝑁𝑁
• и други...
24
Грешке
Увек нас занима колико је добијен класификатор погрешио, односно погодио. Многе битне
информације се извлаче из матрице конфузије.
Логистичка регресија
Нека 𝑌 узима вредности из скупа {0,1}. Означимо 𝑃{𝑌 = 1|𝑋} = 𝑝(𝑋) , тада је 𝑃{𝑌 = 0|𝑋} = 1 − 𝑝(𝑋).
У случају регресије смо то оцењивали са 𝑝(𝑋) = 𝛽1 ∙ 𝑋 + 𝛽0 , док овде то нема много смисла.
е𝛽1∙𝑋+𝛽0
Логистичка регресија заправо налаже да се она оцени на следећи начин 𝑝(𝑋) =
1+е𝛽1∙𝑋+𝛽0
Ова метода је добила назив баш због оваквог изгледа апроксимације функције 𝑝(𝑋), јер таква
функција се назива логистичка функција.
Сада је циљ само оценити 𝛽0 и 𝛽1 . То можемо урадити помоћу методе максималне веродостојности.
𝑝(𝑋)
Пре тога приметимо да важи 1−𝑝(𝑋) = е𝛽1 ∙𝑋+𝛽0 .
𝑝(𝑋)
Односно, уколико логаритмујемо претходну једнакост добијамо log (1−𝑝(𝑋)) = 𝛽1 ∙ 𝑋 + 𝛽0 .
И приметимо да смо сада то све свели тачно на проблем просте линеарне регресије коју смо већ
разматрали.
И даље остаје питање како оценити параметре, јер ми немамо тачне податке о 𝑝(𝑋).
25
𝑙(𝛽0 , 𝛽1 ) = 𝐴 ∙ log(𝑝(𝑋)) + (𝑛 − 𝐴) ∙ log(1 − 𝑝(𝑋)) = 𝐴 ∙ (𝛽1 ∙ 𝑋 + 𝛽0 ) −𝑛 ∙ log(1 + 𝑒 𝛽1 ∙𝑋+𝛽0 )
Исто као и у случају линеарне регресије можемо да тестирамо значајност оцењених параметара
Валдовим статистичким тестом.Уколико је 𝑝 −вредност довоњно велика, можемо занемарити
одговарајући предиктор.
Ако пажљиво погледамо на све кораке видимо да логистичка регресија на крају враћа вероватноћу
𝑝(𝑋) за неко дато 𝑋 = 𝑥. Како из ове вероватноће добити класу? Како радимо у проблему бинарног
класификатора то се предлаже да се класификују према следећем правилу :
Битно је имати у виду да се тај параметар такође може „учити“, тј. оцењивати према потребама нашег
задатка у зависности од тога шта тачно желимо да минимизујемо.
Матрица конфузије
Први елемент матрице (1,1) се назива 𝑡𝑟𝑢𝑒 𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑒(𝑇𝑁) ,елемент (1,2) који одговара предвиђеном
𝑁𝑜 и реализованом 𝑌𝑒𝑠 , је 𝑓𝑎𝑙𝑠𝑒 𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑒(𝐹𝑁) ,елемент (2,1) је 𝑓𝑎𝑙𝑠𝑒 𝑝𝑜𝑠𝑖𝑡𝑖𝑣𝑒(𝐹𝑃) и елемент (2,2) је
𝑟𝑢𝑒 𝑝𝑜𝑠𝑖𝑡𝑖𝑣𝑒(𝑇𝑃).
26
Мере квалитета из матрице конфузије
𝑇𝑃
• Recall(sensitivity) 𝑇𝑃+𝐹𝑁
𝑇𝑁
• Specificity 𝑇𝑁+𝐹𝑃
𝑇𝑃
• Precision 𝑇𝑃+𝐹𝑃
𝑇𝑃+𝑇𝑁
• Accuracy 𝑇𝑃+𝑇𝑁+𝐹𝑃+𝐹𝑁
2∙𝑇𝑃
• F1 score
2∙𝑇𝑃+𝐹𝑃+𝐹𝑁
• и многе друге у зависности од проблема
Али у суштини главна је ствар знати „цену“ сваког елемента, односно сваке грешке. Тек према томе
можемо креирати праву меру квалитета за дати проблем.
Идеја и начин извођења оцена остаје исти, само се димензионалност повећава и самим тим
сложеност рачуна.
У случају да имамо више од две класе – одговарајућа метода се више не зове логистичка регресија,
већ мунтиномијална (логистичка) регресија. Поставка семало мења у односу на обичну логистичку
регресију. Нека имамо 𝐾 класа, тада
С тим да важи :
𝑒 𝛽𝑖∙𝑋
𝑝𝑖 (𝑋) = 𝛽𝑗 ∙𝑋
, ∀𝑖 ∈ ̅̅̅̅̅̅̅̅̅̅
1, 𝐾 − 1
1 + ∑𝐾−1
𝑗=1 𝑒
1
𝑝𝐾 (𝑋) = 𝛽𝑗 ∙𝑋
1+ ∑𝐾−1
𝑗=1 𝑒
27
Логистичка регресија : > 2 класе, класификација
Како и мутиномијална регресија враћа вероватноће да припада одређеној класи, морамо некако из
тога да извучемо класу. То се ради помоћу 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(·) функције. Односно 𝑗 −том елементу се
додељује класа за коју се добија највећа вероватноћа.
Примери- кодови у 𝑹 −у
Мултиномијална регресија није у стандардном пакету у 𝑅 − у, већ се налази у пакету 𝑛𝑛𝑒𝑡 .Позива се
помоћу multinom(Y∼X).
Пример 1 :
База садржи резултате студената на пријемним испитима на неком факултету за упис на мастер
студије (прве две колоне), док је трећа колона индикатор да ли је дати студент уписао или није мастер
студије.
Команда 𝑎𝑡𝑡𝑎𝑐ℎ() нам је потребна да не бисмо сваки пут наводили у којој бази радимо.
> attach(Baza)
Функција 𝑔𝑙𝑚(, 𝑓𝑎𝑚𝑖𝑙𝑦 = 𝑏𝑖𝑛𝑜𝑚𝑖𝑎𝑙) је функција помоћу које користимо логистичку регресију, уз
обавезно навођење аргумента "𝑓𝑎𝑚𝑖𝑙𝑦 = 𝑏𝑖𝑛𝑜𝑚𝑖𝑎𝑙" чиме задајемо да желимо да 𝑅 покрене баш
логистичку регресију.
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
> V4 = V1 + V2
29
Даље примењујемо функцију 𝑝𝑟𝑒𝑑𝑖𝑐𝑡() , која нам омогућава процену да ли уз дате 𝑉1 и 𝑉3 студент
требао да упише тај мастер програм.
Дакле, студент са 20 поена и 100 поена на другом испиту има око 0.3 да упише мастер.
> 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
Исцртава све могуће графике распрштености променљивих у датој бази:
Логистичка регресија, се покреће помоћу функције 𝑔𝑙𝑚 уз обавезно навођење аргумената 𝑓𝑎𝑚𝑖𝑙𝑦 =
𝑏𝑖𝑛𝑜𝑚𝑖𝑎𝑙 :
> 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
При овом позиву предвиђање се врши над истим скупом вредности над којима је саграђен модел, да
би задали неке нове вредности морамо: 𝑝𝑟𝑒𝑑𝑖𝑐𝑡(𝑔𝑙𝑚. 𝑓𝑖𝑡, 𝑛𝑒𝑤𝑑𝑎𝑡𝑎, 𝑡𝑦𝑝𝑒 = "𝑟𝑒𝑠𝑝𝑜𝑛𝑠𝑒"), где је 𝑛𝑒𝑤𝑑𝑎𝑡𝑎 =
𝑑𝑎𝑡𝑎. 𝑓𝑟𝑎𝑚𝑒(𝐿𝑎𝑔1 = 𝑥1, 𝐿𝑎𝑔2 = 𝑥3, . . . , 𝑉𝑜𝑙𝑢𝑚𝑒 = 𝑥6).
> glm.probs[1:5]
1 2 3 4 5
0.5070841 0.4814679 0.4811388 0.5152224 0.5107812
За оне који имају вероватноћу већу од 0.5 додељујемо 𝑈𝑝, за преостале 𝐷𝑜𝑤𝑛.
32
Издвојићемо скуп за обучавање и контролни скуп на основу године ( до 2005. и 2005., респективно)
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
И покренућемо предвиђање за подскуп који нисмо користили за учење и проверавамо колико је добр
та оцена:
И након овог позива видимо да и није нешто добро. Али то и није толико неочекивано, јер заиста
предвидети вредност нећега на верзи није наивно, нити једноставно, ако је и уопште урадиво.
33
Овде можемо да видимо кад је предвиђање да ће цена да опадне – имамо тачно 50% шанси за
погађање, док у случају када каже да ће да порасте око 0.58
Нека је опет дато 𝑋 = (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) и 𝑌 = (𝑦1 , 𝑦2 , … , 𝑦𝑛 ). Нека 𝑌 има свега 𝐶 класа. Опет је циљ наћи
одговарајућу оцену за
Пре свега фиксирамо број 𝑘 −то ће бити баш број суседа које ћемо посматрати. Након тога за сваки
број (вектор) 𝑥 и за сваку класу оцењујемо 𝑝𝑗 (𝑥) на следећи начин:
𝑛
1
𝑝𝑗 (𝑥) = ∑ 𝐼 {𝑥𝑖 ∈ 𝑆𝑥𝑘 },
𝑘
𝑖=1
где је 𝑆𝑥𝑘 −скуп најближих (у односу на задату метрику-најчеће еуклидска) 𝑘 тачака, међу датим
скупом 𝑋, одабраној тачки 𝑥, која може а и не мора да буде у почетном скупу 𝑋.
На крају за дату тачку 𝑥 се одабере класа која је имала највећу вероватноћу 𝑝𝑗 (𝑥).
До сада смо тражили начине да оценимо директно следећи израз 𝑃{𝑌 = 𝑗|𝑋} = 𝑝𝑗 (𝑋) , ∀𝑗 ∈ {1,2, … , 𝐶}
𝑃(𝐴)𝑃(𝐵|𝐴)
𝑃(𝐴|𝐵) =
𝑃(𝐵)
Самим тим на крају имамо да је потребно оценити све што се јавља са десне стране једнакости
Увешћемо ознаке 𝑓𝑗 (𝑥) = 𝑃{𝑋 = 𝑥|𝑌 = 𝑗} − неки облик функције густине и 𝜋𝑗 = 𝑃{𝑌 = 𝑗} априорне
вероватноће припадања класама.
Оцене за 𝜋𝑗 заправо неће бити толико компликоване, јер директно из података можемо да израчунамо
∑𝑛𝑖=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
ЛДА – оцене
𝐶 𝑛
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)
Group means:
Lag1 Lag2
Down 0.04279022 0.03389409
Up -0.03954635 -0.03132544
Down Up
Down 35 35
Up 76 106
> mean(lda.pred$class == Smarket[Year == 2005, ]$Direction)
[1] 0.5595238
38
> plot(model.lda)
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% је погођено тачно, што је велики
успех рачунајући да процењујемо кретање цена на берзи.
Down Up
Down 30 20
Up 81 121
> mean(qda.pred$class == Smarket[Year == 2005, ]$Direction)
[1] 0.5992063
39
За КНН – 𝑘 најближих суседа нам је потребно прво да направимо одговарајуће матрице
> k = 1
Методом „пробај па шта испадне“ можемо да видимо да се најбољи резултат добије за вредност 𝑘 =
2 , 56% је погођено тачно. Али то је и даље слабије од КДА методе, тако да можемо да закључимо да
у случају овог проблема најбољу оцену је дала метода КДА.
> 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
41
Са ′𝑑𝑎𝑟𝑡′ :
𝑍1 = ∑ 𝜙𝑘1 𝑋𝑘
𝑘=1
42
Редукција димензија : Метода 𝑷𝑪𝑨 – суштина
Након добијања прве главне компоненте 𝑍1 тражимо другу тако да је опет са максималном
дисперзијом, нормализованим константама и још да је ортогонална на 𝑍1 . Поступак настављамо тако
што 𝑍3 има све исте услове, уд додатак ортогоналности на 𝑍1 и 𝑍2 итд...
Тиме, заправо, добијамо нови векторски простор где су нам осе ове нове променљиве 𝑍ј и уз то важи
да променњиве са мањим 𝑗 хватају значајнији део целокупне дисперзије података и самим тим су
информативнији.
Главни проблем код тог приступа- губљење јасне интерпретације и томе шта значи 𝑍1 , … , 𝑍𝑝 . У случају
пре 𝑃𝐶𝐴 смо тачно знали шта која колона значи и шта је мерила, након методе главних компоненти се
то изгуби.
Оригинални назив : 𝑇 − 𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑒𝑑 𝑆𝑡𝑜𝑐ℎ𝑎𝑠𝑡𝑖𝑐 𝑁𝑒𝑖𝑔ℎ𝑏𝑜𝑟 𝐸𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 (𝑡 − 𝑆𝑁𝐸) – нема превода још увек
Детаљније у раду, где се први пут појављује 𝑡 − 𝑆𝑁𝐸: "Visualizing Data using t-SNE"(2008),
G.Hinton,L.vander Maaten
Примери- кодови у 𝑹 −у
Методу главних компоненти ћемо радити помоћу функције 𝑝𝑟𝑐𝑜𝑚𝑝(), док 𝑡 − 𝑆𝑁𝐸 помоћу функције
𝑡𝑠𝑛𝑒() из пакета 𝑡𝑠𝑛𝑒.
Подаци:
43
Применимо 𝑎𝑝𝑝𝑙𝑦 функције:
𝑃𝐶𝐴 применом:
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
Колико је дисперзије објашњено:
Или просто:
> 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)
52