实现高斯朴素贝叶斯

我正在尝试用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)。我的工作是实现高斯朴素贝叶斯和kNN算法,并在一个数据集上比较结果。请教我如何以及在哪里实现高斯朴素贝叶斯算法。

谢谢!


回答:

这里有一个很好的例子:

查看此页面底部的性别预测器作为一个使用真实数据集的例子

这里有一个很好的解释:

StackOverflow上的朴素贝叶斯分解

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注