实现高斯朴素贝叶斯

我正在尝试用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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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