2012-03-25 15 views
6

Próbuję zaimplementować Gaussian Naive Bayes w C# do klasyfikacji punktów. Mam zaimplementowałem pierwszą część (http://www.statsoft.com/textbook/naive-bayes-classifier/) część prawdopodobieństwa, ale nie rozumiem, jak zaimplementować normalny model Gaussian Naive Bayes algorytm. To jest mój kod:Implementacja Gaussian Naive Bayes

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; 
     } 
    } 

W tym pliku pdf (Problem 5) jest opis co należy zrobić (http://romanager.ro/s.10-701.hw1.sol.pdf). Moja praca polega na zaimplementowaniu algorytmów Gaussina Naive Bayes i kNN i porównaniu wyniku na zbiorze danych. Proszę, naucz mnie, gdzie i jak zaimplementować algorytm Gaussa Naive Bayesa.

Dzięki!

+0

nikt nie może mi pomóc? :( – Urmelinho

+0

Urmelinho: Zaproponuj nagrodę, a ktoś może pomóc :-) –

+0

za kilka pomysłów, nie sądzę, że ktoś chce ode mnie nagrody ... dla tej części algorytmu jestem całkowicie na zewnątrz. Możesz uznać, że moje podziękowania będą twoją nagrodą za rozwiązanie. Rozważę każdą radę jako rozwiązanie: D – Urmelinho

Odpowiedz

Powiązane problemy