2010-05-22 7 views
7

Como asignación escolar, debo implementar el algoritmo de Naïve Bayes que tengo la intención de hacer en Java.Implementando el algoritmo de Naïve Bayes en Java - Necesito alguna orientación

Al tratar de comprender cómo se hace, he leído el libro "Minería de datos: herramientas y técnicas prácticas de aprendizaje automático" que contiene una sección sobre este tema pero todavía no estoy seguro de algunos puntos principales que bloquean mi progreso.

Como no busco la solución aquí, les diré lo que pienso en mi cabeza, lo que creo que es el enfoque correcto y, a cambio, pido una corrección/guía que será muy apreciada. tenga en cuenta que soy un principiante absoluto en el algoritmo de Naïve Bayes, minería de datos y en programación general, por lo que es posible que vea comentarios/cálculos estúpidos a continuación:

El conjunto de datos de capacitación que se me da tiene 4 atributos/funciones que son numéricos y normalizado (en el rango [0 1]) utilizando Weka (no hay valores perdidos) y una clase nominal (sí/no)

1) los datos procedentes de un archivo CSV es numérico AHI

    * Teniendo en cuenta los atributos son numérico uso fórmula PDF (función de densidad de probabilidad).
      + Para calcular el PDF en Java i primero separar los atributos en función de si están en la clase sí o no clase y los mantienen en diferentes gama (array class yes and array class no)
      + A continuación se calcula la media ( sum of the values in row/number of values in that row) y la adivinación estándar para cada una de los 4 atributos (columnas) de cada clase
      + Ahora para encontrar PDF de un valor dado (n) hago (n-mean)^2/(2*SD^2),
      + Entonces encontrar P(yes | E) y P(no | E) i multiply the PDF value of all 4 given attributes and compare which is larger, que indica la clase a la que pertenece

En temrs de Java, estoy usando ArrayList of ArrayList y Double para almacenar los valores de los atributos.

Por último, no estoy seguro de cómo obtener nuevos datos? ¿Debo solicitar un archivo de entrada (como csv) o un símbolo del sistema y solicitar 4 valores?

Me detengo aquí por el momento (tengo más preguntas) pero me preocupa que no reciba ninguna respuesta dado cuánto tiempo tiene. Realmente apreciaré a aquellos que dan su tiempo para leer mis problemas y comentar.

+0

¿La visión general de cómo voy a implementar los algoritmos suena correctamente? – ke3pup

Respuesta

5

Lo que está haciendo es casi correcto.

  + Then to find P(yes | E) and P(no | E) i multiply the PDF value of all 4 given attributes and compare which is larger, which indicates the class it belongs to 

Aquí, se olvidó de multiplicar el P antes (sí) o P (sin). Recuerde que las fórmulas de decisión:

P(Yes | E) ~= P(Attr_1 | Yes) * P(Attr_2 | Yes) * P(Attr_3 | Yes) * P(Attr_4 | Yes) * P(Yes) 

Para bayesiano (y cualquier otros algoritmos de aprendizaje/clasificación supervisada), es necesario tener datos de entrenamiento y datos de prueba. Utiliza datos de entrenamiento para entrenar el modelo y hacer predicciones sobre los datos de prueba. Simplemente podría usar datos de entrenamiento como datos de prueba. O puede dividir el archivo csv en dos partes, una para el entrenamiento y otra para las pruebas. También podría hacer la validación cruzada en el archivo csv.

+0

Definitivamente use la validación cruzada si es posible. Nunca pruebe sus datos de entrenamiento si puede evitarlo. –

+0

@Shaggy, probar el entrenamiento es una opción, y una necesidad para un nuevo conjunto de datos o un nuevo clasificador implementado. Te dice qué tan bien se hace la optimización. Si un clasificador no funciona bien en los datos de entrenamiento, este clasificador no se puede usar para el conjunto de datos. El rendimiento de los datos de entrenamiento también se puede utilizar para fines de diagnóstico al escribir un clasificador. –

Cuestiones relacionadas