Въведение

Когато учениците за първи път се запознават със статистическо мислене, те обикновено се учат на „често срещано“ разсъждение като инструмент за оценка на параметрите на среда. При този подход статистикът приема предварителен мисловен модел, който използва, за да изчисли дългосрочните честоти (т.е. вероятности) за извличане на конкретна извадка (т.е. извадка с конкретно разпределение на стойности) от околната среда. При физическо извличане на проба от околната среда той използва своя модел, за да заключи вероятността да е начертал такава проба, ако всъщност моделът му е точно описание на околната среда. Това е окончателното му изявление относно параметрите на околната среда. Следователно не е твърдение за вероятност средата да има тази или онази стойност на параметъра.

„Байесовото“ разсъждение е точно такава алтернатива на статистическото мислене. При този подход, когато се сблъска с нова среда, индивидът първо заявява предишните си убеждения относно всички съответни параметри на средата. Тези предишни са твърдения за вероятност, които се оценяват с помощта на предишни срещи със среди, подобни на новосрещаната. След това тези предишни вярвания се актуализират нагоре или надолу, като се използват новите налични данни от новата среда. Тези нови прогнози стават новите предишни стойности и се актуализират с всяка новооткрита среда. По този начин индивидът става повече или по-малко уверен в предишните си неща, когато се натъкне на нова среда.

Тази форма на разсъждение е капсулирана в Теоремата на Байс, формула, описана за първи път от министъра и математика от 18-ти век Томас Байс.

Два страхотни ресурса за развиване на интуитивно разбиране на теоремата на Байс са „тук“ и „тук“.

Наивен Бейс

Класификацията е често срещано приложение на теоремата на Байс. Обща метрика за класифициране е двоична, като например класифициране дали пациентът има определено заболяване или не (т.е. вярно или невярно). Може да бъде и мултиклас, като например класифициране на животно в определена категория (т.е. куче, котка, птица и т.н.).

Naive Bayes е алгоритъм, който често се използва от специалисти по данни в задачи за класификация. Той има много разновидности, но двата най-често срещани са Наивен многочлен на Бейс и Наивен Байес на Гаус. Първото се използва, когато наблюдателните стойности, свързани с всеки клас, са подходящо моделирани чрез мултиномиално разпределение. Последното се използва, когато се работи с непрекъснати данни и обикновено се предполага, че стойностите на наблюдението са разпределени според нормално (или гаусово) разпределение.

Naive в Naive Bayes идва от предположението, че атрибутите на наблюденията са независими един от друг. Въпреки че това предположение никога не може да бъде абсолютно вярно, липсата му би направило изчисляването на байесовите вероятности практически невъзможно, защото в противен случай броят на необходимите изчисления би нараснал експоненциално. На практика обаче Naive Bayes алгоритмите са в състояние да класифицират с поразително високи нива, когато качеството на данните е високо.

Наивен Байес Гаус

Моята персонализирана реализация на Naive Bayes прилага вариацията на Гаус. Целта на алгоритъма е да класифицира y класове с помощта на x атрибути:

  • y … един от k класа (напр. spam/ham, цифра 0–9)
  • x = x1…xn — стойности на атрибути (числови)

Бейсовата вероятност за всеки клас се описва със следната формула.

Алгоритъмът преминава през всички стойности на атрибути за всеки клас съгласно тази формула и генерира байесова вероятностна стойност за всеки клас с общото им сумиране до 1,0. След като този процес приключи, той избира класа с най-високата стойност на вероятността и го връща като предвидения клас на алгоритъма.

Забележка: Горното описание на Naive Bayes Gaussian е перифразирано от тази отлична поредица от лекции по темата.

Случай на употреба

Моето описание на моето внедряване на Naive Bayes Algorithm ще използва известния набор от данни iris за обучение и целеви данни.

Първо импортирам набора от данни за ириса, изпускам колоната Id, разбърквам наблюденията и разделям набора от данни на обучителни и целеви набори от данни.

Моят клас NaiveBayesGauss() се инстанцира и след това моделът се обучава чрез извикване на метода .fit() върху данните за обучение. Методът .fit() съхранява данните за обучение и изчислява средното и стандартното отклонение на всички включени атрибути и класове

Методът .predict() се нарича cafterward. Неговият първичен аргумент е единичен ред атрибути от целевия набор от данни. Методът .predict() изчислява байесовата вероятност на целевите данни за всеки клас и връща класа с най-висока вероятност.

Наличен е незадължителен параметър use_normalizer, в случай че потребителят желае да игнорира нормализирането (т.е. включването на знаменателя) в изчисленията. Това не засяга върнатите прогнози, но стойностите на байесовата вероятност ще бъдат променени. Този параметър е полезен за спестяване на време в случай, че много прогнози се изпълняват последователно.

Променливата predict_prob може да бъде извикана, за да покаже вероятностите на всеки клас.

Методът .predict_accuracy() е наличен за тестване на точността на монтирания модел върху определени целеви набори от данни X и Y. Този метод изпълнява метода .predict() за всяко наблюдение в X и сравнява всяко прогнозиране със съответния му клас в Y. След като бъде завършен, той отпечатва общия процент на точност на правилните попадения.

Методът .predict_accuracy() също има незадължителни аргументи use_normalizer и confusion_matrix. Както е показано по-долу confusion_matrix е полезен аргумент, тъй като показва резултатите от прогнозите в по-подробен формат.

Добрата практика е да се сравнява собствената персонализирана реализация на алгоритъм с професионално разработен такъв, като този на sklearn. В този случай точността им е еднаква, но на практика трябва да очакваме по-голяма вариация в степените на точност.

И накрая, методът .plot_heatmap() генерира повърхностна вероятностна карта за определен клас с два атрибута. Неговите първични аргументи са набори от данни X и Y, които се използват за напасване на данни за обучение, два атрибута, които формират оста x и оста y на топлинната карта, и клас, чиито стойности на вероятността за прогнозиране образуват оста z.

Допълнителни аргументи use_normalizer и h са налични, като последният се използва за генериране на по-плътна координатна система за топлинната карта.

Повърхностната вероятностна карта може да бъде полезна алтернатива на матриците на объркване, тъй като те могат да изяснят относителната връзка между различни класове, поне в две или три измерения.

Забележка: Голяма заслуга за кода, използван за генериране на тази топлинна карта, е на тази публикация в блога на Kaggle.

Хранилището на Github за тази публикация може да бъде намерено тук.