Простое объяснение классификации Наив Байеса

Мне сложно понять процесс Naive Bayes, и мне было интересно, сможет ли кто-нибудь объяснить это простым пошаговым процессом на английском языке. Я понимаю, что для сравнения нужны времена, как вероятность, но я не знаю, как данные обучения связаны с фактическим набором данных.

Пожалуйста, объясните, какую роль играет тренировочный набор. Я даю очень простой пример для фруктов здесь, например, банан

training set---
round-red
round-orange
oblong-yellow
round-red

dataset----
round-red
round-orange
round-red
round-orange
oblong-yellow
round-red
round-orange
oblong-yellow
oblong-yellow
round-red

Ответ 1

Ваш вопрос, насколько я понимаю, разделен на две части, первая часть - вам нужно лучшее понимание наивного байесовского классификатора, а вторая часть - путаница вокруг тренировочного набора.

В общем, все алгоритмы машинного обучения необходимо обучать для контролируемых задач обучения, таких как классификация, прогнозирование и т.д., Или для неконтролируемых задач обучения, таких как кластеризация.

На этапе обучения алгоритмы обучаются с определенным входным набором данных (обучающим набором), чтобы в дальнейшем мы могли проверить их на неизвестные входные данные (которые они никогда раньше не видели), для которых они могут классифицировать или прогнозировать и т.д. (В случае наблюдения) обучение) на основе их обучения. Это то, на чем основано большинство методов машинного обучения, таких как нейронные сети, SVM, байесовские и т.д.

Таким образом, в общем проекте машинного обучения вы должны разделить входной набор на набор разработки (обучающий набор + тестовый набор) и набор тестов (или оценочный набор). Помните, что ваша основная цель состоит в том, чтобы ваша система изучала и классифицировала новые входы, которые они никогда не видели раньше ни в наборе Dev, ни в наборе тестов.

Тестовый набор обычно имеет тот же формат, что и обучающий набор. Однако очень важно, чтобы набор тестов отличался от учебного корпуса: если бы мы просто повторно использовали набор тестов в качестве набора тестов, то модель, которая просто запоминала свой ввод, не научившись обобщать на новые примеры, получала бы обманчиво. Лучшие результаты.

В целом, например, 70% наших данных можно использовать в качестве учебных наборов. Также не забудьте разделить оригинальный набор на обучающий и тестовый наборы случайным образом.

Теперь я перехожу к вашему другому вопросу о наивном байесовском.

Чтобы продемонстрировать концепцию наивной байесовской классификации, рассмотрим пример, приведенный ниже:

enter image description here

Как указано, объекты могут быть классифицированы как GREEN или RED. Наша задача состоит в том, чтобы классифицировать новые случаи по мере их поступления, т.е. решать, к какой метке класса они принадлежат, основываясь на существующих в настоящее время объектах.

Поскольку GREEN объектов в два раза больше, чем RED, разумно полагать, что новый случай (который еще не наблюдался) имеет в два раза больше шансов на получение GREEN, чем RED. В байесовском анализе это убеждение известно как априорная вероятность. Предыдущие вероятности основаны на предыдущем опыте, в данном случае проценте GREEN и RED объектов, и часто используются для прогнозирования результатов до того, как они действительно произойдут.

Таким образом, мы можем написать:

До вероятности GREEN: number of GREEN objects/total number of objects

Априорная вероятность RED: number of RED objects/total number of objects

Поскольку существует всего 60 объектов, 40 из которых GREEN и 20 RED, наши предыдущие вероятности для членства в классе:

Предварительная вероятность для GREEN: 40/60

Предварительная вероятность для RED: 20/60

Сформулировав нашу предыдущую вероятность, мы теперь готовы классифицировать новый объект (WHITE круг на диаграмме ниже). Поскольку объекты хорошо сгруппированы, разумно предположить, что чем больше GREEN (или RED) объектов в окрестности X, тем больше вероятность того, что новые случаи принадлежат именно этому цвету. Чтобы измерить эту вероятность, мы нарисуем круг вокруг X, который охватывает количество (выбираемое априори) точек независимо от их меток класса. Затем мы вычисляем количество точек в круге, принадлежащих каждой метке класса. Из этого мы рассчитываем вероятность:

enter image description here

enter image description here

Из иллюстрации выше видно, что вероятность X данного GREEN меньше, чем вероятность X RED, поскольку круг охватывает 1 GREEN объект и 3 RED. Таким образом:

enter image description here

enter image description here

Несмотря на то, что предыдущие вероятности показывают, что X может принадлежать к GREEN (при условии, что есть в два раза больше GREEN по сравнению с RED) вероятность указано иное; что членство в классе X является RED (учитывая, что в окрестностях X больше RED объектов, чем GREEN). В байесовском анализе окончательная классификация производится путем объединения обоих источников информации, т.е. Предварительного и вероятностного, для формирования апостериорной вероятности с использованием так называемого правила Байеса (названного в честь преподобного Томаса Байеса 1702-1761 гг.).

enter image description here

Наконец, мы классифицируем X как RED поскольку членство в классе достигает наибольшей апостериорной вероятности.

Ответ 2

Я понимаю, что это старый вопрос с установленным ответом. Причина, по которой я публикую, - это то, что принятый ответ содержит много элементов k-NN (k-ближайших соседей), другой алгоритм.

Оба k-NN и NaiveBayes являются алгоритмами классификации. Концептуально k-NN использует идею "близости" для классификации новых объектов. В k-NN "близость" моделируется такими идеями, как евклидово расстояние или расстояние косинуса. Напротив, в NaiveBayes понятие "вероятность" используется для классификации новых объектов.

Поскольку вопрос касается Наивного Байеса, вот как я бы описал идеи и шаги для кого-то. Я постараюсь сделать это с помощью как можно большего количества уравнений и на простом английском языке.

Во-первых, условная вероятность и правило байеса

Прежде чем кто-то сможет понять и оценить нюансы Наивного Байеса, им нужно сначала знать пару связанных понятий, а именно идею условной вероятности и правило Байеса. (Если вы знакомы с этими понятиями, перейдите к разделу под названием Getting to Naive Bayes)

Условная вероятность на простом английском языке: какова вероятность того, что что-то произойдет, учитывая, что что-то еще произошло.

Скажем, что есть некоторый Итог O. И некоторые Доказательства E. Из того, как определяются эти вероятности: Вероятность иметь как результат O, так и доказательство E:  (Вероятность возникновения O), умноженная на (Prob of E при условии, что O произошло)

Один пример для понимания условной вероятности:

Скажем, у нас есть коллекция сенаторов США. Сенаторами могут быть демократы или республиканцы. Они также являются мужчинами или женщинами.

Если мы выберем одного сенатора совершенно случайным образом, какова вероятность того, что этот человек является женщиной-демократом? Условная вероятность может помочь нам ответить на это.

Вероятность (демократ и сенатор-женщина) = Пробовать (сенатор-демократ), умноженный на условную вероятность быть женщиной, учитывая, что они демократ.

  P(Democrat & Female) = P(Democrat) * P(Female | Democrat) 

Мы могли бы вычислить то же самое, обратное:

  P(Democrat & Female) = P(Female) * P(Democrat | Female) 

Понимание правила Байеса

Концептуально, это способ перейти от P (Evidence | Known Outcome) к P (Итог | Известные доказательства). Часто мы знаем, как часто наблюдаются определенные доказательства, с учетом известного результата. Мы должны использовать этот известный факт, чтобы вычислить обратное, чтобы вычислить вероятность такого исхода, учитывая доказательства.

P (Итог, учитывая, что мы знаем некоторые данные) = P (данные, полученные с учетом результата) Время Prob (Исход), масштабируемое по P (Evidence)

Классический пример для понимания правила Байеса:

Probability of Disease D given Test-positive = 

               Prob(Test is positive|Disease) * P(Disease)
     _______________________________________________________________
     (scaled by) Prob(Testing Positive, with or without the disease)

Теперь все это было просто преамбулой, чтобы добраться до Наивного Байеса.

Как добраться до Наивного Байеса

До сих пор мы говорили только об одном доказательстве. На самом деле мы должны предсказать результат, учитывая несколько доказательств. В этом случае математика становится очень сложной. Чтобы обойти это осложнение, один из подходов состоит в том, чтобы "разобрать" несколько доказательств и рассматривать каждую часть доказательства как независимую. Этот подход объясняется тем, что это называется наивным Байесом.

P(Outcome|Multiple Evidence) = 
P(Evidence1|Outcome) * P(Evidence2|outcome) * ... * P(EvidenceN|outcome) * P(Outcome)
scaled by P(Multiple Evidence)

Многие люди предпочитают помнить об этом как:

                      P(Likelihood of Evidence) * Prior prob of outcome
P(outcome|evidence) = _________________________________________________
                                         P(Evidence)

Обратите внимание на некоторые сведения об этом уравнении:

  • Если Prob (доказательство | результат) равно 1, то мы просто умножаемся на 1.
  • Если Prob (некоторые конкретные доказательства | результат) равен 0, тогда вся проблема. становится 0. Если вы видите противоречивые доказательства, мы можем исключить этот результат.
  • Поскольку мы делим все на P (Evidence), мы можем даже уйти, не вычисляя его.
  • Интуиция за размножением предшествующего заключается в том, что мы даем высокую вероятность более общим результатам и малым вероятностям для маловероятных результатов. Они также называются base rates, и они являются способом масштабирования наших прогнозируемых вероятностей.

Как применять NaiveBayes для прогнозирования результата?

Просто запустите формулу выше для каждого возможного результата. Поскольку мы пытаемся классифицировать, каждый результат называется class, и он имеет class label.. Наша задача - посмотреть на доказательства, рассмотреть, насколько вероятен этот класс или этот класс, и назначить метку каждой организации. Опять же, мы применяем очень простой подход: класс с наивысшей вероятностью объявляется "победителем", и этот ярлык класса присваивается этой комбинации доказательств.

Пример фруктов

Попробуйте это на примере, чтобы увеличить наше понимание: OP запросил пример идентификации "фруктов".

Скажем, что у нас есть данные о 1000 кусках фруктов. Они Бананы, Оранжевый или некоторые Другие фрукты. Мы знаем 3 характеристики каждого фрукта:

  • Будь то Long
  • Будь то Sweet и
  • Если его цвет Желтый.

Это наш "тренировочный комплект". Мы будем использовать это, чтобы предсказать тип любых новых фруктов, с которыми мы сталкиваемся.

Type           Long | Not Long || Sweet | Not Sweet || Yellow |Not Yellow|Total
             ___________________________________________________________________
Banana      |  400  |    100   || 350   |    150    ||  450   |  50      |  500
Orange      |    0  |    300   || 150   |    150    ||  300   |   0      |  300
Other Fruit |  100  |    100   || 150   |     50    ||   50   | 150      |  200
            ____________________________________________________________________
Total       |  500  |    500   || 650   |    350    ||  800   | 200      | 1000
             ___________________________________________________________________

Мы можем заранее рассчитать много вещей о нашей коллекции фруктов.

Так называемые "приоритетные" вероятности. (Если бы мы не знали ни одного из атрибутов фруктов, это было бы нашим предположением.) Это наши base rates.

 P(Banana)      = 0.5 (500/1000)
 P(Orange)      = 0.3
 P(Other Fruit) = 0.2

Вероятность "доказательства"

p(Long)   = 0.5
P(Sweet)  = 0.65
P(Yellow) = 0.8

Вероятность "правдоподобия"

P(Long|Banana) = 0.8
P(Long|Orange) = 0  [Oranges are never long in all the fruit we have seen.]
 ....

P(Yellow|Other Fruit)     =  50/200 = 0.25
P(Not Yellow|Other Fruit) = 0.75

Учитывая фрукты, как его классифицировать?

Скажем, что нам даны свойства неизвестного плода и просят его классифицировать. Нам говорят, что плод длинный, сладкий и желтый. Это банан? Это оранжевый? Или это некоторые другие фрукты?

Мы можем просто запускать числа для каждого из трех результатов, один за другим. Затем мы выбираем наивысшую вероятность и "классифицируем" наш неизвестный плод как принадлежащий к классу, который имел наивысшую вероятность, основываясь на наших предыдущих доказательствах (наш набор уроков 1000 фруктов):

P(Banana|Long, Sweet and Yellow) 
      P(Long|Banana) * P(Sweet|Banana) * P(Yellow|Banana) * P(banana)
    = _______________________________________________________________
                      P(Long) * P(Sweet) * P(Yellow)

    = 0.8 * 0.7 * 0.9 * 0.5 / P(evidence)

    = 0.252 / P(evidence)


P(Orange|Long, Sweet and Yellow) = 0


P(Other Fruit|Long, Sweet and Yellow)
      P(Long|Other fruit) * P(Sweet|Other fruit) * P(Yellow|Other fruit) * P(Other Fruit)
    = ____________________________________________________________________________________
                                          P(evidence)

    = (100/200 * 150/200 * 50/200 * 200/1000) / P(evidence)

    = 0.01875 / P(evidence)

В подавляющем крае (0.252 >> 0.01875) мы классифицируем этот сладкий/длинный/желтый плод как вероятный банан.

Почему Байес Классификатор так популярен?

Посмотрите, к чему это в конечном итоге сходит. Просто подсчет и умножение. Мы можем предварительно вычислить все эти термины, и поэтому классификация становится легкой, быстрой и эффективной.

Let z = 1 / P(evidence). Теперь мы быстро вычислим следующие три величины.

P(Banana|evidence) = z * Prob(Banana) * Prob(Evidence1|Banana) * Prob(Evidence2|Banana) ...
P(Orange|Evidence) = z * Prob(Orange) * Prob(Evidence1|Orange) * Prob(Evidence2|Orange) ...
P(Other|Evidence)  = z * Prob(Other)  * Prob(Evidence1|Other)  * Prob(Evidence2|Other)  ...

Назначьте метку класса того, что является наивысшим номером, и вы закончили.

Несмотря на название, Наивные Байесы оказываются превосходными в некоторых приложениях. Классификация текста - это одна область, где она действительно сияет.

Надеюсь, что это помогает в понимании концепций алгоритма Наивного Байеса.

Ответ 3

Рам Нарасимхан объяснил концепцию, очень красивую здесь ниже, является альтернативным объяснением с помощью примера кода Наивного Байеса в действии
Он использует примерную проблему из этой book на стр. 351
Это набор данных, который мы будем использовать введите описание изображения здесь
В приведенном выше наборе данных, если мы дадим гипотезу = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}, то какова вероятность того, что он купит или не купит компьютер.
Код ниже точно отвечает на этот вопрос.
Просто создайте файл с именем new_dataset.csv и вставьте следующий контент.

Age,Income,Student,Creadit_Rating,Buys_Computer
<=30,high,no,fair,no
<=30,high,no,excellent,no
31-40,high,no,fair,yes
>40,medium,no,fair,yes
>40,low,yes,fair,yes
>40,low,yes,excellent,no
31-40,low,yes,excellent,yes
<=30,medium,no,fair,no
<=30,low,yes,fair,yes
>40,medium,yes,fair,yes
<=30,medium,yes,excellent,yes
31-40,medium,no,excellent,yes
31-40,high,yes,fair,yes
>40,medium,no,excellent,no

Вот код, в котором комментарии объясняют все, что мы здесь делаем! [Python]

import pandas as pd 
import pprint 

class Classifier():
    data = None
    class_attr = None
    priori = {}
    cp = {}
    hypothesis = None


    def __init__(self,filename=None, class_attr=None ):
        self.data = pd.read_csv(filename, sep=',', header =(0))
        self.class_attr = class_attr

    '''
        probability(class) =    How many  times it appears in cloumn
                             __________________________________________
                                  count of all class attribute
    '''
    def calculate_priori(self):
        class_values = list(set(self.data[self.class_attr]))
        class_data =  list(self.data[self.class_attr])
        for i in class_values:
            self.priori[i]  = class_data.count(i)/float(len(class_data))
        print "Priori Values: ", self.priori

    '''
        Here we calculate the individual probabilites 
        P(outcome|evidence) =   P(Likelihood of Evidence) x Prior prob of outcome
                               ___________________________________________
                                                    P(Evidence)
    '''
    def get_cp(self, attr, attr_type, class_value):
        data_attr = list(self.data[attr])
        class_data = list(self.data[self.class_attr])
        total =1
        for i in range(0, len(data_attr)):
            if class_data[i] == class_value and data_attr[i] == attr_type:
                total+=1
        return total/float(class_data.count(class_value))

    '''
        Here we calculate Likelihood of Evidence and multiple all individual probabilities with priori
        (Outcome|Multiple Evidence) = P(Evidence1|Outcome) x P(Evidence2|outcome) x ... x P(EvidenceN|outcome) x P(Outcome)
        scaled by P(Multiple Evidence)
    '''
    def calculate_conditional_probabilities(self, hypothesis):
        for i in self.priori:
            self.cp[i] = {}
            for j in hypothesis:
                self.cp[i].update({ hypothesis[j]: self.get_cp(j, hypothesis[j], i)})
        print "\nCalculated Conditional Probabilities: \n"
        pprint.pprint(self.cp)

    def classify(self):
        print "Result: "
        for i in self.cp:
            print i, " ==> ", reduce(lambda x, y: x*y, self.cp[i].values())*self.priori[i]

if __name__ == "__main__":
    c = Classifier(filename="new_dataset.csv", class_attr="Buys_Computer" )
    c.calculate_priori()
    c.hypothesis = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

    c.calculate_conditional_probabilities(c.hypothesis)
    c.classify()

выход:

Priori Values:  {'yes': 0.6428571428571429, 'no': 0.35714285714285715}

Calculated Conditional Probabilities: 

{
 'no': {
        '<=30': 0.8,
        'fair': 0.6, 
        'medium': 0.6, 
        'yes': 0.4
        },
'yes': {
        '<=30': 0.3333333333333333,
        'fair': 0.7777777777777778,
        'medium': 0.5555555555555556,
        'yes': 0.7777777777777778
      }
}

Result: 
yes  ==>  0.0720164609053
no  ==>  0.0411428571429

Надеюсь, что это поможет лучше понять проблему.

мир

Ответ 4

Наивный Байес: Наивный Байес находится под наблюдением машинного обучения, которое использовалось для классификации наборов данных. Он используется для прогнозирования вещей на основе его предыдущих знаний и предположений о независимости.

Они называют это наивным, потому что его предположения (предполагающие, что все функции в наборе данных одинаково важны и независимы) действительно оптимистичны и редко верны в большинстве реальных приложений.

Это алгоритм классификации, который принимает решение для неизвестного набора данных. Он основан на теореме Байеса, которая описывает вероятность события на основе его предшествующего знания.

На диаграмме ниже показано, как работает наивный Байес.

enter image description here

Формула для предсказания NB:

enter image description here

Как использовать наивный байесовский алгоритм?

Давайте возьмем пример того, как Н.Б. работает

Шаг 1: Сначала мы узнаем вероятность таблицы, которая показывает вероятность да или нет на диаграмме ниже. Шаг 2. Найдите апостериорную вероятность каждого класса.

enter image description here

Problem: Find out the possibility of whether the player plays in Rainy condition?

P(Yes|Rainy) = P(Rainy|Yes) * P(Yes) / P(Rainy)

P(Rainy|Yes) = 2/9 = 0.222
P(Yes) = 9/14 = 0.64
P(Rainy) = 5/14 = 0.36

Now, P(Yes|Rainy) = 0.222*0.64/0.36 = 0.39 which is lower probability which means chances of the match played is low.

Для получения дополнительной информации см. этот блог.

См. GitHub Repository Наивные Байесы-Примеры

Ответ 5

Я пытаюсь объяснить правило Байеса на примере.

Предположим, вы знаете, что 10% людей курят.

Теперь вы видите кого-то, мужчина и 15 лет. Вы хотите знать вероятность того, что он курит:

 P(smoker | he is a man and under 20) 

Поскольку вы знаете, что 10% людей являются курильщиками, ваше первоначальное предположение составляет 10% (предыдущая вероятность, ничего не зная о человеке), но другие доказательства (что он мужчина, и он 15) может повлиять на это предположение.

Каждое доказательство может увеличить или уменьшить этот шанс. Например, тот факт, что он мужчина , может увеличить вероятность, при условии, что этот процент (будучи мужчиной) среди некурящих меньше. Другими словами, быть мужчиной должно быть хорошим показателем того, чтобы быть курильщиком, а не некурящим.

Мы можем показать этот вклад по-другому. Для каждого признака вам нужно сравнить общность (вероятность) этого признака в данных условиях только с его общностью. (P(f | x) vs. P(f)). Например, если мы знаем, что 90% курильщиков - это мужчины, недостаточно сказать, что мужчина является показателем того, что он курит. Например, если вероятность быть мужчиной в обществе также составляет 90% то знание о том, что кто-то является мужчиной, не помогает нам (10% * (90% / 90%) = 10%). Но если мужчины вносят вклад в 40% общества, но в 90% курильщиков, то знание того, что кто-то является мужчиной, увеличивает вероятность быть курильщиком [TG43 Таким же образом, если вероятность быть мужчиной в обществе составляла 95%, то независимо от того, что процент мужчин среди курильщиков высок (90%)! Доказательства того, что кто-то является мужчиной, уменьшают вероятность он курит! (10% * (90% / 95%) = 9.5%).

Итак, мы имеем:

P(smoker | f1, f2, f3,... ) = P(smoker) * contribution of f1* contribution of f2 *... =
P(smoker)* 
(P(being a man | smoker)/P(being a man))*
(P(under 20 | smoker)/ P(under 20))

Обратите внимание, что в этой формуле мы предполагали, что быть мужчиной и моложе 20 лет являются независимыми функциями, поэтому мы умножили их, это означает, что знание того, что кому-то меньше 20 лет, не имеет никакого эффекта догадываясь, что он мужчина или женщина. Но это может быть не так, например, может быть, большинство подростков в обществе - мужчины...

Чтобы использовать эту формулу в классификаторе

Классификатор дан с некоторыми особенностями (быть мужчиной и быть моложе 20 лет), и он должен решить, курит он или нет (это два класса). Он использует вышеприведенную формулу для расчета вероятности каждого класса по признаку (признакам) и назначает вход с наибольшей вероятностью. Для обеспечения требуемых вероятностей (90%, 10%, 80%...) используется обучающий набор. Например, он подсчитывает количество людей в обучающей группе, которые являются курильщиками, и находит, что они вносят 10% выборки. Затем для курящих проверяет, сколько из них мужчины или женщины.... сколько старше 20 или младше 20....