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




формула байєса (4)

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

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

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

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

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

Обучая это значит обучать их конкретным материалам, чтобы позже мы могли тестировать их на неизвестные исходные данные (которые они никогда не видели раньше), для которых они могут классифицировать или прогнозировать и т. Д. (В случае контролируемого обучения) на основе их обучения. Это то, на чем основаны большинство методов машинного обучения, таких как Neural Networks, SVM, Bayesian и т. Д.

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

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

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

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

Источник, например, ниже : http://www.statsoft.com/textbook/naive-bayes-classifier

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

Как указано, объекты могут быть классифицированы как 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, который охватывает число (выбирается априори) точек независимо от их ярлыков класса. Затем мы вычисляем количество точек в круге, принадлежащих каждой метке класса. Из этого мы вычисляем вероятность:

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

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

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


Рам Нарасимхан объяснил концепцию, очень красивую здесь ниже, - это альтернативное объяснение с помощью примера кода Наивного Байеса в действии
Он использует пример из этой книги на стр. 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

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

мир


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

Предположим, вы знаете, что 10% людей являются курильщиками. Вы также знаете, что 90% курильщиков составляют мужчины и 80% из них старше 20 лет.

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

 X = smoker | he is a man and under 20

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

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

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

Таким образом, мы имеем:

P(X) = 
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 ....


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

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

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

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

Формула для прогнозирования NB:

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

Давайте рассмотрим пример того, как NB woks

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

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.

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

См. Репозиторий GitHub Naive-Bayes-Examples





naivebayes