Я збираюся пройти весь процес Naive Bayes з нуля, оскільки мені не зовсім зрозуміло, де ти зациклюється.
Ми хочемо знайти ймовірність того, що до кожного класу належить новий приклад: ). Потім ми обчислюємо цю ймовірність для кожного класу і вибираємо найбільш ймовірний клас. Проблема полягає в тому, що ми зазвичай не маємо цих ймовірностей. Однак теорема Байєса дозволяє нам переписати це рівняння в більш простежуваній формі.P(class|feature1,feature2,...,featuren
Байєсовий «Там» просто або з точки зору нашої проблеми:
P(A|B)=P(B|A)⋅P(A)P(B)
P(class|features)=P(features|class)⋅P(class)P(features)
Ми можемо спростити це, видаливши . Ми можемо це зробити, тому що ми збираємося класифікувати для кожного значення ; будуть щоразу однакові - це не залежить від . Це залишає нам
P(features)P(class|features)classP(features)classP(class|features)∝P(features|class)⋅P(class)
Попередні ймовірності, , можна обчислити так, як ви описали у своєму запитанні.P(class)
Це залишає . Ми хочемо усунути масовий і, мабуть, дуже рідкий, спільний ймовірність . Якщо кожна функція не є незалежною, тоді особливість_2 Навіть якщо вони насправді не є незалежними, можна припустити, що вони є (це " наївна "частина наївного Байєса). Я особисто думаю, що простіше продумати дискретні (тобто категоричні) змінні, тому давайте скористаємося трохи іншою версією вашого прикладу. Тут я розділив кожен вимір функції на дві категоричні змінні.P(features|class)P(feature1,feature2,...,featuren|class)P(feature1,feature2,...,featuren|class)=∏iP(featurei|class)
.
Приклад: Навчання класифікатора
Для підготовки класифікатора ми підраховуємо різні підмножини точок та використовуємо їх для обчислення попередніх та умовних ймовірностей.
Пріори тривіальні: Є шістдесят загальних балів, сорок - зелений, а двадцять - червоний. Таким чином,П( c l a s s = gr e e n ) = 4060= 2 / 3 і Р( c l a s s = r e d) = 2060= 1 / 3
Далі ми повинні обчислити умовні ймовірності кожної функції-значення, що задається класом. Тут є дві особливості: та , кожна з яких приймає одне з двох значень (A або B для одного, X або Y для іншого). Тому нам потрібно знати наступне:fe a t u r e1fe a t u r e2
- П( fe a t u r e1= А | c l a s s = r e d)
- П( fe a t u r e1= В | c l a s s = r e d)
- П( fe a t u r e1= А | c l a s s = gr e e n )
- П( fe a t u r e1= В | c l a s s = gr e e n )
- П( fe a t u r e2= X| class=red)
- П( fe a t u r e2= Y| class=red)
- П( fe a t u r e2= X| class=gr e e n )
- П( fe a t u r e2= Y| class=gr e e n )
- (якщо це не очевидно, це всі можливі пари характеристик-значень та класу)
Їх легко обчислити шляхом підрахунку та ділення. Наприклад, для ми дивимось лише на червоні точки і підраховуємо, скільки з них є в області "A" для . Є двадцять червоних точок, всі вони знаходяться в області "А", тому . Жодна з червоних точок не знаходиться у регіоні B, тому . Далі робимо те саме, але враховуємо лише зелені точки. Це дає нам і . Повторимо цей процес для , щоб округлити таблицю ймовірностей. Припускаючи, що я правильно порахував, ми отримуємоП( fe a t u r e1= А | c l a s s = r e d)fe a t u r e1П( fe a t u r e1= А | c l a s s = r e d) = 20 / 20 = 1П( fe a t u r e1| class=red) = 0 / 20 = 0П( fe a t u r e1= А | c l a s s = gг е е п ) = 5 / 40 = 1 / 8П( fe a t u r e1= В | c l a s s = gг е е п ) = 35 / 40 = 7 / 8fe a t u r e2
- П( fe a t u r e1= А | c l a s s = r e d) = 1
- П( fe a t u r e1= В | c l a s s = r e d) = 0
- П( fe a t u r e1= А | c l a s s = gг е е п ) = 1 / 8
- П( fe a t u r e1= В | c l a s s = gг е е п ) = 7 / 8
- П( fe a t u r e2= X| class=red) = 3 / 10
- П( fe a t u r e2= Y| class=red) = 7 / 10
- П( fe a t u r e2= X| class=gг е е п ) = 8 / 10
- П( fe a t u r e2= Y| class=gг е е п ) = 2 / 10
Ці десять ймовірностей (два пріори плюс вісім умов) є нашою моделлю
Класифікація нового прикладу
Давайте класифікуємо білу точку з вашого прикладу. Він знаходиться в області "А" для та в області "Y" для . Ми хочемо знайти ймовірність того, що це є в кожному класі. Почнемо з червоного. Використовуючи формулу вище, ми знаємо, що:
Subbing у ймовірності з таблиці отримаємоfe a t u r e1fe a t u r e2П( c l a s s = r e d| example)∝P( c l a s s = r e d) ⋅ Р( fe a t u r e1= А | c l a s s = r e d)⋅ Р( fe a t u r e2= Y| class=red)
П( c l a s s = r e d| example)∝ 13⋅ 1 ⋅ 710= 730
Потім робимо те ж саме для зеленого:
П( c l a s s = gr e e n | e x a m p l e ) ∝ P( c l a s s = gr e e n ) ⋅ P( fe a t u r e1= А | c l a s s = gr e e n )⋅ Р( fe a t u r e2= Y| class=gr e e n )
Підчинення в цих значеннях отримує нас 0 ( ). Нарешті ми подивимось, який клас дав нам найбільшу ймовірність. У цьому випадку це очевидно червоний клас, тож саме тут ми присвоюємо бал.2 / 3 ⋅ 0 ⋅ 2 / 10
Примітки
У вашому оригінальному прикладі функції безперервні. У такому випадку потрібно знайти спосіб присвоїти P (характеристика = значення | клас) для кожного класу. Ви можете розглянути можливість пристосування до відомого розподілу ймовірностей (наприклад, гаусса). Під час навчання ви знайдете середню величину та відхилення для кожного класу вздовж кожного виду ознак. Щоб класифікувати точку, ви знайдете , підключивши відповідне середнє значення та дисперсію для кожного класу. Інші розповсюдження можуть бути більш підходящими, залежно від деталей ваших даних, але гауссова людина буде гідною відправною точкою.П( fe a t u r e = v a l u e | c l a s s )
Я не надто знайомий із набором даних DARPA, але ви зробите по суті те ж саме. Ви, ймовірно, обчислюєте щось на зразок P (атака = ІСТИНА | послуга = палець), P (атака = помилка | служба = палець), P (атака = TRUE | послуга = ftp) тощо, а потім комбінуєте їх у так само, як приклад. Як зауваження, частина хитрості тут полягає у створенні хороших особливостей. Наприклад, вихідний IP, ймовірно, буде безнадійно рідким - ви, мабуть, матимете лише один-два приклади для даного IP. Ви можете зробити набагато краще, якщо ви розмістили IP-адресу та використали "Source_in_same_building_as_dest (true / false)" або щось як функцію.
Я сподіваюся, що це допомагає більше. Якщо що-небудь потребує роз'яснення, я буду радий спробувати ще раз!