Я пытаюсь реализовать гауссовские наивные байсы в C# для классификации точек. У меня есть реализована первая часть (http://www.statsoft.com/textbook/naive-bayes-classifier/), но я не понимаю, как реализовать нормальную модель алгоритма Гаусса Наивного Байеса. Это мой код:Использовать гауссовские наивные байесы
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;
}
}
В этом PDF-файл (задача 5) является описание того, что мне нужно сделать (http://romanager.ro/s.10-701.hw1.sol.pdf). Моя работа - реализовать алгоритмы Gaussina Naive Bayes и kNN и сравнить результат по набору данных. Пожалуйста, научите меня, где и как реализовать алгоритм Гаусса Наив Байеса.
Спасибо!
никто не может мне помочь? :( – Urmelinho
Urmelinho: Предлагаем щедрость, и кто-то может помочь :-) –
для некоторых идей я не думаю, что кто-то хочет щедрость от меня ... для этой части алгоритма я полностью выхожу. Вы можете подумать, что я благодарю вас за вознаграждение за решение. Я буду рассматривать любой совет как решение: D – Urmelinho