2012-03-25 23 views
6

Estoy tratando de implementar Gaise Naive Bayes en C# para la clasificación de los puntos. Tengo parte de probabilidad de la primera parte implementada (http://www.statsoft.com/textbook/naive-bayes-classifier/), pero no entiendo cómo implementar el modelo normal del algoritmo Naive Bayes de Gauss. Este es mi código:Implementar Naive Bayes gaussiano

class NaiveBayesClassifier 
    { 
     private List<Point> listTrainPoints = new List<Point>(); 
     private int totalPoints = 0; 

     public NaiveBayesClassifier(List<Point> listTrainPoints) 
     { 
      this.listTrainPoints = listTrainPoints; 
      this.totalPoints = this.listTrainPoints.Count; 
     } 

     private List<Point> vecinityPoints(Point p, double maxDist) 
     { 
      List<Point> listVecinityPoints = new List<Point>(); 
      for (int i = 0; i < listTrainPoints.Count; i++) 
      { 
       if (p.distance(listTrainPoints[i]) <= maxDist) 
       { 
        listVecinityPoints.Add(listTrainPoints[i]); 
       } 
      } 
      return listVecinityPoints; 
     } 

     public double priorProbabilityFor(double currentType) 
     { 
      double countCurrentType = 0; 
      for (int i = 0; i < this.listTrainPoints.Count; i++) 
      { 
       if (this.listTrainPoints[i].Type == currentType) 
       { 
        countCurrentType++; 
       } 
      } 

      return (countCurrentType/this.totalPoints); 
     } 

     public double likelihoodOfXGiven(double currentType, List<Point> listVecinityPoints) 
     { 
      double countCurrentType = 0; 
      for (int i = 0; i < listVecinityPoints.Count; i++) 
      { 
       if (listVecinityPoints[i].Type == currentType) 
       { 
        countCurrentType++; 
       } 
      } 

      return (countCurrentType/this.totalPoints); 
     } 

     public double posteriorProbabilityXBeing(double priorProbabilityFor, double likelihoodOfXGiven) 
     { 
      return (priorProbabilityFor * likelihoodOfXGiven); 
     } 

     public int allegedClass(Point p, double maxDist) 
     { 
      int type1 = 1, type2 = 2; 

      List<Point> listVecinityPoints = this.vecinityPoints(p, maxDist); 

      double priorProbabilityForType1 = this.priorProbabilityFor(type1); 
      double priorProbabilityForType2 = this.priorProbabilityFor(type2); 

      double likelihoodOfXGivenType1 = likelihoodOfXGiven(type1, listVecinityPoints); 
      double likelihoodOfXGivenType2 = likelihoodOfXGiven(type2, listVecinityPoints); 

      double posteriorProbabilityXBeingType1 = posteriorProbabilityXBeing(priorProbabilityForType1, likelihoodOfXGivenType1); 
      double posteriorProbabilityXBeingType2 = posteriorProbabilityXBeing(priorProbabilityForType2, likelihoodOfXGivenType2); 

      if (posteriorProbabilityXBeingType1 > posteriorProbabilityXBeingType2) 
       return type1; 
      else 
       return type2; 
     } 
    } 

En este archivo pdf (Problema 5) es la descripción de lo que tengo que hacer (http://romanager.ro/s.10-701.hw1.sol.pdf). Mi trabajo es implementar los algoritmos Gaussina Naive Bayes y kNN y comparar el resultado en un conjunto de datos. Por favor, enséñeme dónde y cómo implementar el algoritmo Gausiano Naive Bayes.

Gracias!

+0

nadie puede ayudarme? :( – Urmelinho

+0

Urmelinho: ofrecer una recompensa y alguien podría ayudar :-) –

+0

para algunas ideas No creo que alguien quiera recompensa de mí ... para esta parte del algoritmo estoy completamente fuera. Puede considerar que mi agradecimiento será su recompensa por la solución. Consideraré cualquier consejo como una solución: D – Urmelinho

Respuesta

Cuestiones relacionadas