Una explicación simple de la Clasificación Naive Bayes

Me resulta difícil entender el proceso de Naive Bayes, y me preguntaba si alguien podría explicarlo con un simple proceso paso a paso en inglés. Entiendo que toma comparaciones por momentos ocurridos como una probabilidad, pero no tengo idea de cómo los datos de entrenamiento están relacionados con el conjunto de datos real.

Por favor, dame una explicación de qué papel juega el conjunto de entrenamiento. Estoy dando un ejemplo muy simple de frutas aquí, como el plátano, por ejemplo

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 

Tu pregunta tal como la entiendo está dividida en dos partes. Una cosa es que necesitas más comprensión para el clasificador Naive Bayes y la segunda es la confusión que rodea al conjunto de Entrenamiento.

En general, todos los algoritmos de aprendizaje automático deben ser entrenados para tareas de aprendizaje supervisado, como clasificación, predicción, etc., o para tareas de aprendizaje no supervisadas, como la agrupación en clústeres.

Al entrenar, significa entrenarlos en entradas particulares para que luego podamos probarlos con entradas desconocidas (que nunca antes habían visto) para las cuales pueden clasificar o predecir, etc. (en caso de aprendizaje supervisado) en función de su aprendizaje. Esto es en lo que se basan la mayoría de las técnicas de Machine Learning como Neural Networks, SVM, Bayesian, etc.

Por lo tanto, en un proyecto general de Aprendizaje automático, básicamente debe dividir su conjunto de entrada en un conjunto de desarrollo (conjunto de entrenamiento + conjunto de pruebas de desarrollo) y un conjunto de pruebas (o conjunto de evaluación). Recuerde que su objective básico sería que su sistema aprenda y clasifique nuevas entradas que nunca antes han visto en el conjunto Dev o en el conjunto de pruebas.

El conjunto de prueba generalmente tiene el mismo formato que el conjunto de entrenamiento. Sin embargo, es muy importante que el conjunto de prueba sea distinto del corpus de entrenamiento: si simplemente reutilizáramos el conjunto de entrenamiento como conjunto de prueba, entonces un modelo que simplemente memorizara su entrada, sin aprender a generalizar a nuevos ejemplos, recibiría engañosamente puntuaciones altas.

En general, para un ejemplo, el 70% puede ser un conjunto de casos de entrenamiento. También recuerde dividir el conjunto original en los conjuntos de entrenamiento y prueba aleatoriamente .

Ahora llego a tu otra pregunta sobre Naive Bayes.

Fuente por ejemplo a continuación : http://www.statsoft.com/textbook/naive-bayes-classifier

Para demostrar el concepto de Clasificación Naïve Bayes, considere el siguiente ejemplo:

enter image description here

Como se indica, los objetos se pueden clasificar como GREEN o RED . Nuestra tarea es clasificar los casos nuevos a medida que llegan, es decir, decidir a qué etiqueta de clase pertenecen, en función de los objetos existentes actualmente.

Como hay el doble de objetos GREEN que el RED , es razonable creer que un caso nuevo (que no se ha observado aún) es dos veces más probable que tenga membresía GREEN lugar de RED . En el análisis bayesiano, esta creencia se conoce como la probabilidad previa. Las probabilidades anteriores se basan en la experiencia previa, en este caso, el porcentaje de objetos GREEN y RED , y a menudo se utilizan para predecir los resultados antes de que realmente sucedan.

Por lo tanto, podemos escribir:

Probabilidad previa de GREEN : number of GREEN objects / total number of objects

Probabilidad previa de RED : number of RED objects / total number of objects

Dado que hay un total de 60 objetos, 40 de los cuales son GREEN y 20 RED , nuestras probabilidades anteriores para la membresía de la clase son:

Probabilidad previa para GREEN : 40 / 60

Probabilidad previa para RED : 20 / 60

Habiendo formulado nuestra probabilidad previa, ahora estamos listos para clasificar un nuevo objeto (círculo WHITE en el siguiente diagtwig). Dado que los objetos están bien agrupados, es razonable suponer que GREEN más objetos GREEN (o RED ) estén cerca de X, más probable es que los nuevos casos pertenezcan a ese color en particular. Para medir esta probabilidad, dibujamos un círculo alrededor de X que abarca un número (para ser elegido a priori) de puntos independientemente de sus tags de clase. Luego calculamos la cantidad de puntos en el círculo que pertenece a cada etiqueta de clase. De esto calculamos la probabilidad:

enter image description here

enter image description here

De la ilustración anterior, está claro que la Probabilidad de X dada GREEN es menor que la Probabilidad de X dado RED , ya que el círculo abarca 1 objeto GREEN y 3 RED . Así:

enter image description here

enter image description here

Aunque las probabilidades previas indican que X puede pertenecer a GREEN (dado que hay dos veces más GREEN comparación con RED ) la probabilidad indica lo contrario; que la membresía de clase de X es RED (dado que hay más objetos RED en las cercanías de X que GREEN ). En el análisis bayesiano, la clasificación final se produce combinando ambas fonts de información, es decir, la probabilidad previa y la posibilidad de formar una probabilidad posterior utilizando la llamada regla de Bayes (llamada así por el reverendo Thomas Bayes 1702-1761).

enter image description here

Finalmente, clasificamos X como RED ya que su membresía de clase alcanza la mayor probabilidad posterior.

Me doy cuenta de que esta es una vieja pregunta, con una respuesta establecida. La razón por la que estoy publicando es porque la respuesta aceptada tiene muchos elementos de k-NN ( k -vecinos más cercanos), un algoritmo diferente.

Ambos k-NN y NaiveBayes son algoritmos de clasificación. Conceptualmente, k-NN usa la idea de “cercanía” para clasificar nuevas entidades. En k-NN ‘cercanía’ se modela con ideas tales como Distancia Euclidiana o Distancia Coseno. Por el contrario, en NaiveBayes, el concepto de “probabilidad” se usa para clasificar nuevas entidades.

Como la pregunta es sobre Naive Bayes, así es como describiría las ideas y los pasos para alguien. Trataré de hacerlo con tan pocas ecuaciones y en inglés simple tanto como sea posible.

Primero, la probabilidad condicional y la regla de Bayes

Antes de que alguien pueda comprender y apreciar los matices de Naive Bayes, primero deben conocer un par de conceptos relacionados, a saber, la idea de probabilidad condicional y la regla de Bayes. (Si está familiarizado con estos conceptos, salte a la sección titulada Cómo llegar a Naive Bayes ‘ )

Probabilidad condicional en inglés simple: ¿Cuál es la probabilidad de que algo suceda, dado que algo más ya ha sucedido?

Digamos que hay algún Resultado O. Y alguna Evidencia E. De la forma en que se definen estas probabilidades: La Probabilidad de tener tanto el Resultado O como la Evidencia E es: (Probabilidad de O ocurriendo) multiplicado por el (Prob de E dado que O pasó)

Un ejemplo para comprender la probabilidad condicional:

Digamos que tenemos una colección de senadores estadounidenses. Los senadores podrían ser demócratas o republicanos. También son hombres o mujeres.

Si seleccionamos un senador completamente al azar, ¿cuál es la probabilidad de que esta persona sea una mujer demócrata? La probabilidad condicional puede ayudarnos a responder eso.

Probabilidad de (senador demócrata y mujer) = Prob (el senador es demócrata) multiplicado por la probabilidad condicional de ser mujer dado que son demócratas.

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

Podríamos calcular exactamente lo mismo, al revés:

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

Comprender la regla de Bayes

Conceptualmente, esta es una forma de pasar de P (Evidencia | Resultado Conocido) a P (Resultado | Evidencia Conocida). A menudo, sabemos con qué frecuencia se observan algunas pruebas particulares, dado un resultado conocido . Tenemos que usar este hecho conocido para calcular el reverso, para calcular la posibilidad de que ese resultado ocurra , dada la evidencia.

P (Resultado dado que conocemos alguna Evidencia) = P (Evidencia dado que conocemos el Resultado) veces Prob (Resultado), escalado por P (Evidencia)

El ejemplo clásico para entender la Regla de Bayes:

 Probability of Disease D given Test-positive = Prob(Test is positive|Disease) * P(Disease) _______________________________________________________________ (scaled by) Prob(Testing Positive, with or without the disease) 

Ahora, todo esto fue solo un preámbulo, para llegar a Naive Bayes.

Llegar a Naive Bayes ‘

Hasta ahora, hemos hablado solo de una pieza de evidencia. En realidad, tenemos que predecir un resultado dado evidencia múltiple. En ese caso, las matemáticas se vuelven muy complicadas. Para evitar esa complicación, un enfoque es “desacoplar” múltiples pruebas y tratar cada pieza de evidencia como independiente. Este enfoque es por lo que esto se llama ingenuo Bayes.

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

Muchas personas eligen recordar esto como:

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

Observe algunas cosas sobre esta ecuación:

  • Si el Prob (evidencia | resultado) es 1, entonces solo estamos multiplicando por 1.
  • Si el Prob (alguna evidencia | resultado) es 0, entonces el problema completo se convierte en 0. Si ve evidencia contradictoria, podemos descartar ese resultado.
  • Como dividimos todo por P (Evidencia), incluso podemos escapar sin calcularlo.
  • La intuición detrás de la multiplicación por la anterior es que damos alta probabilidad a resultados más comunes, y bajas probabilidades a resultados poco probables. Estas también se llaman base rates y son una forma de escalar nuestras probabilidades predichas.

¿Cómo aplicar NaiveBayes para predecir un resultado?

Simplemente ejecute la fórmula anterior para cada resultado posible. Como estamos tratando de clasificar , cada resultado se denomina class y tiene una class label. Nuestro trabajo es mirar la evidencia, considerar qué tan probable es ser esta clase o esa clase, y asignarle una etiqueta a cada entidad. Nuevamente, tomamos un enfoque muy simple: la clase que tiene la mayor probabilidad es declarada como “ganadora” y esa etiqueta de clase se asigna a esa combinación de evidencias.

Ejemplo de fruta

Probémoslo con un ejemplo para boost nuestro entendimiento: el OP solicitó un ejemplo de identificación de “fruta”.

Digamos que tenemos datos sobre 1000 piezas de fruta. Resulta que son de plátano , naranja o alguna otra fruta . Sabemos 3 características sobre cada fruta:

  1. Si es largo
  2. Si es dulce y
  3. Si su color es amarillo.

Este es nuestro ‘conjunto de entrenamiento’. Usaremos esto para predecir el tipo de fruta nueva que encontramos.

 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 ___________________________________________________________________ 

Podemos precomputar muchas cosas sobre nuestra colección de frutas.

Las llamadas probabilidades “Prior”. (Si no conociéramos ninguno de los atributos de la fruta, esta sería nuestra suposición). Estas son nuestras base rates.

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

Probabilidad de “Evidencia”

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

Probabilidad de “verosimilitud”

 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 

Dada una fruta, ¿cómo clasificarla?

Digamos que se nos dan las propiedades de una fruta desconocida y se nos pide que la clasifiquemos. Nos dicen que la fruta es larga, dulce y amarilla. ¿Es un plátano? ¿Es una naranja? ¿O es alguna otra fruta?

Simplemente podemos ejecutar los números para cada uno de los 3 resultados, uno por uno. Luego elegimos la probabilidad más alta y “clasificamos” nuestra fruta desconocida como perteneciente a la clase que tenía la probabilidad más alta en base a nuestra evidencia previa (nuestro juego de entrenamiento de 1000 frutas):

 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) 

Por un margen abrumador ( 0.252 >> 0.01875 ), clasificamos esta fruta dulce / larga / amarilla como probable que sea una banana.

¿Por qué el Clasificador Bayes es tan popular?

Mira a qué se reduce finalmente. Solo un conteo y una multiplicación. Podemos precomputar todos estos términos, por lo que la clasificación se vuelve fácil, rápida y eficiente.

Let z = 1 / P(evidence). Ahora calculamos rápidamente las siguientes tres cantidades.

 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) ... 

Asigna la etiqueta de la clase de la que sea el número más alto, y listo.

A pesar del nombre, Naive Bayes resulta ser excelente en ciertas aplicaciones. La clasificación de texto es un área donde realmente brilla.

Espero que ayude a entender los conceptos detrás del algoritmo de Naive Bayes.

Ram Narasimhan explicó el concepto muy bien aquí abajo hay una explicación alternativa a través del ejemplo de código de Naive Bayes en acción
Utiliza un problema de ejemplo de este libro en la página 351
Este es el conjunto de datos que vamos a utilizar
enter image description here
En el conjunto de datos anterior si damos la hipótesis = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'} entonces ¿cuál es la probabilidad que comprará o no comprará una computadora.
El código a continuación responde exactamente esa pregunta.
Simplemente cree un archivo llamado new_dataset.csv y pegue el siguiente contenido.

 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 

Aquí está el código ¡los comentarios explican todo lo que estamos haciendo aquí! [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() 

salida:

 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 

Espero que ayude a entender mejor el problema

paz

Naive Bayes: Naive Bayes está bajo supervisión de aprendizaje automático que solía hacer clasificaciones de conjuntos de datos. Se usa para predecir cosas en base a su conocimiento previo y suposiciones de independencia.

Lo llaman ingenuo porque sus suposiciones (supone que todas las características del conjunto de datos son igualmente importantes e independientes) son realmente optimistas y raramente verdaderas en la mayoría de las aplicaciones del mundo real.

Es el algoritmo de clasificación que toma la decisión para el conjunto de datos desconocido. Se basa en el teorema de Bayes que describe la probabilidad de un evento en función de su conocimiento previo.

El siguiente diagtwig muestra cómo ingenuo Bayes funciona

enter image description here

Fórmula para predecir NB:

enter image description here

¿Cómo usar el algoritmo Naive Bayes?

Tomemos un ejemplo de cómo NB woks

Paso 1: Primero descubrimos la probabilidad de tabla que muestra la probabilidad de sí o no en el diagtwig de abajo. Paso 2: Encuentra la probabilidad posterior de cada clase.

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. 

Para obtener más referencias, consulte estos blogs.

Consulte los ejemplos de Naive-Bayes de GitHub Repository

Intento explicar la regla de Bayes con un ejemplo.

Supongamos que sabe que el 10% de las personas son fumadores. También sabe que el 90% de los fumadores son hombres y el 80% de ellos tienen más de 20 años.

Ahora ves a alguien que es un hombre y tiene 15 años. Desea saber la posibilidad de que sea fumador:

  X = smoker | he is a man and under 20 

Como sabe que el 10% de las personas son fumadoras, su conjetura inicial es del 10% ( probabilidad previa , sin saber nada de la persona) pero las otras pruebas (que es un hombre y tiene 15) pueden afectar esta suposición.

Cada evidencia puede boost o disminuir esta posibilidad. Por ejemplo, este hecho de que es un hombre puede boost las posibilidades, siempre que este porcentaje (ser hombre) entre los no fumadores sea menor, por ejemplo, 40%. En otras palabras, ser hombre debe ser un buen indicador de ser un fumador en lugar de un no fumador.

Podemos mostrar esta contribución de otra manera. Para cada característica, necesita comparar el carácter común (probabilidad) de esa característica (f) solo con su característica común bajo las condiciones dadas. ( P(f) vs. P(f | x) . Por ejemplo, si sabemos que la probabilidad de ser hombre es del 90% en una sociedad y el 90% de los fumadores también son hombres, entonces saber que alguien es un hombre no no nos ayudan (10% * (90% / 90%) = 10%) . Pero si los hombres contribuyen al 40% de la sociedad, pero el 90% de los fumadores, saber que alguien es un hombre aumenta las posibilidades de ser un fumador (10% * (90% / 40%) = 22.5% ) . De la misma manera, si la probabilidad de ser hombre era 95% en la sociedad, entonces independientemente del hecho de que el porcentaje de hombres entre los fumadores es alto (90%)! la evidencia de que alguien es un hombre disminuye la posibilidad de que él sea fumador (10% * (90% / 95%) = 9.5%) .

Entonces tenemos:

 P(X) = P(smoker)* (P(being a man | smoker)/P(being a man))* (P(under 20 | smoker)/ P(under 20)) 

Tenga en cuenta que en esta fórmula asumimos que ser hombre y tener menos de 20 años son características independientes, así que los multiplicamos, significa que saber que alguien es menor de 20 años no tiene ningún efecto en adivinar que es hombre o mujer. Pero puede no ser cierto, por ejemplo, tal vez la mayoría de la adolescencia en una sociedad son hombres …

Para usar esta fórmula en un clasificador

El clasificador se da con algunas características (ser hombre y ser menor de 20) y debe decidir si es fumador o no. Utiliza la fórmula anterior para encontrar eso. Para proporcionar las probabilidades requeridas (90%, 10%, 80% …) utiliza el conjunto de entrenamiento. Por ejemplo, cuenta las personas en el conjunto de entrenamiento que son fumadores y descubren que contribuyen con el 10% de la muestra. Luego, para los fumadores, verifica cuántos de ellos son hombres o mujeres … cuántos tienen más de 20 o menos de 20 …