Лінійна регресія з прикладами на r, про програмування, алгоритмах і не тільки

Мене давно переслідує ідея пройтися по ключовим алгоритмам data mining. систематизувати наявні знання і скласти якийсь огляд з прикладами. Власне, цією статтею і ознаменує початок даної серії. Для прикладів буде використовуватися програмне середовище R. про яку я вже писав в одному з минулих постів.

лінійна регресія

Строго кажучи, лінійна регресія не є алгоритмом data mining. Це один з методів прийшли з статистики. У статистиці, під регресією, зазвичай мають на увазі прогнозування, в тій чи іншій формі. Існує безліч різних типів регрессий, але в основі будь-якого з них лежить одна і та ж ідея: побудувати модель, яка б пов'язала пророкує значення з вихідними даними (предикторами), мінімізуючи помилку.

Лінійна регресія це найпростіший варіант регресії. Розглянемо, для прикладу, лінійну регресію з одним предиктором і одним пророкувати значенням. Таку регресію легко намалювати на графіку X-Y. Для цього по осі абсцис X ми відзначаємо значення предиктор, а по осі ординат Y значення передбачали величини. Тоді проста лінійна регресія це пряма, проведена таким чином, щоб мінімізувати розбіжність між істинними значеннями передбачали величини і точками на лінії, відповідними значеннями предикторів.

Лінійна регресія з прикладами на r, про програмування, алгоритмах і не тільки

Мовою математики, ми можемо описати нашу лінійну модель у вигляді рівняння: Y = a + b * X, де X - це предиктор або вихідні дані, а Y - це пророкує величина. А саму задачу переформулювати у вигляді: знайти коефіцієнти a і b мінімізують величину помилки.
Коли модель побудована, а коефіцієнти знайдені ми можемо використовувати отримане рівняння для передбачення невідомих нам значень.

Візьмемо приклад з області фінансів. Ні для кого не секрет, що ціни акцій нафтовидобувних компаній сильно залежать від цін на нафту. У нульовому наближенні, ми можемо вважати що

Ціна Акції = K * Ціна бареля нафти + Якась константа

Якщо ми можемо визначити константу і коефіцієнт, то ми можемо за ціною на нафту передбачати ціну акції. Якщо виникає відхилення, то можна купити спред і на цьому заробити, в теорії, природно.

А тепер практика, візьмемо R, і проведемо лінійну регресію цін акцій компанії Роснефть за ціною на нафту. Вихідні дані можна взяти тут:
результат:

Лінійна регресія з прикладами на r, про програмування, алгоритмах і не тільки

На малюнку, що цікавлять нас коефіцієнти, позначені (1). Підставивши їх в рівняння регресії, отримаємо вираз: ROSN = 61.405 + 1.944 * Brent Крім значень, власне, коефіцієнтів, R показує нам величини помилок, або стандартного відхилення, для кожного коефіцієнта. Але це не все. Наприклад, нам може бути цікаво, пояснюють взагалі хоч що-небудь наші коефіцієнти. Щоб перевірити це, ми, висуваємо нульову гіпотезу, що, наприклад, коефіцієнт 61.405 є лише результатом похибки і його значенням можна знехтувати. Для перевірки такої гіпотези, використовується t-критерій Стьюдента. Тут R за нас робить всю роботу, обчислюючи як саму величину t так і ступінь значущості нашої гіпотези Pr (> | t |). Так, в нашому випадку величина (2) 0.0036 означає що ми на 100 * (1-0.0036) = 99.64% впевнені в тому, що вільний член в нашому вираженні відмінний від нуля. Далі ми можемо перевірити, наскільки точно наша модель описує дані. Для цього використовуються коефіцієнти R 2 (3). Чим ближче величина цих значень до 1, тим краще. 1 це ідеальний результат, що означає, що модель на 100% описує дані. І, нарешті, останнє, що ми можемо перевірити, це те, наскільки передбачали величина залежить від предикторов. Для цього висувається нульова гіпотеза, що передбачали величина взагалі не залежить від предикторов. Для цієї гіпотези визначається p-значення (4). У нашому випадку, воно вийшло рівним 2.65 * 10 ^ -8. Тобто ми можемо бути впевнені на 99.99999735%, що передбачали величина дійсно залежить від предикторов. Зазвичай, має сенс дивитися на цей параметр в першу чергу, адже він визначає, наскільки взагалі наша модель адекватна. Так, до речі, графік трохи вище, якраз показує наші дані і результат лінійної регресії.

Що якщо мої дані не описуються прямою лінією?

Лінійна регресія з одним предиктором це найпростіший варіант регресії, на практиці можливий цілий ряд ускладнень дозволяють вирішувати набагато складніші завдання: 1) додавання декількох предикторов - додаткові предиктори можуть додати в модель більше інформації і, тим самим, поліпшити результати. Рівняння лінійної регресії, в такому випадку може мати такий вигляд: Y = a + b1 * X1 + ... bn * Xn 2) попереднє перетворення предикторов - Зведення предикторов в ступінь або вилучення коренів є одним із способів збільшити можливості лінійної регресії. На практиці, нерідко доводиться проводити велику кількість різних перетворень з метою з'ясувати, яке з них дасть найкращу оцінку. 3) в рівняння моделі можуть бути додані члени містять твір предикторов 4) часто виникає завдання передбачення ймовірності виникнення події. Тобто пророкувало величина приймає лише два значення 1 і 0 або так і немає. Для вирішення такого роду завдань застосовується логістична регресія. На щастя, всі ці та безліч інших доповнень реалізовані в R і готові до використання. Інформацію про те, як ними користуватися можна почерпнути набравши в командному інтерфейсі R.

SergE San Francisco, California, United States Hi, I am a senior software engineer in a big web company. Mainly interested in data mining and machine learning. My 'native' programming language is Java, though I believe Haskell and FP in general is better. I have decent experience with C # and .Net stack as well. In my spare time I'm happy to compete with smart people on Topcoder and Kaggle. My TC profile is here. Kaggle profile here If you want to talk, just send a message: e d u n o v @ g m a i l. c o m View my complete profile

Блоги, які я Новомосковськ