2012-03-25 16 views
6

私は、点の分類のためにC#でガウスのNaive Bayesを実装しようとしています。私は の最初の部分(http://www.statsoft.com/textbook/naive-bayes-classifier/)の確率部分を実装しているが、私はガウスのNaive Bayesアルゴリズムのノーマルモデルを実装する方法を理解していない。 これは私のコードです:このPDFファイルに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; 
     } 
    } 

(問題5)私は(http://romanager.ro/s.10-701.hw1.sol.pdf)を行うために必要なものの記述があります。私の仕事は、Gaussina Naive BayesとkNNアルゴリズムを実装し、その結果を一連のデータと比較することです。 Gaussian Naive Bayesアルゴリズムを実装する場所と方法を教えてください。

ありがとうございます!

+0

誰も私を助けることはできませんか? : – Urmelinho

+0

Urmelinho:奨励金を提供し、誰かが助けるかもしれない:-)いくつかのアイデアのために –

+0

私は誰かが私からの恩恵を欲しがっているとは思わない...アルゴリズムのこの部分については、私は完全に外です。あなたは、私の感謝が解決策に対するあなたの報酬であると考えるかもしれません。私は解決策としてアドバイスを検討します:D – Urmelinho

答えて

関連する問題